← services
Trace flow
6d249c159a52f15d1a7028e269fc4c5d · live fetch 3782 ms · tilda-trial-automation
Waterfall
Request span + Neo4j queries by start offset (reconstructed from log timestamps — approximate)
readwrite
Queries in this trace 1895
| Query | Offset | Elapsed | R/W |
|---|---|---|---|
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 1 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 1 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 1 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n |
— | 0 ms | read |
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
|
— | 0 ms | read |
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
|
— | 0 ms | read |
Logs in this trace 1000
2h ago DEBUG virtual-assistant ✅ Org 02bcadc5-e03b-44d6-842c-db76b3734289 summary: processed=379, reminders_sent=0, moved_to_need_attention=0
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:377
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
✅ Org 02bcadc5-e03b-44d6-842c-db76b3734289 summary: processed=379, reminders_sent=0, moved_to_need_attention=0
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:377",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "\u2705 Org 02bcadc5-e03b-44d6-842c-db76b3734289 summary: processed=379, reminders_sent=0, moved_to_need_attention=0",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.179Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=df0137d9-2ffd-437d-a537-47ce14709fe3 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=df0137d9-2ffd-437d-a537-47ce14709fe3 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=df0137d9-2ffd-437d-a537-47ce14709fe3 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.179Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641105",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027df0137d9-2ffd-437d-a537-47ce14709fe3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.176Z",
"transactionId": 12025208.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641104",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027df0137d9-2ffd-437d-a537-47ce14709fe3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.168Z",
"transactionId": 12025207.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641103",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027df0137d9-2ffd-437d-a537-47ce14709fe3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.165Z",
"transactionId": 12025207.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641102",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027df0137d9-2ffd-437d-a537-47ce14709fe3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.158Z",
"transactionId": 12025206.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641101",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027df0137d9-2ffd-437d-a537-47ce14709fe3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.151Z",
"transactionId": 12025205.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order df0137d9-2ffd-437d-a537-47ce14709fe3
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order df0137d9-2ffd-437d-a537-47ce14709fe3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order df0137d9-2ffd-437d-a537-47ce14709fe3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.146Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order df0137d9-2ffd-437d-a537-47ce14709fe3
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order df0137d9-2ffd-437d-a537-47ce14709fe3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order df0137d9-2ffd-437d-a537-47ce14709fe3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.145Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b63e8daa-2602-4c2b-8546-76510531aa7b no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b63e8daa-2602-4c2b-8546-76510531aa7b no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b63e8daa-2602-4c2b-8546-76510531aa7b no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.145Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641100",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b63e8daa-2602-4c2b-8546-76510531aa7b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.142Z",
"transactionId": 12025204.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641099",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b63e8daa-2602-4c2b-8546-76510531aa7b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.134Z",
"transactionId": 12025203.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641098",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b63e8daa-2602-4c2b-8546-76510531aa7b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.131Z",
"transactionId": 12025203.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641097",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b63e8daa-2602-4c2b-8546-76510531aa7b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.124Z",
"transactionId": 12025202.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641096",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b63e8daa-2602-4c2b-8546-76510531aa7b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.116Z",
"transactionId": 12025201.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b63e8daa-2602-4c2b-8546-76510531aa7b
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b63e8daa-2602-4c2b-8546-76510531aa7b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b63e8daa-2602-4c2b-8546-76510531aa7b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.112Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b63e8daa-2602-4c2b-8546-76510531aa7b
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b63e8daa-2602-4c2b-8546-76510531aa7b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b63e8daa-2602-4c2b-8546-76510531aa7b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.112Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=56540d66-ab1c-4e74-abc9-68cab4f32db2 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=56540d66-ab1c-4e74-abc9-68cab4f32db2 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=56540d66-ab1c-4e74-abc9-68cab4f32db2 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.111Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641095",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002756540d66-ab1c-4e74-abc9-68cab4f32db2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.108Z",
"transactionId": 12025200.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641094",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002756540d66-ab1c-4e74-abc9-68cab4f32db2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.101Z",
"transactionId": 12025199.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641093",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002756540d66-ab1c-4e74-abc9-68cab4f32db2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.098Z",
"transactionId": 12025199.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641092",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002756540d66-ab1c-4e74-abc9-68cab4f32db2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.091Z",
"transactionId": 12025198.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641091",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002756540d66-ab1c-4e74-abc9-68cab4f32db2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.083Z",
"transactionId": 12025197.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 56540d66-ab1c-4e74-abc9-68cab4f32db2
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 56540d66-ab1c-4e74-abc9-68cab4f32db2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 56540d66-ab1c-4e74-abc9-68cab4f32db2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.079Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 56540d66-ab1c-4e74-abc9-68cab4f32db2
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 56540d66-ab1c-4e74-abc9-68cab4f32db2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 56540d66-ab1c-4e74-abc9-68cab4f32db2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.078Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=43c7d9d4-4ca8-4126-b6d5-df6f0c28e207 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=43c7d9d4-4ca8-4126-b6d5-df6f0c28e207 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=43c7d9d4-4ca8-4126-b6d5-df6f0c28e207 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.078Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641090",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002743c7d9d4-4ca8-4126-b6d5-df6f0c28e207\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.075Z",
"transactionId": 12025196.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641089",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002743c7d9d4-4ca8-4126-b6d5-df6f0c28e207\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.068Z",
"transactionId": 12025195.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641088",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002743c7d9d4-4ca8-4126-b6d5-df6f0c28e207\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.065Z",
"transactionId": 12025195.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641087",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002743c7d9d4-4ca8-4126-b6d5-df6f0c28e207\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.058Z",
"transactionId": 12025194.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641086",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002743c7d9d4-4ca8-4126-b6d5-df6f0c28e207\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.050Z",
"transactionId": 12025193.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.045Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 43c7d9d4-4ca8-4126-b6d5-df6f0c28e207",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.045Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=fad7527f-5831-405a-9758-dcaf2a065b3e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=fad7527f-5831-405a-9758-dcaf2a065b3e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=fad7527f-5831-405a-9758-dcaf2a065b3e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.044Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641085",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027fad7527f-5831-405a-9758-dcaf2a065b3e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.041Z",
"transactionId": 12025192.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641084",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027fad7527f-5831-405a-9758-dcaf2a065b3e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.034Z",
"transactionId": 12025191.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641083",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027fad7527f-5831-405a-9758-dcaf2a065b3e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.031Z",
"transactionId": 12025191.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641082",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027fad7527f-5831-405a-9758-dcaf2a065b3e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.024Z",
"transactionId": 12025190.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641081",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027fad7527f-5831-405a-9758-dcaf2a065b3e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.016Z",
"transactionId": 12025189.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order fad7527f-5831-405a-9758-dcaf2a065b3e
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order fad7527f-5831-405a-9758-dcaf2a065b3e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order fad7527f-5831-405a-9758-dcaf2a065b3e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.012Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order fad7527f-5831-405a-9758-dcaf2a065b3e
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order fad7527f-5831-405a-9758-dcaf2a065b3e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order fad7527f-5831-405a-9758-dcaf2a065b3e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.012Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b169f9b1-8e4d-4e07-8c89-7a48c096b6d2 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:09 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b169f9b1-8e4d-4e07-8c89-7a48c096b6d2 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b169f9b1-8e4d-4e07-8c89-7a48c096b6d2 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:09.012Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641080",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b169f9b1-8e4d-4e07-8c89-7a48c096b6d2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.008Z",
"transactionId": 12025188.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:09 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641079",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b169f9b1-8e4d-4e07-8c89-7a48c096b6d2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:09.001Z",
"transactionId": 12025187.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641078",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b169f9b1-8e4d-4e07-8c89-7a48c096b6d2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.998Z",
"transactionId": 12025187.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641077",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b169f9b1-8e4d-4e07-8c89-7a48c096b6d2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.991Z",
"transactionId": 12025186.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641076",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b169f9b1-8e4d-4e07-8c89-7a48c096b6d2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.983Z",
"transactionId": 12025185.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.979Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b169f9b1-8e4d-4e07-8c89-7a48c096b6d2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.979Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b49e6cf0-5b83-425e-9973-7a3da0ccd80c no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b49e6cf0-5b83-425e-9973-7a3da0ccd80c no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b49e6cf0-5b83-425e-9973-7a3da0ccd80c no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.978Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641075",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b49e6cf0-5b83-425e-9973-7a3da0ccd80c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.975Z",
"transactionId": 12025184.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641074",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b49e6cf0-5b83-425e-9973-7a3da0ccd80c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.969Z",
"transactionId": 12025183.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641073",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b49e6cf0-5b83-425e-9973-7a3da0ccd80c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.966Z",
"transactionId": 12025183.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641072",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b49e6cf0-5b83-425e-9973-7a3da0ccd80c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.958Z",
"transactionId": 12025182.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641071",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b49e6cf0-5b83-425e-9973-7a3da0ccd80c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.951Z",
"transactionId": 12025181.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.946Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b49e6cf0-5b83-425e-9973-7a3da0ccd80c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.946Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=103246e2-7256-476a-b402-3b6f8cc949ab no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=103246e2-7256-476a-b402-3b6f8cc949ab no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=103246e2-7256-476a-b402-3b6f8cc949ab no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.946Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641070",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027103246e2-7256-476a-b402-3b6f8cc949ab\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.942Z",
"transactionId": 12025180.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641069",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027103246e2-7256-476a-b402-3b6f8cc949ab\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.935Z",
"transactionId": 12025179.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641068",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027103246e2-7256-476a-b402-3b6f8cc949ab\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.932Z",
"transactionId": 12025179.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641067",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027103246e2-7256-476a-b402-3b6f8cc949ab\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.925Z",
"transactionId": 12025178.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641066",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027103246e2-7256-476a-b402-3b6f8cc949ab\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.917Z",
"transactionId": 12025177.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 103246e2-7256-476a-b402-3b6f8cc949ab
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 103246e2-7256-476a-b402-3b6f8cc949ab
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 103246e2-7256-476a-b402-3b6f8cc949ab",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.913Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 103246e2-7256-476a-b402-3b6f8cc949ab
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 103246e2-7256-476a-b402-3b6f8cc949ab
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 103246e2-7256-476a-b402-3b6f8cc949ab",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.912Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=1f1674f7-132c-45ef-a593-fb4a5c499162 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=1f1674f7-132c-45ef-a593-fb4a5c499162 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=1f1674f7-132c-45ef-a593-fb4a5c499162 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.912Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641065",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00271f1674f7-132c-45ef-a593-fb4a5c499162\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.909Z",
"transactionId": 12025176.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641064",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00271f1674f7-132c-45ef-a593-fb4a5c499162\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.903Z",
"transactionId": 12025175.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641063",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00271f1674f7-132c-45ef-a593-fb4a5c499162\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.900Z",
"transactionId": 12025175.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641062",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00271f1674f7-132c-45ef-a593-fb4a5c499162\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.893Z",
"transactionId": 12025174.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641061",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00271f1674f7-132c-45ef-a593-fb4a5c499162\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.884Z",
"transactionId": 12025173.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 1f1674f7-132c-45ef-a593-fb4a5c499162
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 1f1674f7-132c-45ef-a593-fb4a5c499162
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 1f1674f7-132c-45ef-a593-fb4a5c499162",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.879Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 1f1674f7-132c-45ef-a593-fb4a5c499162
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 1f1674f7-132c-45ef-a593-fb4a5c499162
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 1f1674f7-132c-45ef-a593-fb4a5c499162",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.879Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=10068bd4-0e6c-4d52-b9cb-5831c2147e0e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=10068bd4-0e6c-4d52-b9cb-5831c2147e0e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=10068bd4-0e6c-4d52-b9cb-5831c2147e0e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.879Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641060",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002710068bd4-0e6c-4d52-b9cb-5831c2147e0e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.876Z",
"transactionId": 12025172.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641059",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002710068bd4-0e6c-4d52-b9cb-5831c2147e0e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.869Z",
"transactionId": 12025171.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641058",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002710068bd4-0e6c-4d52-b9cb-5831c2147e0e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.866Z",
"transactionId": 12025171.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641057",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002710068bd4-0e6c-4d52-b9cb-5831c2147e0e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.859Z",
"transactionId": 12025170.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641056",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002710068bd4-0e6c-4d52-b9cb-5831c2147e0e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.851Z",
"transactionId": 12025169.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.847Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 10068bd4-0e6c-4d52-b9cb-5831c2147e0e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.846Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=4183bc39-6a2d-49d6-bee6-c88655b2b592 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=4183bc39-6a2d-49d6-bee6-c88655b2b592 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=4183bc39-6a2d-49d6-bee6-c88655b2b592 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.846Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641055",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00274183bc39-6a2d-49d6-bee6-c88655b2b592\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.842Z",
"transactionId": 12025168.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641054",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00274183bc39-6a2d-49d6-bee6-c88655b2b592\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.834Z",
"transactionId": 12025167.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641053",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00274183bc39-6a2d-49d6-bee6-c88655b2b592\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.831Z",
"transactionId": 12025167.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641052",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00274183bc39-6a2d-49d6-bee6-c88655b2b592\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.824Z",
"transactionId": 12025166.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641051",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00274183bc39-6a2d-49d6-bee6-c88655b2b592\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.817Z",
"transactionId": 12025165.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 4183bc39-6a2d-49d6-bee6-c88655b2b592
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 4183bc39-6a2d-49d6-bee6-c88655b2b592
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 4183bc39-6a2d-49d6-bee6-c88655b2b592",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.812Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 4183bc39-6a2d-49d6-bee6-c88655b2b592
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 4183bc39-6a2d-49d6-bee6-c88655b2b592
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 4183bc39-6a2d-49d6-bee6-c88655b2b592",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.812Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=10247504-1081-45b5-961f-0b56e298f7fb no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=10247504-1081-45b5-961f-0b56e298f7fb no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=10247504-1081-45b5-961f-0b56e298f7fb no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.812Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641050",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002710247504-1081-45b5-961f-0b56e298f7fb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.809Z",
"transactionId": 12025164.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641049",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002710247504-1081-45b5-961f-0b56e298f7fb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.802Z",
"transactionId": 12025163.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641048",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002710247504-1081-45b5-961f-0b56e298f7fb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.799Z",
"transactionId": 12025163.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641047",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002710247504-1081-45b5-961f-0b56e298f7fb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.791Z",
"transactionId": 12025162.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641046",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002710247504-1081-45b5-961f-0b56e298f7fb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.782Z",
"transactionId": 12025161.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 10247504-1081-45b5-961f-0b56e298f7fb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 10247504-1081-45b5-961f-0b56e298f7fb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 10247504-1081-45b5-961f-0b56e298f7fb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.778Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 10247504-1081-45b5-961f-0b56e298f7fb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 10247504-1081-45b5-961f-0b56e298f7fb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 10247504-1081-45b5-961f-0b56e298f7fb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.778Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=22bd619a-474b-4709-a837-0f34587fe208 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=22bd619a-474b-4709-a837-0f34587fe208 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=22bd619a-474b-4709-a837-0f34587fe208 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.777Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641045",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002722bd619a-474b-4709-a837-0f34587fe208\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.774Z",
"transactionId": 12025160.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641044",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002722bd619a-474b-4709-a837-0f34587fe208\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.767Z",
"transactionId": 12025159.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641043",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002722bd619a-474b-4709-a837-0f34587fe208\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.764Z",
"transactionId": 12025159.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641042",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002722bd619a-474b-4709-a837-0f34587fe208\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.757Z",
"transactionId": 12025158.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641041",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002722bd619a-474b-4709-a837-0f34587fe208\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.749Z",
"transactionId": 12025157.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 22bd619a-474b-4709-a837-0f34587fe208
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 22bd619a-474b-4709-a837-0f34587fe208
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 22bd619a-474b-4709-a837-0f34587fe208",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.745Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 22bd619a-474b-4709-a837-0f34587fe208
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 22bd619a-474b-4709-a837-0f34587fe208
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 22bd619a-474b-4709-a837-0f34587fe208",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.744Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=98efc574-e1b1-4941-b2ba-33c960dedfb5 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=98efc574-e1b1-4941-b2ba-33c960dedfb5 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=98efc574-e1b1-4941-b2ba-33c960dedfb5 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.744Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641040",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002798efc574-e1b1-4941-b2ba-33c960dedfb5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.741Z",
"transactionId": 12025156.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641039",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002798efc574-e1b1-4941-b2ba-33c960dedfb5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.734Z",
"transactionId": 12025155.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641038",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002798efc574-e1b1-4941-b2ba-33c960dedfb5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.731Z",
"transactionId": 12025155.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641037",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002798efc574-e1b1-4941-b2ba-33c960dedfb5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.725Z",
"transactionId": 12025154.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641036",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002798efc574-e1b1-4941-b2ba-33c960dedfb5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.717Z",
"transactionId": 12025153.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 98efc574-e1b1-4941-b2ba-33c960dedfb5
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 98efc574-e1b1-4941-b2ba-33c960dedfb5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 98efc574-e1b1-4941-b2ba-33c960dedfb5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.712Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 98efc574-e1b1-4941-b2ba-33c960dedfb5
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 98efc574-e1b1-4941-b2ba-33c960dedfb5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 98efc574-e1b1-4941-b2ba-33c960dedfb5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.712Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=8b202af2-13da-45a9-a049-9f45de28ac3d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=8b202af2-13da-45a9-a049-9f45de28ac3d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=8b202af2-13da-45a9-a049-9f45de28ac3d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.712Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641035",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00278b202af2-13da-45a9-a049-9f45de28ac3d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.709Z",
"transactionId": 12025152.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641034",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00278b202af2-13da-45a9-a049-9f45de28ac3d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.702Z",
"transactionId": 12025151.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641033",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00278b202af2-13da-45a9-a049-9f45de28ac3d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.699Z",
"transactionId": 12025151.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641032",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00278b202af2-13da-45a9-a049-9f45de28ac3d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.691Z",
"transactionId": 12025150.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641031",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00278b202af2-13da-45a9-a049-9f45de28ac3d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.683Z",
"transactionId": 12025149.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 8b202af2-13da-45a9-a049-9f45de28ac3d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 8b202af2-13da-45a9-a049-9f45de28ac3d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 8b202af2-13da-45a9-a049-9f45de28ac3d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.678Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 8b202af2-13da-45a9-a049-9f45de28ac3d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 8b202af2-13da-45a9-a049-9f45de28ac3d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 8b202af2-13da-45a9-a049-9f45de28ac3d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.678Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=c2311e68-8d95-484d-affb-e7e6ab004cbb no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=c2311e68-8d95-484d-affb-e7e6ab004cbb no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=c2311e68-8d95-484d-affb-e7e6ab004cbb no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.677Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641030",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027c2311e68-8d95-484d-affb-e7e6ab004cbb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.674Z",
"transactionId": 12025148.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641029",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027c2311e68-8d95-484d-affb-e7e6ab004cbb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.666Z",
"transactionId": 12025147.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641028",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027c2311e68-8d95-484d-affb-e7e6ab004cbb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.663Z",
"transactionId": 12025147.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641027",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027c2311e68-8d95-484d-affb-e7e6ab004cbb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.656Z",
"transactionId": 12025146.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641026",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027c2311e68-8d95-484d-affb-e7e6ab004cbb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.648Z",
"transactionId": 12025145.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order c2311e68-8d95-484d-affb-e7e6ab004cbb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order c2311e68-8d95-484d-affb-e7e6ab004cbb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order c2311e68-8d95-484d-affb-e7e6ab004cbb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.643Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order c2311e68-8d95-484d-affb-e7e6ab004cbb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order c2311e68-8d95-484d-affb-e7e6ab004cbb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order c2311e68-8d95-484d-affb-e7e6ab004cbb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.643Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=7184a0fa-90a6-4a1f-ae31-bf02cda5b893 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=7184a0fa-90a6-4a1f-ae31-bf02cda5b893 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=7184a0fa-90a6-4a1f-ae31-bf02cda5b893 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.643Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641025",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00277184a0fa-90a6-4a1f-ae31-bf02cda5b893\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.640Z",
"transactionId": 12025144.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641024",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00277184a0fa-90a6-4a1f-ae31-bf02cda5b893\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.633Z",
"transactionId": 12025143.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641023",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00277184a0fa-90a6-4a1f-ae31-bf02cda5b893\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.629Z",
"transactionId": 12025143.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641022",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00277184a0fa-90a6-4a1f-ae31-bf02cda5b893\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.622Z",
"transactionId": 12025142.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641021",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00277184a0fa-90a6-4a1f-ae31-bf02cda5b893\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.614Z",
"transactionId": 12025141.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.610Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 7184a0fa-90a6-4a1f-ae31-bf02cda5b893",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.610Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=29a82864-0730-405c-b7df-228742859fdb no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=29a82864-0730-405c-b7df-228742859fdb no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=29a82864-0730-405c-b7df-228742859fdb no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.609Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641020",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002729a82864-0730-405c-b7df-228742859fdb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.606Z",
"transactionId": 12025140.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641019",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002729a82864-0730-405c-b7df-228742859fdb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.599Z",
"transactionId": 12025139.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641018",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002729a82864-0730-405c-b7df-228742859fdb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.596Z",
"transactionId": 12025139.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641017",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002729a82864-0730-405c-b7df-228742859fdb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.589Z",
"transactionId": 12025138.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641016",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002729a82864-0730-405c-b7df-228742859fdb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.580Z",
"transactionId": 12025137.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 29a82864-0730-405c-b7df-228742859fdb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 29a82864-0730-405c-b7df-228742859fdb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 29a82864-0730-405c-b7df-228742859fdb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.575Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 29a82864-0730-405c-b7df-228742859fdb
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 29a82864-0730-405c-b7df-228742859fdb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 29a82864-0730-405c-b7df-228742859fdb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.575Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=edc07090-5d1c-4a28-b8b0-b4617e313fd5 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=edc07090-5d1c-4a28-b8b0-b4617e313fd5 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=edc07090-5d1c-4a28-b8b0-b4617e313fd5 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.575Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641015",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027edc07090-5d1c-4a28-b8b0-b4617e313fd5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.572Z",
"transactionId": 12025136.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641014",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027edc07090-5d1c-4a28-b8b0-b4617e313fd5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.564Z",
"transactionId": 12025135.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641013",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027edc07090-5d1c-4a28-b8b0-b4617e313fd5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.561Z",
"transactionId": 12025135.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641012",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027edc07090-5d1c-4a28-b8b0-b4617e313fd5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.553Z",
"transactionId": 12025134.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641011",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027edc07090-5d1c-4a28-b8b0-b4617e313fd5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.545Z",
"transactionId": 12025133.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order edc07090-5d1c-4a28-b8b0-b4617e313fd5
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order edc07090-5d1c-4a28-b8b0-b4617e313fd5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order edc07090-5d1c-4a28-b8b0-b4617e313fd5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.541Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order edc07090-5d1c-4a28-b8b0-b4617e313fd5
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order edc07090-5d1c-4a28-b8b0-b4617e313fd5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order edc07090-5d1c-4a28-b8b0-b4617e313fd5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.540Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=535aa4bc-ef00-4282-9e23-cb34f9880888 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=535aa4bc-ef00-4282-9e23-cb34f9880888 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=535aa4bc-ef00-4282-9e23-cb34f9880888 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.540Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641010",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027535aa4bc-ef00-4282-9e23-cb34f9880888\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.537Z",
"transactionId": 12025132.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641009",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027535aa4bc-ef00-4282-9e23-cb34f9880888\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.530Z",
"transactionId": 12025131.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641008",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027535aa4bc-ef00-4282-9e23-cb34f9880888\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.526Z",
"transactionId": 12025131.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641007",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027535aa4bc-ef00-4282-9e23-cb34f9880888\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.519Z",
"transactionId": 12025130.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641006",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027535aa4bc-ef00-4282-9e23-cb34f9880888\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.511Z",
"transactionId": 12025129.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 535aa4bc-ef00-4282-9e23-cb34f9880888
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 535aa4bc-ef00-4282-9e23-cb34f9880888
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 535aa4bc-ef00-4282-9e23-cb34f9880888",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.507Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 535aa4bc-ef00-4282-9e23-cb34f9880888
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 535aa4bc-ef00-4282-9e23-cb34f9880888
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 535aa4bc-ef00-4282-9e23-cb34f9880888",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.507Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=064a16b7-0907-4d2f-a2ed-2487467e7452 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=064a16b7-0907-4d2f-a2ed-2487467e7452 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=064a16b7-0907-4d2f-a2ed-2487467e7452 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.506Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641005",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027064a16b7-0907-4d2f-a2ed-2487467e7452\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.503Z",
"transactionId": 12025128.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24641004",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027064a16b7-0907-4d2f-a2ed-2487467e7452\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.496Z",
"transactionId": 12025127.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24641003",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027064a16b7-0907-4d2f-a2ed-2487467e7452\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.492Z",
"transactionId": 12025127.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24641002",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027064a16b7-0907-4d2f-a2ed-2487467e7452\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.485Z",
"transactionId": 12025126.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24641001",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027064a16b7-0907-4d2f-a2ed-2487467e7452\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.476Z",
"transactionId": 12025125.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 064a16b7-0907-4d2f-a2ed-2487467e7452
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 064a16b7-0907-4d2f-a2ed-2487467e7452
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 064a16b7-0907-4d2f-a2ed-2487467e7452",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.472Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 064a16b7-0907-4d2f-a2ed-2487467e7452
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 064a16b7-0907-4d2f-a2ed-2487467e7452
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 064a16b7-0907-4d2f-a2ed-2487467e7452",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.472Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=bf317152-62c8-45dc-b481-3619e5898904 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=bf317152-62c8-45dc-b481-3619e5898904 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=bf317152-62c8-45dc-b481-3619e5898904 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.471Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24641000",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027bf317152-62c8-45dc-b481-3619e5898904\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.468Z",
"transactionId": 12025124.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640999",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027bf317152-62c8-45dc-b481-3619e5898904\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.461Z",
"transactionId": 12025123.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640998",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027bf317152-62c8-45dc-b481-3619e5898904\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.457Z",
"transactionId": 12025123.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640997",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027bf317152-62c8-45dc-b481-3619e5898904\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.449Z",
"transactionId": 12025122.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640996",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027bf317152-62c8-45dc-b481-3619e5898904\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.441Z",
"transactionId": 12025121.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order bf317152-62c8-45dc-b481-3619e5898904
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order bf317152-62c8-45dc-b481-3619e5898904
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order bf317152-62c8-45dc-b481-3619e5898904",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.436Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order bf317152-62c8-45dc-b481-3619e5898904
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order bf317152-62c8-45dc-b481-3619e5898904
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order bf317152-62c8-45dc-b481-3619e5898904",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.436Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=7f832fbf-bd0a-4eee-92ff-36b6e498b85e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=7f832fbf-bd0a-4eee-92ff-36b6e498b85e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=7f832fbf-bd0a-4eee-92ff-36b6e498b85e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.436Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640995",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00277f832fbf-bd0a-4eee-92ff-36b6e498b85e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.432Z",
"transactionId": 12025120.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640994",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00277f832fbf-bd0a-4eee-92ff-36b6e498b85e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.425Z",
"transactionId": 12025119.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640993",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00277f832fbf-bd0a-4eee-92ff-36b6e498b85e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.422Z",
"transactionId": 12025119.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640991",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00277f832fbf-bd0a-4eee-92ff-36b6e498b85e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.415Z",
"transactionId": 12025118.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640989",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00277f832fbf-bd0a-4eee-92ff-36b6e498b85e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.406Z",
"transactionId": 12025117.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.402Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 7f832fbf-bd0a-4eee-92ff-36b6e498b85e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.401Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=5548276f-8d66-49e2-9efb-4172843ba005 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=5548276f-8d66-49e2-9efb-4172843ba005 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=5548276f-8d66-49e2-9efb-4172843ba005 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.401Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640988",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00275548276f-8d66-49e2-9efb-4172843ba005\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.398Z",
"transactionId": 12025116.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640987",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00275548276f-8d66-49e2-9efb-4172843ba005\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.391Z",
"transactionId": 12025115.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640986",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00275548276f-8d66-49e2-9efb-4172843ba005\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.388Z",
"transactionId": 12025115.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640985",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00275548276f-8d66-49e2-9efb-4172843ba005\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.380Z",
"transactionId": 12025114.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640984",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00275548276f-8d66-49e2-9efb-4172843ba005\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.373Z",
"transactionId": 12025113.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 5548276f-8d66-49e2-9efb-4172843ba005
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 5548276f-8d66-49e2-9efb-4172843ba005
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 5548276f-8d66-49e2-9efb-4172843ba005",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.368Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 5548276f-8d66-49e2-9efb-4172843ba005
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 5548276f-8d66-49e2-9efb-4172843ba005
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 5548276f-8d66-49e2-9efb-4172843ba005",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.367Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=de5dbe22-d2de-4a5c-a5e0-9aea6144612c no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=de5dbe22-d2de-4a5c-a5e0-9aea6144612c no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=de5dbe22-d2de-4a5c-a5e0-9aea6144612c no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.367Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640983",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027de5dbe22-d2de-4a5c-a5e0-9aea6144612c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.364Z",
"transactionId": 12025112.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640982",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027de5dbe22-d2de-4a5c-a5e0-9aea6144612c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.357Z",
"transactionId": 12025111.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640981",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027de5dbe22-d2de-4a5c-a5e0-9aea6144612c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.353Z",
"transactionId": 12025111.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640980",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027de5dbe22-d2de-4a5c-a5e0-9aea6144612c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.346Z",
"transactionId": 12025110.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640979",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027de5dbe22-d2de-4a5c-a5e0-9aea6144612c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.338Z",
"transactionId": 12025109.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.332Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order de5dbe22-d2de-4a5c-a5e0-9aea6144612c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.332Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=7ccc859e-b8d5-4a2d-9d13-c766fbb8323d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=7ccc859e-b8d5-4a2d-9d13-c766fbb8323d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=7ccc859e-b8d5-4a2d-9d13-c766fbb8323d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.332Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640978",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00277ccc859e-b8d5-4a2d-9d13-c766fbb8323d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.328Z",
"transactionId": 12025108.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640977",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00277ccc859e-b8d5-4a2d-9d13-c766fbb8323d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.320Z",
"transactionId": 12025107.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640976",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00277ccc859e-b8d5-4a2d-9d13-c766fbb8323d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.317Z",
"transactionId": 12025107.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640975",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00277ccc859e-b8d5-4a2d-9d13-c766fbb8323d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.309Z",
"transactionId": 12025106.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640974",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00277ccc859e-b8d5-4a2d-9d13-c766fbb8323d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.301Z",
"transactionId": 12025105.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.296Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 7ccc859e-b8d5-4a2d-9d13-c766fbb8323d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.296Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=3e768940-21e3-453b-adc1-6f9a7822e60b no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=3e768940-21e3-453b-adc1-6f9a7822e60b no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=3e768940-21e3-453b-adc1-6f9a7822e60b no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.295Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640973",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00273e768940-21e3-453b-adc1-6f9a7822e60b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.292Z",
"transactionId": 12025104.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640972",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00273e768940-21e3-453b-adc1-6f9a7822e60b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.284Z",
"transactionId": 12025103.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640971",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00273e768940-21e3-453b-adc1-6f9a7822e60b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.280Z",
"transactionId": 12025103.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640970",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00273e768940-21e3-453b-adc1-6f9a7822e60b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.272Z",
"transactionId": 12025102.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640969",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00273e768940-21e3-453b-adc1-6f9a7822e60b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.264Z",
"transactionId": 12025101.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 3e768940-21e3-453b-adc1-6f9a7822e60b
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 3e768940-21e3-453b-adc1-6f9a7822e60b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 3e768940-21e3-453b-adc1-6f9a7822e60b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.259Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 3e768940-21e3-453b-adc1-6f9a7822e60b
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 3e768940-21e3-453b-adc1-6f9a7822e60b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 3e768940-21e3-453b-adc1-6f9a7822e60b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.259Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=1d8428d4-0346-4d54-a70d-0835fd8a26df no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=1d8428d4-0346-4d54-a70d-0835fd8a26df no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=1d8428d4-0346-4d54-a70d-0835fd8a26df no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.258Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640968",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00271d8428d4-0346-4d54-a70d-0835fd8a26df\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.254Z",
"transactionId": 12025100.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640967",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00271d8428d4-0346-4d54-a70d-0835fd8a26df\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.247Z",
"transactionId": 12025099.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640966",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00271d8428d4-0346-4d54-a70d-0835fd8a26df\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.244Z",
"transactionId": 12025099.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640965",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00271d8428d4-0346-4d54-a70d-0835fd8a26df\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.236Z",
"transactionId": 12025098.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640964",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00271d8428d4-0346-4d54-a70d-0835fd8a26df\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.227Z",
"transactionId": 12025097.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 1d8428d4-0346-4d54-a70d-0835fd8a26df
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 1d8428d4-0346-4d54-a70d-0835fd8a26df
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 1d8428d4-0346-4d54-a70d-0835fd8a26df",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.222Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 1d8428d4-0346-4d54-a70d-0835fd8a26df
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 1d8428d4-0346-4d54-a70d-0835fd8a26df
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 1d8428d4-0346-4d54-a70d-0835fd8a26df",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.222Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=6cff5017-08ee-4971-ae2a-2e16a6df2ff0 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=6cff5017-08ee-4971-ae2a-2e16a6df2ff0 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=6cff5017-08ee-4971-ae2a-2e16a6df2ff0 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.221Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640963",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00276cff5017-08ee-4971-ae2a-2e16a6df2ff0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.218Z",
"transactionId": 12025096.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640962",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00276cff5017-08ee-4971-ae2a-2e16a6df2ff0\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.211Z",
"transactionId": 12025095.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640961",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00276cff5017-08ee-4971-ae2a-2e16a6df2ff0\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.208Z",
"transactionId": 12025095.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640960",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00276cff5017-08ee-4971-ae2a-2e16a6df2ff0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.200Z",
"transactionId": 12025094.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640959",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00276cff5017-08ee-4971-ae2a-2e16a6df2ff0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.193Z",
"transactionId": 12025093.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.188Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 6cff5017-08ee-4971-ae2a-2e16a6df2ff0",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.188Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=eead8d85-7616-4dcf-98d9-ecea63ee882d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=eead8d85-7616-4dcf-98d9-ecea63ee882d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=eead8d85-7616-4dcf-98d9-ecea63ee882d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.188Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640958",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027eead8d85-7616-4dcf-98d9-ecea63ee882d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.185Z",
"transactionId": 12025092.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640957",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027eead8d85-7616-4dcf-98d9-ecea63ee882d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.178Z",
"transactionId": 12025091.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640956",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027eead8d85-7616-4dcf-98d9-ecea63ee882d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.175Z",
"transactionId": 12025091.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640955",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027eead8d85-7616-4dcf-98d9-ecea63ee882d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.167Z",
"transactionId": 12025090.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640954",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027eead8d85-7616-4dcf-98d9-ecea63ee882d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.160Z",
"transactionId": 12025089.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order eead8d85-7616-4dcf-98d9-ecea63ee882d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order eead8d85-7616-4dcf-98d9-ecea63ee882d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order eead8d85-7616-4dcf-98d9-ecea63ee882d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.156Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order eead8d85-7616-4dcf-98d9-ecea63ee882d
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order eead8d85-7616-4dcf-98d9-ecea63ee882d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order eead8d85-7616-4dcf-98d9-ecea63ee882d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.156Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=dd23e6ca-f8b4-4f42-9f3a-7685944cae71 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=dd23e6ca-f8b4-4f42-9f3a-7685944cae71 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=dd23e6ca-f8b4-4f42-9f3a-7685944cae71 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.155Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640953",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027dd23e6ca-f8b4-4f42-9f3a-7685944cae71\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.152Z",
"transactionId": 12025088.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640952",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027dd23e6ca-f8b4-4f42-9f3a-7685944cae71\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.145Z",
"transactionId": 12025087.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640951",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027dd23e6ca-f8b4-4f42-9f3a-7685944cae71\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.142Z",
"transactionId": 12025087.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640950",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027dd23e6ca-f8b4-4f42-9f3a-7685944cae71\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.135Z",
"transactionId": 12025086.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640949",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027dd23e6ca-f8b4-4f42-9f3a-7685944cae71\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.128Z",
"transactionId": 12025085.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.123Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order dd23e6ca-f8b4-4f42-9f3a-7685944cae71",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.123Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=3c20184b-a694-42d4-9993-0ebaf33bcdde no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=3c20184b-a694-42d4-9993-0ebaf33bcdde no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=3c20184b-a694-42d4-9993-0ebaf33bcdde no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.123Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640948",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00273c20184b-a694-42d4-9993-0ebaf33bcdde\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.120Z",
"transactionId": 12025084.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640947",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00273c20184b-a694-42d4-9993-0ebaf33bcdde\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.113Z",
"transactionId": 12025083.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640946",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00273c20184b-a694-42d4-9993-0ebaf33bcdde\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.110Z",
"transactionId": 12025083.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640945",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00273c20184b-a694-42d4-9993-0ebaf33bcdde\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.102Z",
"transactionId": 12025082.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640944",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00273c20184b-a694-42d4-9993-0ebaf33bcdde\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.095Z",
"transactionId": 12025081.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 3c20184b-a694-42d4-9993-0ebaf33bcdde
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 3c20184b-a694-42d4-9993-0ebaf33bcdde
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 3c20184b-a694-42d4-9993-0ebaf33bcdde",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.090Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 3c20184b-a694-42d4-9993-0ebaf33bcdde
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 3c20184b-a694-42d4-9993-0ebaf33bcdde
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 3c20184b-a694-42d4-9993-0ebaf33bcdde",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.090Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=074537be-5cdf-4f49-8548-90f06e9ed5e6 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=074537be-5cdf-4f49-8548-90f06e9ed5e6 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=074537be-5cdf-4f49-8548-90f06e9ed5e6 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.090Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640943",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027074537be-5cdf-4f49-8548-90f06e9ed5e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.086Z",
"transactionId": 12025080.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640942",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027074537be-5cdf-4f49-8548-90f06e9ed5e6\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.079Z",
"transactionId": 12025079.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640941",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027074537be-5cdf-4f49-8548-90f06e9ed5e6\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.076Z",
"transactionId": 12025079.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640940",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027074537be-5cdf-4f49-8548-90f06e9ed5e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.068Z",
"transactionId": 12025078.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640939",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027074537be-5cdf-4f49-8548-90f06e9ed5e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.060Z",
"transactionId": 12025077.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 074537be-5cdf-4f49-8548-90f06e9ed5e6
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 074537be-5cdf-4f49-8548-90f06e9ed5e6
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 074537be-5cdf-4f49-8548-90f06e9ed5e6",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.055Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 074537be-5cdf-4f49-8548-90f06e9ed5e6
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 074537be-5cdf-4f49-8548-90f06e9ed5e6
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 074537be-5cdf-4f49-8548-90f06e9ed5e6",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.055Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=af9838df-74ee-417e-a7c5-bdfcff759cc0 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=af9838df-74ee-417e-a7c5-bdfcff759cc0 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=af9838df-74ee-417e-a7c5-bdfcff759cc0 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.055Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640938",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027af9838df-74ee-417e-a7c5-bdfcff759cc0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.052Z",
"transactionId": 12025076.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640937",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027af9838df-74ee-417e-a7c5-bdfcff759cc0\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.045Z",
"transactionId": 12025075.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640936",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027af9838df-74ee-417e-a7c5-bdfcff759cc0\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.042Z",
"transactionId": 12025075.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640935",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027af9838df-74ee-417e-a7c5-bdfcff759cc0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.035Z",
"transactionId": 12025074.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640934",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027af9838df-74ee-417e-a7c5-bdfcff759cc0\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.027Z",
"transactionId": 12025073.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order af9838df-74ee-417e-a7c5-bdfcff759cc0
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order af9838df-74ee-417e-a7c5-bdfcff759cc0
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order af9838df-74ee-417e-a7c5-bdfcff759cc0",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.022Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order af9838df-74ee-417e-a7c5-bdfcff759cc0
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order af9838df-74ee-417e-a7c5-bdfcff759cc0
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order af9838df-74ee-417e-a7c5-bdfcff759cc0",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.022Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=37e12c09-e56a-4d6c-b0ef-7fb27ff74635 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:08 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=37e12c09-e56a-4d6c-b0ef-7fb27ff74635 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=37e12c09-e56a-4d6c-b0ef-7fb27ff74635 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:08.022Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640933",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002737e12c09-e56a-4d6c-b0ef-7fb27ff74635\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.019Z",
"transactionId": 12025072.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640932",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002737e12c09-e56a-4d6c-b0ef-7fb27ff74635\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.012Z",
"transactionId": 12025071.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640931",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002737e12c09-e56a-4d6c-b0ef-7fb27ff74635\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.009Z",
"transactionId": 12025071.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:08 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640930",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002737e12c09-e56a-4d6c-b0ef-7fb27ff74635\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:08.002Z",
"transactionId": 12025070.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640929",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002737e12c09-e56a-4d6c-b0ef-7fb27ff74635\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.995Z",
"transactionId": 12025069.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.990Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 37e12c09-e56a-4d6c-b0ef-7fb27ff74635",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.990Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=e26c490a-78c0-4666-be18-500b03f49882 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=e26c490a-78c0-4666-be18-500b03f49882 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=e26c490a-78c0-4666-be18-500b03f49882 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.990Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640928",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027e26c490a-78c0-4666-be18-500b03f49882\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.987Z",
"transactionId": 12025068.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640927",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027e26c490a-78c0-4666-be18-500b03f49882\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.979Z",
"transactionId": 12025067.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640926",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027e26c490a-78c0-4666-be18-500b03f49882\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.976Z",
"transactionId": 12025067.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640925",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027e26c490a-78c0-4666-be18-500b03f49882\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.968Z",
"transactionId": 12025066.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640924",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027e26c490a-78c0-4666-be18-500b03f49882\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.960Z",
"transactionId": 12025065.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order e26c490a-78c0-4666-be18-500b03f49882
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order e26c490a-78c0-4666-be18-500b03f49882
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order e26c490a-78c0-4666-be18-500b03f49882",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.955Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order e26c490a-78c0-4666-be18-500b03f49882
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order e26c490a-78c0-4666-be18-500b03f49882
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order e26c490a-78c0-4666-be18-500b03f49882",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.955Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=05304e24-ce91-4390-9a6a-03c735669632 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=05304e24-ce91-4390-9a6a-03c735669632 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=05304e24-ce91-4390-9a6a-03c735669632 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.955Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640923",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002705304e24-ce91-4390-9a6a-03c735669632\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.952Z",
"transactionId": 12025064.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640922",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002705304e24-ce91-4390-9a6a-03c735669632\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.945Z",
"transactionId": 12025063.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640921",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002705304e24-ce91-4390-9a6a-03c735669632\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.942Z",
"transactionId": 12025063.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640920",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002705304e24-ce91-4390-9a6a-03c735669632\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.934Z",
"transactionId": 12025062.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640919",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002705304e24-ce91-4390-9a6a-03c735669632\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.926Z",
"transactionId": 12025061.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 05304e24-ce91-4390-9a6a-03c735669632
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 05304e24-ce91-4390-9a6a-03c735669632
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 05304e24-ce91-4390-9a6a-03c735669632",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.922Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 05304e24-ce91-4390-9a6a-03c735669632
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 05304e24-ce91-4390-9a6a-03c735669632
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 05304e24-ce91-4390-9a6a-03c735669632",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.922Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=29eb2022-5b36-4420-8d6a-a08efc22d760 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=29eb2022-5b36-4420-8d6a-a08efc22d760 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=29eb2022-5b36-4420-8d6a-a08efc22d760 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.921Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640918",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002729eb2022-5b36-4420-8d6a-a08efc22d760\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.918Z",
"transactionId": 12025060.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640917",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002729eb2022-5b36-4420-8d6a-a08efc22d760\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.911Z",
"transactionId": 12025059.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640916",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002729eb2022-5b36-4420-8d6a-a08efc22d760\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.908Z",
"transactionId": 12025059.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640915",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002729eb2022-5b36-4420-8d6a-a08efc22d760\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.900Z",
"transactionId": 12025058.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640914",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002729eb2022-5b36-4420-8d6a-a08efc22d760\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.892Z",
"transactionId": 12025057.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 29eb2022-5b36-4420-8d6a-a08efc22d760
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 29eb2022-5b36-4420-8d6a-a08efc22d760
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 29eb2022-5b36-4420-8d6a-a08efc22d760",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.887Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 29eb2022-5b36-4420-8d6a-a08efc22d760
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 29eb2022-5b36-4420-8d6a-a08efc22d760
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 29eb2022-5b36-4420-8d6a-a08efc22d760",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.887Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=3b39922d-f18b-4bec-ad12-ce4bf28c4c04 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=3b39922d-f18b-4bec-ad12-ce4bf28c4c04 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=3b39922d-f18b-4bec-ad12-ce4bf28c4c04 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.887Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640913",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00273b39922d-f18b-4bec-ad12-ce4bf28c4c04\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.883Z",
"transactionId": 12025056.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640912",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00273b39922d-f18b-4bec-ad12-ce4bf28c4c04\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.876Z",
"transactionId": 12025055.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640911",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00273b39922d-f18b-4bec-ad12-ce4bf28c4c04\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.873Z",
"transactionId": 12025055.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640910",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00273b39922d-f18b-4bec-ad12-ce4bf28c4c04\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.865Z",
"transactionId": 12025054.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640909",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00273b39922d-f18b-4bec-ad12-ce4bf28c4c04\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.858Z",
"transactionId": 12025053.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.853Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 3b39922d-f18b-4bec-ad12-ce4bf28c4c04",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.853Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=f240f725-f384-468c-bb6d-365f315ed224 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=f240f725-f384-468c-bb6d-365f315ed224 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=f240f725-f384-468c-bb6d-365f315ed224 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.852Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640908",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027f240f725-f384-468c-bb6d-365f315ed224\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.849Z",
"transactionId": 12025052.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640907",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027f240f725-f384-468c-bb6d-365f315ed224\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.842Z",
"transactionId": 12025051.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640906",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027f240f725-f384-468c-bb6d-365f315ed224\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.839Z",
"transactionId": 12025051.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640905",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027f240f725-f384-468c-bb6d-365f315ed224\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.832Z",
"transactionId": 12025050.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640904",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027f240f725-f384-468c-bb6d-365f315ed224\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.824Z",
"transactionId": 12025049.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order f240f725-f384-468c-bb6d-365f315ed224
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order f240f725-f384-468c-bb6d-365f315ed224
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order f240f725-f384-468c-bb6d-365f315ed224",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.820Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order f240f725-f384-468c-bb6d-365f315ed224
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order f240f725-f384-468c-bb6d-365f315ed224
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order f240f725-f384-468c-bb6d-365f315ed224",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.820Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=6cd9402e-c224-42f5-96ae-4bfd5d6d4deb no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=6cd9402e-c224-42f5-96ae-4bfd5d6d4deb no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=6cd9402e-c224-42f5-96ae-4bfd5d6d4deb no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.820Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640903",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00276cd9402e-c224-42f5-96ae-4bfd5d6d4deb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.817Z",
"transactionId": 12025048.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640902",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00276cd9402e-c224-42f5-96ae-4bfd5d6d4deb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.809Z",
"transactionId": 12025047.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640901",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00276cd9402e-c224-42f5-96ae-4bfd5d6d4deb\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.806Z",
"transactionId": 12025047.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640900",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00276cd9402e-c224-42f5-96ae-4bfd5d6d4deb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.799Z",
"transactionId": 12025046.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640899",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00276cd9402e-c224-42f5-96ae-4bfd5d6d4deb\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.791Z",
"transactionId": 12025045.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.787Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 6cd9402e-c224-42f5-96ae-4bfd5d6d4deb",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.786Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=ceec3b33-2031-42fe-96d9-029911817f33 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=ceec3b33-2031-42fe-96d9-029911817f33 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=ceec3b33-2031-42fe-96d9-029911817f33 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.786Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640898",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027ceec3b33-2031-42fe-96d9-029911817f33\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.783Z",
"transactionId": 12025044.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640897",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027ceec3b33-2031-42fe-96d9-029911817f33\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.776Z",
"transactionId": 12025043.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640896",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027ceec3b33-2031-42fe-96d9-029911817f33\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.773Z",
"transactionId": 12025043.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640895",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027ceec3b33-2031-42fe-96d9-029911817f33\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.765Z",
"transactionId": 12025042.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640894",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027ceec3b33-2031-42fe-96d9-029911817f33\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.756Z",
"transactionId": 12025041.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order ceec3b33-2031-42fe-96d9-029911817f33
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order ceec3b33-2031-42fe-96d9-029911817f33
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order ceec3b33-2031-42fe-96d9-029911817f33",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.752Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order ceec3b33-2031-42fe-96d9-029911817f33
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order ceec3b33-2031-42fe-96d9-029911817f33
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order ceec3b33-2031-42fe-96d9-029911817f33",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.751Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=fd9cca43-68de-4001-9a67-fa45b2f40cca no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=fd9cca43-68de-4001-9a67-fa45b2f40cca no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=fd9cca43-68de-4001-9a67-fa45b2f40cca no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.751Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640893",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027fd9cca43-68de-4001-9a67-fa45b2f40cca\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.748Z",
"transactionId": 12025040.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640892",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027fd9cca43-68de-4001-9a67-fa45b2f40cca\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.741Z",
"transactionId": 12025039.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640891",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027fd9cca43-68de-4001-9a67-fa45b2f40cca\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.737Z",
"transactionId": 12025039.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640890",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027fd9cca43-68de-4001-9a67-fa45b2f40cca\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.730Z",
"transactionId": 12025038.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640889",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027fd9cca43-68de-4001-9a67-fa45b2f40cca\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.722Z",
"transactionId": 12025037.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order fd9cca43-68de-4001-9a67-fa45b2f40cca
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order fd9cca43-68de-4001-9a67-fa45b2f40cca
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order fd9cca43-68de-4001-9a67-fa45b2f40cca",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.717Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order fd9cca43-68de-4001-9a67-fa45b2f40cca
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order fd9cca43-68de-4001-9a67-fa45b2f40cca
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order fd9cca43-68de-4001-9a67-fa45b2f40cca",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.717Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=e20700bd-694a-4033-86bb-187ce69bc0a1 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=e20700bd-694a-4033-86bb-187ce69bc0a1 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=e20700bd-694a-4033-86bb-187ce69bc0a1 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.717Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640888",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027e20700bd-694a-4033-86bb-187ce69bc0a1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.713Z",
"transactionId": 12025036.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640887",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027e20700bd-694a-4033-86bb-187ce69bc0a1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.706Z",
"transactionId": 12025035.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640886",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027e20700bd-694a-4033-86bb-187ce69bc0a1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.703Z",
"transactionId": 12025035.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640885",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027e20700bd-694a-4033-86bb-187ce69bc0a1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.696Z",
"transactionId": 12025034.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640884",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027e20700bd-694a-4033-86bb-187ce69bc0a1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.688Z",
"transactionId": 12025033.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order e20700bd-694a-4033-86bb-187ce69bc0a1
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order e20700bd-694a-4033-86bb-187ce69bc0a1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order e20700bd-694a-4033-86bb-187ce69bc0a1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.683Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order e20700bd-694a-4033-86bb-187ce69bc0a1
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order e20700bd-694a-4033-86bb-187ce69bc0a1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order e20700bd-694a-4033-86bb-187ce69bc0a1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.683Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=80261dc3-fd3e-44d4-900d-067031ca60be no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=80261dc3-fd3e-44d4-900d-067031ca60be no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=80261dc3-fd3e-44d4-900d-067031ca60be no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.683Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640883",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002780261dc3-fd3e-44d4-900d-067031ca60be\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.679Z",
"transactionId": 12025032.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640882",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002780261dc3-fd3e-44d4-900d-067031ca60be\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.672Z",
"transactionId": 12025031.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640881",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002780261dc3-fd3e-44d4-900d-067031ca60be\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.669Z",
"transactionId": 12025031.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640880",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002780261dc3-fd3e-44d4-900d-067031ca60be\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.663Z",
"transactionId": 12025030.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640879",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002780261dc3-fd3e-44d4-900d-067031ca60be\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.654Z",
"transactionId": 12025029.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 80261dc3-fd3e-44d4-900d-067031ca60be
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 80261dc3-fd3e-44d4-900d-067031ca60be
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 80261dc3-fd3e-44d4-900d-067031ca60be",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.650Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 80261dc3-fd3e-44d4-900d-067031ca60be
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 80261dc3-fd3e-44d4-900d-067031ca60be
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 80261dc3-fd3e-44d4-900d-067031ca60be",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.650Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=84fdef67-7bf6-4615-96e9-e1c14a97caed no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=84fdef67-7bf6-4615-96e9-e1c14a97caed no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=84fdef67-7bf6-4615-96e9-e1c14a97caed no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.649Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640878",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002784fdef67-7bf6-4615-96e9-e1c14a97caed\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.646Z",
"transactionId": 12025028.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640877",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002784fdef67-7bf6-4615-96e9-e1c14a97caed\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.638Z",
"transactionId": 12025027.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640876",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002784fdef67-7bf6-4615-96e9-e1c14a97caed\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.634Z",
"transactionId": 12025027.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640875",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002784fdef67-7bf6-4615-96e9-e1c14a97caed\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.627Z",
"transactionId": 12025026.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640874",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002784fdef67-7bf6-4615-96e9-e1c14a97caed\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.619Z",
"transactionId": 12025025.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 84fdef67-7bf6-4615-96e9-e1c14a97caed
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 84fdef67-7bf6-4615-96e9-e1c14a97caed
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 84fdef67-7bf6-4615-96e9-e1c14a97caed",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.615Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 84fdef67-7bf6-4615-96e9-e1c14a97caed
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 84fdef67-7bf6-4615-96e9-e1c14a97caed
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 84fdef67-7bf6-4615-96e9-e1c14a97caed",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.615Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=15da8971-05ed-42f4-a778-30d2665d607b no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=15da8971-05ed-42f4-a778-30d2665d607b no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=15da8971-05ed-42f4-a778-30d2665d607b no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.614Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640873",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002715da8971-05ed-42f4-a778-30d2665d607b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.611Z",
"transactionId": 12025024.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640872",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002715da8971-05ed-42f4-a778-30d2665d607b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.604Z",
"transactionId": 12025023.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640871",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002715da8971-05ed-42f4-a778-30d2665d607b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.601Z",
"transactionId": 12025023.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640870",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002715da8971-05ed-42f4-a778-30d2665d607b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.593Z",
"transactionId": 12025022.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640869",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002715da8971-05ed-42f4-a778-30d2665d607b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.586Z",
"transactionId": 12025021.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 15da8971-05ed-42f4-a778-30d2665d607b
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 15da8971-05ed-42f4-a778-30d2665d607b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 15da8971-05ed-42f4-a778-30d2665d607b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.581Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 15da8971-05ed-42f4-a778-30d2665d607b
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 15da8971-05ed-42f4-a778-30d2665d607b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 15da8971-05ed-42f4-a778-30d2665d607b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.581Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=0cdd1297-aa51-4660-b425-386175d6bcc2 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=0cdd1297-aa51-4660-b425-386175d6bcc2 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=0cdd1297-aa51-4660-b425-386175d6bcc2 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.581Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640868",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00270cdd1297-aa51-4660-b425-386175d6bcc2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.578Z",
"transactionId": 12025020.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640867",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00270cdd1297-aa51-4660-b425-386175d6bcc2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.570Z",
"transactionId": 12025019.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640866",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00270cdd1297-aa51-4660-b425-386175d6bcc2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.567Z",
"transactionId": 12025019.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640865",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00270cdd1297-aa51-4660-b425-386175d6bcc2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.560Z",
"transactionId": 12025018.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640864",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00270cdd1297-aa51-4660-b425-386175d6bcc2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.551Z",
"transactionId": 12025017.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 0cdd1297-aa51-4660-b425-386175d6bcc2
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 0cdd1297-aa51-4660-b425-386175d6bcc2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 0cdd1297-aa51-4660-b425-386175d6bcc2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.546Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 0cdd1297-aa51-4660-b425-386175d6bcc2
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 0cdd1297-aa51-4660-b425-386175d6bcc2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 0cdd1297-aa51-4660-b425-386175d6bcc2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.546Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=57789615-936d-4f19-b28a-6db606a3fb1c no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=57789615-936d-4f19-b28a-6db606a3fb1c no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=57789615-936d-4f19-b28a-6db606a3fb1c no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.546Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640863",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002757789615-936d-4f19-b28a-6db606a3fb1c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.543Z",
"transactionId": 12025016.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640862",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002757789615-936d-4f19-b28a-6db606a3fb1c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.536Z",
"transactionId": 12025015.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640861",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002757789615-936d-4f19-b28a-6db606a3fb1c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.532Z",
"transactionId": 12025015.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640860",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002757789615-936d-4f19-b28a-6db606a3fb1c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.525Z",
"transactionId": 12025014.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640859",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002757789615-936d-4f19-b28a-6db606a3fb1c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.517Z",
"transactionId": 12025013.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 57789615-936d-4f19-b28a-6db606a3fb1c
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 57789615-936d-4f19-b28a-6db606a3fb1c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 57789615-936d-4f19-b28a-6db606a3fb1c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.512Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 57789615-936d-4f19-b28a-6db606a3fb1c
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 57789615-936d-4f19-b28a-6db606a3fb1c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 57789615-936d-4f19-b28a-6db606a3fb1c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.512Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=ca44683e-c952-473e-8ac7-f77c44d94a62 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=ca44683e-c952-473e-8ac7-f77c44d94a62 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=ca44683e-c952-473e-8ac7-f77c44d94a62 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.511Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640858",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027ca44683e-c952-473e-8ac7-f77c44d94a62\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.508Z",
"transactionId": 12025012.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640857",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027ca44683e-c952-473e-8ac7-f77c44d94a62\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.501Z",
"transactionId": 12025011.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640856",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027ca44683e-c952-473e-8ac7-f77c44d94a62\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.497Z",
"transactionId": 12025011.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640855",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027ca44683e-c952-473e-8ac7-f77c44d94a62\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.490Z",
"transactionId": 12025010.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640854",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027ca44683e-c952-473e-8ac7-f77c44d94a62\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.483Z",
"transactionId": 12025009.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order ca44683e-c952-473e-8ac7-f77c44d94a62
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order ca44683e-c952-473e-8ac7-f77c44d94a62
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order ca44683e-c952-473e-8ac7-f77c44d94a62",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.478Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order ca44683e-c952-473e-8ac7-f77c44d94a62
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order ca44683e-c952-473e-8ac7-f77c44d94a62
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order ca44683e-c952-473e-8ac7-f77c44d94a62",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.478Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=6ffe92a5-d3ab-4422-a446-59ed2fccfef5 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=6ffe92a5-d3ab-4422-a446-59ed2fccfef5 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=6ffe92a5-d3ab-4422-a446-59ed2fccfef5 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.478Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640852",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00276ffe92a5-d3ab-4422-a446-59ed2fccfef5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.474Z",
"transactionId": 12025008.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640849",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00276ffe92a5-d3ab-4422-a446-59ed2fccfef5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.467Z",
"transactionId": 12025007.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640848",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00276ffe92a5-d3ab-4422-a446-59ed2fccfef5\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.464Z",
"transactionId": 12025007.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640845",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00276ffe92a5-d3ab-4422-a446-59ed2fccfef5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.458Z",
"transactionId": 12025006.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640843",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00276ffe92a5-d3ab-4422-a446-59ed2fccfef5\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.450Z",
"transactionId": 12025005.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.446Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 6ffe92a5-d3ab-4422-a446-59ed2fccfef5",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.446Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=6dd4b19c-7cf5-4aa1-a086-23a31247b721 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=6dd4b19c-7cf5-4aa1-a086-23a31247b721 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=6dd4b19c-7cf5-4aa1-a086-23a31247b721 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.445Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640840",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00276dd4b19c-7cf5-4aa1-a086-23a31247b721\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.442Z",
"transactionId": 12025004.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640838",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00276dd4b19c-7cf5-4aa1-a086-23a31247b721\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.435Z",
"transactionId": 12025003.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640836",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00276dd4b19c-7cf5-4aa1-a086-23a31247b721\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.432Z",
"transactionId": 12025003.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640834",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00276dd4b19c-7cf5-4aa1-a086-23a31247b721\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.424Z",
"transactionId": 12025002.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640832",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00276dd4b19c-7cf5-4aa1-a086-23a31247b721\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.417Z",
"transactionId": 12025001.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.413Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 6dd4b19c-7cf5-4aa1-a086-23a31247b721",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.412Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=cacbad4d-1492-46a2-b86d-d786b68132b3 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=cacbad4d-1492-46a2-b86d-d786b68132b3 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=cacbad4d-1492-46a2-b86d-d786b68132b3 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.412Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640830",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027cacbad4d-1492-46a2-b86d-d786b68132b3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.409Z",
"transactionId": 12025000.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640829",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027cacbad4d-1492-46a2-b86d-d786b68132b3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.403Z",
"transactionId": 12024999.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640828",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027cacbad4d-1492-46a2-b86d-d786b68132b3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.400Z",
"transactionId": 12024999.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640826",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027cacbad4d-1492-46a2-b86d-d786b68132b3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.393Z",
"transactionId": 12024998.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640825",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027cacbad4d-1492-46a2-b86d-d786b68132b3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.385Z",
"transactionId": 12024997.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order cacbad4d-1492-46a2-b86d-d786b68132b3
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order cacbad4d-1492-46a2-b86d-d786b68132b3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order cacbad4d-1492-46a2-b86d-d786b68132b3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.379Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order cacbad4d-1492-46a2-b86d-d786b68132b3
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order cacbad4d-1492-46a2-b86d-d786b68132b3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order cacbad4d-1492-46a2-b86d-d786b68132b3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.379Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=5352478f-e0b9-4b7e-8de1-c924a559c4d1 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=5352478f-e0b9-4b7e-8de1-c924a559c4d1 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=5352478f-e0b9-4b7e-8de1-c924a559c4d1 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.379Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640824",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00275352478f-e0b9-4b7e-8de1-c924a559c4d1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.376Z",
"transactionId": 12024996.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640823",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00275352478f-e0b9-4b7e-8de1-c924a559c4d1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.368Z",
"transactionId": 12024995.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640822",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00275352478f-e0b9-4b7e-8de1-c924a559c4d1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.365Z",
"transactionId": 12024995.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640821",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00275352478f-e0b9-4b7e-8de1-c924a559c4d1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.356Z",
"transactionId": 12024994.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640820",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00275352478f-e0b9-4b7e-8de1-c924a559c4d1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.348Z",
"transactionId": 12024993.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.342Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 5352478f-e0b9-4b7e-8de1-c924a559c4d1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.342Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=94a4290a-1c3c-4d3c-ac32-9d141919b73e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=94a4290a-1c3c-4d3c-ac32-9d141919b73e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=94a4290a-1c3c-4d3c-ac32-9d141919b73e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.342Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640819",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002794a4290a-1c3c-4d3c-ac32-9d141919b73e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.338Z",
"transactionId": 12024992.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640818",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002794a4290a-1c3c-4d3c-ac32-9d141919b73e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.330Z",
"transactionId": 12024991.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640817",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002794a4290a-1c3c-4d3c-ac32-9d141919b73e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.327Z",
"transactionId": 12024991.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640816",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002794a4290a-1c3c-4d3c-ac32-9d141919b73e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.319Z",
"transactionId": 12024990.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640815",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002794a4290a-1c3c-4d3c-ac32-9d141919b73e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.310Z",
"transactionId": 12024989.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.304Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 94a4290a-1c3c-4d3c-ac32-9d141919b73e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.304Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=559c59ec-9f46-4f3d-9415-5b6d4bc2d70d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=559c59ec-9f46-4f3d-9415-5b6d4bc2d70d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=559c59ec-9f46-4f3d-9415-5b6d4bc2d70d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.304Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640814",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027559c59ec-9f46-4f3d-9415-5b6d4bc2d70d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.301Z",
"transactionId": 12024988.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640813",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027559c59ec-9f46-4f3d-9415-5b6d4bc2d70d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.291Z",
"transactionId": 12024987.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640812",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027559c59ec-9f46-4f3d-9415-5b6d4bc2d70d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.288Z",
"transactionId": 12024987.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640811",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027559c59ec-9f46-4f3d-9415-5b6d4bc2d70d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.280Z",
"transactionId": 12024986.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640810",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027559c59ec-9f46-4f3d-9415-5b6d4bc2d70d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.271Z",
"transactionId": 12024985.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.265Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 559c59ec-9f46-4f3d-9415-5b6d4bc2d70d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.265Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=094ddafc-4d5d-4786-a0ae-e465933f2f10 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=094ddafc-4d5d-4786-a0ae-e465933f2f10 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=094ddafc-4d5d-4786-a0ae-e465933f2f10 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.264Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640809",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027094ddafc-4d5d-4786-a0ae-e465933f2f10\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.260Z",
"transactionId": 12024984.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640808",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027094ddafc-4d5d-4786-a0ae-e465933f2f10\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.251Z",
"transactionId": 12024983.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640807",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027094ddafc-4d5d-4786-a0ae-e465933f2f10\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.248Z",
"transactionId": 12024983.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640806",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027094ddafc-4d5d-4786-a0ae-e465933f2f10\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.239Z",
"transactionId": 12024982.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640805",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027094ddafc-4d5d-4786-a0ae-e465933f2f10\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.230Z",
"transactionId": 12024981.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 094ddafc-4d5d-4786-a0ae-e465933f2f10
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 094ddafc-4d5d-4786-a0ae-e465933f2f10
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 094ddafc-4d5d-4786-a0ae-e465933f2f10",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.225Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 094ddafc-4d5d-4786-a0ae-e465933f2f10
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 094ddafc-4d5d-4786-a0ae-e465933f2f10
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 094ddafc-4d5d-4786-a0ae-e465933f2f10",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.225Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=67e244bf-4376-4cc6-8ecf-34b4b26c33d3 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=67e244bf-4376-4cc6-8ecf-34b4b26c33d3 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=67e244bf-4376-4cc6-8ecf-34b4b26c33d3 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.224Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640804",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002767e244bf-4376-4cc6-8ecf-34b4b26c33d3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.221Z",
"transactionId": 12024980.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640803",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002767e244bf-4376-4cc6-8ecf-34b4b26c33d3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.213Z",
"transactionId": 12024979.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640802",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002767e244bf-4376-4cc6-8ecf-34b4b26c33d3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.209Z",
"transactionId": 12024979.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640801",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002767e244bf-4376-4cc6-8ecf-34b4b26c33d3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.202Z",
"transactionId": 12024978.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640800",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002767e244bf-4376-4cc6-8ecf-34b4b26c33d3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.193Z",
"transactionId": 12024977.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.189Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 67e244bf-4376-4cc6-8ecf-34b4b26c33d3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.189Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=ddcbd40d-957a-431a-bc4d-33def0b51714 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=ddcbd40d-957a-431a-bc4d-33def0b51714 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=ddcbd40d-957a-431a-bc4d-33def0b51714 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.188Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640799",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027ddcbd40d-957a-431a-bc4d-33def0b51714\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.185Z",
"transactionId": 12024976.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640798",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027ddcbd40d-957a-431a-bc4d-33def0b51714\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.177Z",
"transactionId": 12024975.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640797",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027ddcbd40d-957a-431a-bc4d-33def0b51714\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.174Z",
"transactionId": 12024975.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640796",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027ddcbd40d-957a-431a-bc4d-33def0b51714\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.166Z",
"transactionId": 12024974.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640795",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027ddcbd40d-957a-431a-bc4d-33def0b51714\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.159Z",
"transactionId": 12024973.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order ddcbd40d-957a-431a-bc4d-33def0b51714
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order ddcbd40d-957a-431a-bc4d-33def0b51714
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order ddcbd40d-957a-431a-bc4d-33def0b51714",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.154Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order ddcbd40d-957a-431a-bc4d-33def0b51714
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order ddcbd40d-957a-431a-bc4d-33def0b51714
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order ddcbd40d-957a-431a-bc4d-33def0b51714",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.154Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=f0e310ab-9a15-449d-9168-04eeaaffdfda no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=f0e310ab-9a15-449d-9168-04eeaaffdfda no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=f0e310ab-9a15-449d-9168-04eeaaffdfda no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.153Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640794",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027f0e310ab-9a15-449d-9168-04eeaaffdfda\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.150Z",
"transactionId": 12024972.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640793",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027f0e310ab-9a15-449d-9168-04eeaaffdfda\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.142Z",
"transactionId": 12024971.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640792",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027f0e310ab-9a15-449d-9168-04eeaaffdfda\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.139Z",
"transactionId": 12024971.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640791",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027f0e310ab-9a15-449d-9168-04eeaaffdfda\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.132Z",
"transactionId": 12024970.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640790",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027f0e310ab-9a15-449d-9168-04eeaaffdfda\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.124Z",
"transactionId": 12024969.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order f0e310ab-9a15-449d-9168-04eeaaffdfda
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order f0e310ab-9a15-449d-9168-04eeaaffdfda
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order f0e310ab-9a15-449d-9168-04eeaaffdfda",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.120Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order f0e310ab-9a15-449d-9168-04eeaaffdfda
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order f0e310ab-9a15-449d-9168-04eeaaffdfda
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order f0e310ab-9a15-449d-9168-04eeaaffdfda",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.120Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=567663c2-9fce-4769-a19d-dca1d5a44891 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=567663c2-9fce-4769-a19d-dca1d5a44891 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=567663c2-9fce-4769-a19d-dca1d5a44891 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.120Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640789",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027567663c2-9fce-4769-a19d-dca1d5a44891\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.117Z",
"transactionId": 12024968.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640788",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027567663c2-9fce-4769-a19d-dca1d5a44891\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.108Z",
"transactionId": 12024967.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640787",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027567663c2-9fce-4769-a19d-dca1d5a44891\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.105Z",
"transactionId": 12024967.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640786",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027567663c2-9fce-4769-a19d-dca1d5a44891\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.097Z",
"transactionId": 12024966.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640785",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027567663c2-9fce-4769-a19d-dca1d5a44891\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.089Z",
"transactionId": 12024965.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 567663c2-9fce-4769-a19d-dca1d5a44891
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 567663c2-9fce-4769-a19d-dca1d5a44891
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 567663c2-9fce-4769-a19d-dca1d5a44891",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.083Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 567663c2-9fce-4769-a19d-dca1d5a44891
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 567663c2-9fce-4769-a19d-dca1d5a44891
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 567663c2-9fce-4769-a19d-dca1d5a44891",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.083Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=c8b46fea-14f8-45fd-845f-b500ccc7604f no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=c8b46fea-14f8-45fd-845f-b500ccc7604f no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=c8b46fea-14f8-45fd-845f-b500ccc7604f no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.083Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640784",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027c8b46fea-14f8-45fd-845f-b500ccc7604f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.079Z",
"transactionId": 12024964.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640783",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027c8b46fea-14f8-45fd-845f-b500ccc7604f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.072Z",
"transactionId": 12024963.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640782",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027c8b46fea-14f8-45fd-845f-b500ccc7604f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.068Z",
"transactionId": 12024963.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640781",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027c8b46fea-14f8-45fd-845f-b500ccc7604f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.061Z",
"transactionId": 12024962.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640780",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027c8b46fea-14f8-45fd-845f-b500ccc7604f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.052Z",
"transactionId": 12024961.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order c8b46fea-14f8-45fd-845f-b500ccc7604f
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order c8b46fea-14f8-45fd-845f-b500ccc7604f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order c8b46fea-14f8-45fd-845f-b500ccc7604f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.047Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order c8b46fea-14f8-45fd-845f-b500ccc7604f
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order c8b46fea-14f8-45fd-845f-b500ccc7604f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order c8b46fea-14f8-45fd-845f-b500ccc7604f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.047Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=9365ba9f-1c34-4081-b1a9-a7b140a9e759 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=9365ba9f-1c34-4081-b1a9-a7b140a9e759 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=9365ba9f-1c34-4081-b1a9-a7b140a9e759 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.047Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640779",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00279365ba9f-1c34-4081-b1a9-a7b140a9e759\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.044Z",
"transactionId": 12024960.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640778",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00279365ba9f-1c34-4081-b1a9-a7b140a9e759\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.036Z",
"transactionId": 12024959.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640777",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00279365ba9f-1c34-4081-b1a9-a7b140a9e759\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.033Z",
"transactionId": 12024959.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640776",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00279365ba9f-1c34-4081-b1a9-a7b140a9e759\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.025Z",
"transactionId": 12024958.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640775",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00279365ba9f-1c34-4081-b1a9-a7b140a9e759\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.017Z",
"transactionId": 12024957.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.013Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 9365ba9f-1c34-4081-b1a9-a7b140a9e759",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.013Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=c6404580-f3db-4484-8065-fdc4e82165cd no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:07 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=c6404580-f3db-4484-8065-fdc4e82165cd no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=c6404580-f3db-4484-8065-fdc4e82165cd no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:07.012Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640774",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027c6404580-f3db-4484-8065-fdc4e82165cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.009Z",
"transactionId": 12024956.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:07 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640773",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027c6404580-f3db-4484-8065-fdc4e82165cd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:07.002Z",
"transactionId": 12024955.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640772",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027c6404580-f3db-4484-8065-fdc4e82165cd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.999Z",
"transactionId": 12024955.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640771",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027c6404580-f3db-4484-8065-fdc4e82165cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.992Z",
"transactionId": 12024954.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640770",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027c6404580-f3db-4484-8065-fdc4e82165cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.984Z",
"transactionId": 12024953.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order c6404580-f3db-4484-8065-fdc4e82165cd
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order c6404580-f3db-4484-8065-fdc4e82165cd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order c6404580-f3db-4484-8065-fdc4e82165cd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.979Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order c6404580-f3db-4484-8065-fdc4e82165cd
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order c6404580-f3db-4484-8065-fdc4e82165cd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order c6404580-f3db-4484-8065-fdc4e82165cd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.978Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=feab3b37-4d83-469e-abe2-6cf995156042 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=feab3b37-4d83-469e-abe2-6cf995156042 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=feab3b37-4d83-469e-abe2-6cf995156042 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.978Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640769",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027feab3b37-4d83-469e-abe2-6cf995156042\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.975Z",
"transactionId": 12024952.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640768",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027feab3b37-4d83-469e-abe2-6cf995156042\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.968Z",
"transactionId": 12024951.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640767",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027feab3b37-4d83-469e-abe2-6cf995156042\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.965Z",
"transactionId": 12024951.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640766",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027feab3b37-4d83-469e-abe2-6cf995156042\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.957Z",
"transactionId": 12024950.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640765",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027feab3b37-4d83-469e-abe2-6cf995156042\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.949Z",
"transactionId": 12024949.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order feab3b37-4d83-469e-abe2-6cf995156042
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order feab3b37-4d83-469e-abe2-6cf995156042
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order feab3b37-4d83-469e-abe2-6cf995156042",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.944Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order feab3b37-4d83-469e-abe2-6cf995156042
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order feab3b37-4d83-469e-abe2-6cf995156042
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order feab3b37-4d83-469e-abe2-6cf995156042",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.944Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=ea22ff10-b8b9-4bc4-911a-96e77fb127f9 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=ea22ff10-b8b9-4bc4-911a-96e77fb127f9 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=ea22ff10-b8b9-4bc4-911a-96e77fb127f9 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.944Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640764",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027ea22ff10-b8b9-4bc4-911a-96e77fb127f9\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.941Z",
"transactionId": 12024948.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640763",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027ea22ff10-b8b9-4bc4-911a-96e77fb127f9\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.933Z",
"transactionId": 12024947.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640762",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027ea22ff10-b8b9-4bc4-911a-96e77fb127f9\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.930Z",
"transactionId": 12024947.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640761",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027ea22ff10-b8b9-4bc4-911a-96e77fb127f9\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.920Z",
"transactionId": 12024946.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640760",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027ea22ff10-b8b9-4bc4-911a-96e77fb127f9\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.911Z",
"transactionId": 12024945.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.906Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order ea22ff10-b8b9-4bc4-911a-96e77fb127f9",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.906Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=db965e42-cdb9-4ec6-b698-f3f20eada542 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=db965e42-cdb9-4ec6-b698-f3f20eada542 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=db965e42-cdb9-4ec6-b698-f3f20eada542 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.906Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640759",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027db965e42-cdb9-4ec6-b698-f3f20eada542\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.902Z",
"transactionId": 12024944.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640758",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027db965e42-cdb9-4ec6-b698-f3f20eada542\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.894Z",
"transactionId": 12024943.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640757",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027db965e42-cdb9-4ec6-b698-f3f20eada542\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.891Z",
"transactionId": 12024943.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640756",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027db965e42-cdb9-4ec6-b698-f3f20eada542\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.882Z",
"transactionId": 12024942.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640755",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027db965e42-cdb9-4ec6-b698-f3f20eada542\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.873Z",
"transactionId": 12024941.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order db965e42-cdb9-4ec6-b698-f3f20eada542
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order db965e42-cdb9-4ec6-b698-f3f20eada542
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order db965e42-cdb9-4ec6-b698-f3f20eada542",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.869Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order db965e42-cdb9-4ec6-b698-f3f20eada542
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order db965e42-cdb9-4ec6-b698-f3f20eada542
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order db965e42-cdb9-4ec6-b698-f3f20eada542",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.869Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.868Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640754",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.865Z",
"transactionId": 12024940.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640753",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.858Z",
"transactionId": 12024939.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640752",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.854Z",
"transactionId": 12024939.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640751",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.847Z",
"transactionId": 12024938.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640750",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.838Z",
"transactionId": 12024937.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.834Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order a9feff7f-29cd-4bf6-a0c6-f4d0620b1a09",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.834Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=e387aecc-0f8e-4cb2-8acb-18fd355b758d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=e387aecc-0f8e-4cb2-8acb-18fd355b758d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=e387aecc-0f8e-4cb2-8acb-18fd355b758d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.833Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640749",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027e387aecc-0f8e-4cb2-8acb-18fd355b758d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.830Z",
"transactionId": 12024936.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640748",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027e387aecc-0f8e-4cb2-8acb-18fd355b758d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.824Z",
"transactionId": 12024935.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640747",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027e387aecc-0f8e-4cb2-8acb-18fd355b758d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.821Z",
"transactionId": 12024935.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640746",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027e387aecc-0f8e-4cb2-8acb-18fd355b758d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.814Z",
"transactionId": 12024934.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640745",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027e387aecc-0f8e-4cb2-8acb-18fd355b758d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.806Z",
"transactionId": 12024933.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order e387aecc-0f8e-4cb2-8acb-18fd355b758d
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order e387aecc-0f8e-4cb2-8acb-18fd355b758d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order e387aecc-0f8e-4cb2-8acb-18fd355b758d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.801Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order e387aecc-0f8e-4cb2-8acb-18fd355b758d
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order e387aecc-0f8e-4cb2-8acb-18fd355b758d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order e387aecc-0f8e-4cb2-8acb-18fd355b758d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.801Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=a2dd0ffa-23d9-41a8-ad76-545d7623ad73 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=a2dd0ffa-23d9-41a8-ad76-545d7623ad73 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=a2dd0ffa-23d9-41a8-ad76-545d7623ad73 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.801Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640744",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027a2dd0ffa-23d9-41a8-ad76-545d7623ad73\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.798Z",
"transactionId": 12024932.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640743",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027a2dd0ffa-23d9-41a8-ad76-545d7623ad73\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.791Z",
"transactionId": 12024931.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640742",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027a2dd0ffa-23d9-41a8-ad76-545d7623ad73\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.788Z",
"transactionId": 12024931.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640741",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027a2dd0ffa-23d9-41a8-ad76-545d7623ad73\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.781Z",
"transactionId": 12024930.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640740",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027a2dd0ffa-23d9-41a8-ad76-545d7623ad73\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.773Z",
"transactionId": 12024929.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.769Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order a2dd0ffa-23d9-41a8-ad76-545d7623ad73",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.768Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=2be409a8-058c-4283-82fb-528a7ecda1e3 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=2be409a8-058c-4283-82fb-528a7ecda1e3 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=2be409a8-058c-4283-82fb-528a7ecda1e3 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.768Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640739",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00272be409a8-058c-4283-82fb-528a7ecda1e3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.765Z",
"transactionId": 12024928.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640738",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00272be409a8-058c-4283-82fb-528a7ecda1e3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.757Z",
"transactionId": 12024927.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640737",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00272be409a8-058c-4283-82fb-528a7ecda1e3\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.753Z",
"transactionId": 12024927.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640736",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00272be409a8-058c-4283-82fb-528a7ecda1e3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.745Z",
"transactionId": 12024926.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 1.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640735",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00272be409a8-058c-4283-82fb-528a7ecda1e3\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.737Z",
"transactionId": 12024925.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 2be409a8-058c-4283-82fb-528a7ecda1e3
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 2be409a8-058c-4283-82fb-528a7ecda1e3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 2be409a8-058c-4283-82fb-528a7ecda1e3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.732Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 2be409a8-058c-4283-82fb-528a7ecda1e3
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 2be409a8-058c-4283-82fb-528a7ecda1e3
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 2be409a8-058c-4283-82fb-528a7ecda1e3",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.732Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=3a7c452e-f039-42e9-a684-5914dce2c56f no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=3a7c452e-f039-42e9-a684-5914dce2c56f no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=3a7c452e-f039-42e9-a684-5914dce2c56f no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.732Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640734",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00273a7c452e-f039-42e9-a684-5914dce2c56f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.728Z",
"transactionId": 12024924.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640733",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00273a7c452e-f039-42e9-a684-5914dce2c56f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.721Z",
"transactionId": 12024923.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640732",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00273a7c452e-f039-42e9-a684-5914dce2c56f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.717Z",
"transactionId": 12024923.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640731",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00273a7c452e-f039-42e9-a684-5914dce2c56f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.709Z",
"transactionId": 12024922.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640730",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00273a7c452e-f039-42e9-a684-5914dce2c56f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.699Z",
"transactionId": 12024921.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 3a7c452e-f039-42e9-a684-5914dce2c56f
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 3a7c452e-f039-42e9-a684-5914dce2c56f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 3a7c452e-f039-42e9-a684-5914dce2c56f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.694Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 3a7c452e-f039-42e9-a684-5914dce2c56f
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 3a7c452e-f039-42e9-a684-5914dce2c56f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 3a7c452e-f039-42e9-a684-5914dce2c56f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.694Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=88927e01-f84b-4128-b58d-a17825a0052d no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=88927e01-f84b-4128-b58d-a17825a0052d no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=88927e01-f84b-4128-b58d-a17825a0052d no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.693Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640729",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002788927e01-f84b-4128-b58d-a17825a0052d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.690Z",
"transactionId": 12024920.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 1.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640728",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002788927e01-f84b-4128-b58d-a17825a0052d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.682Z",
"transactionId": 12024919.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640727",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002788927e01-f84b-4128-b58d-a17825a0052d\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.678Z",
"transactionId": 12024919.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640726",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002788927e01-f84b-4128-b58d-a17825a0052d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.670Z",
"transactionId": 12024918.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640725",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002788927e01-f84b-4128-b58d-a17825a0052d\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.662Z",
"transactionId": 12024917.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 88927e01-f84b-4128-b58d-a17825a0052d
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 88927e01-f84b-4128-b58d-a17825a0052d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 88927e01-f84b-4128-b58d-a17825a0052d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.657Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 88927e01-f84b-4128-b58d-a17825a0052d
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 88927e01-f84b-4128-b58d-a17825a0052d
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 88927e01-f84b-4128-b58d-a17825a0052d",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.657Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=63b779dc-db36-46cd-a941-6db07a688805 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=63b779dc-db36-46cd-a941-6db07a688805 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=63b779dc-db36-46cd-a941-6db07a688805 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.657Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640724",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002763b779dc-db36-46cd-a941-6db07a688805\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.653Z",
"transactionId": 12024916.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640723",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002763b779dc-db36-46cd-a941-6db07a688805\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.647Z",
"transactionId": 12024915.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640722",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002763b779dc-db36-46cd-a941-6db07a688805\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.644Z",
"transactionId": 12024915.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640721",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002763b779dc-db36-46cd-a941-6db07a688805\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.637Z",
"transactionId": 12024914.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640720",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002763b779dc-db36-46cd-a941-6db07a688805\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.630Z",
"transactionId": 12024913.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 63b779dc-db36-46cd-a941-6db07a688805
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 63b779dc-db36-46cd-a941-6db07a688805
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 63b779dc-db36-46cd-a941-6db07a688805",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.625Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 63b779dc-db36-46cd-a941-6db07a688805
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 63b779dc-db36-46cd-a941-6db07a688805
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 63b779dc-db36-46cd-a941-6db07a688805",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.625Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=e65fda00-bdc8-467a-a0df-e5844d83479a no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=e65fda00-bdc8-467a-a0df-e5844d83479a no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=e65fda00-bdc8-467a-a0df-e5844d83479a no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.624Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640719",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027e65fda00-bdc8-467a-a0df-e5844d83479a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.621Z",
"transactionId": 12024912.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640718",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027e65fda00-bdc8-467a-a0df-e5844d83479a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.615Z",
"transactionId": 12024911.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640717",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027e65fda00-bdc8-467a-a0df-e5844d83479a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.612Z",
"transactionId": 12024911.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640716",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027e65fda00-bdc8-467a-a0df-e5844d83479a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.605Z",
"transactionId": 12024910.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640715",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027e65fda00-bdc8-467a-a0df-e5844d83479a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.598Z",
"transactionId": 12024909.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order e65fda00-bdc8-467a-a0df-e5844d83479a
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order e65fda00-bdc8-467a-a0df-e5844d83479a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order e65fda00-bdc8-467a-a0df-e5844d83479a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.593Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order e65fda00-bdc8-467a-a0df-e5844d83479a
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order e65fda00-bdc8-467a-a0df-e5844d83479a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order e65fda00-bdc8-467a-a0df-e5844d83479a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.593Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.593Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640714",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.590Z",
"transactionId": 12024908.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640713",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.583Z",
"transactionId": 12024907.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640712",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.579Z",
"transactionId": 12024907.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640711",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.572Z",
"transactionId": 12024906.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640710",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.564Z",
"transactionId": 12024905.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.559Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order c61aa5df-3ecf-4ab5-b4f6-670f81efd4b4",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.559Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=5101c9e7-af48-4013-916f-a6a73d7d44bd no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=5101c9e7-af48-4013-916f-a6a73d7d44bd no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=5101c9e7-af48-4013-916f-a6a73d7d44bd no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.559Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640709",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00275101c9e7-af48-4013-916f-a6a73d7d44bd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.556Z",
"transactionId": 12024904.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640708",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00275101c9e7-af48-4013-916f-a6a73d7d44bd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.549Z",
"transactionId": 12024903.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640707",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00275101c9e7-af48-4013-916f-a6a73d7d44bd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.546Z",
"transactionId": 12024903.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640706",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00275101c9e7-af48-4013-916f-a6a73d7d44bd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.539Z",
"transactionId": 12024902.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640705",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00275101c9e7-af48-4013-916f-a6a73d7d44bd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.531Z",
"transactionId": 12024901.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 5101c9e7-af48-4013-916f-a6a73d7d44bd
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 5101c9e7-af48-4013-916f-a6a73d7d44bd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 5101c9e7-af48-4013-916f-a6a73d7d44bd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.527Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 5101c9e7-af48-4013-916f-a6a73d7d44bd
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 5101c9e7-af48-4013-916f-a6a73d7d44bd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 5101c9e7-af48-4013-916f-a6a73d7d44bd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.527Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=20db36f6-22f8-48d3-8089-d30ec5421086 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=20db36f6-22f8-48d3-8089-d30ec5421086 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=20db36f6-22f8-48d3-8089-d30ec5421086 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.526Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640704",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002720db36f6-22f8-48d3-8089-d30ec5421086\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.523Z",
"transactionId": 12024900.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640703",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002720db36f6-22f8-48d3-8089-d30ec5421086\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.516Z",
"transactionId": 12024899.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640702",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002720db36f6-22f8-48d3-8089-d30ec5421086\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.513Z",
"transactionId": 12024899.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640701",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002720db36f6-22f8-48d3-8089-d30ec5421086\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.506Z",
"transactionId": 12024898.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640700",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002720db36f6-22f8-48d3-8089-d30ec5421086\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.498Z",
"transactionId": 12024897.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 20db36f6-22f8-48d3-8089-d30ec5421086
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 20db36f6-22f8-48d3-8089-d30ec5421086
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 20db36f6-22f8-48d3-8089-d30ec5421086",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.494Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 20db36f6-22f8-48d3-8089-d30ec5421086
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 20db36f6-22f8-48d3-8089-d30ec5421086
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 20db36f6-22f8-48d3-8089-d30ec5421086",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.494Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=07c5f811-cc84-4a8b-9478-673892d3c526 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=07c5f811-cc84-4a8b-9478-673892d3c526 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=07c5f811-cc84-4a8b-9478-673892d3c526 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.493Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640699",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002707c5f811-cc84-4a8b-9478-673892d3c526\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.490Z",
"transactionId": 12024896.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640698",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002707c5f811-cc84-4a8b-9478-673892d3c526\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.483Z",
"transactionId": 12024895.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640697",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002707c5f811-cc84-4a8b-9478-673892d3c526\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.480Z",
"transactionId": 12024895.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640696",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002707c5f811-cc84-4a8b-9478-673892d3c526\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.473Z",
"transactionId": 12024894.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640695",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002707c5f811-cc84-4a8b-9478-673892d3c526\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.465Z",
"transactionId": 12024893.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 07c5f811-cc84-4a8b-9478-673892d3c526
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 07c5f811-cc84-4a8b-9478-673892d3c526
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 07c5f811-cc84-4a8b-9478-673892d3c526",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.460Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 07c5f811-cc84-4a8b-9478-673892d3c526
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 07c5f811-cc84-4a8b-9478-673892d3c526
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 07c5f811-cc84-4a8b-9478-673892d3c526",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.460Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=92efe5f9-e6cf-4659-87f1-b3c296b2af08 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=92efe5f9-e6cf-4659-87f1-b3c296b2af08 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=92efe5f9-e6cf-4659-87f1-b3c296b2af08 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.460Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640694",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002792efe5f9-e6cf-4659-87f1-b3c296b2af08\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.456Z",
"transactionId": 12024892.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640693",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002792efe5f9-e6cf-4659-87f1-b3c296b2af08\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.449Z",
"transactionId": 12024891.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640692",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002792efe5f9-e6cf-4659-87f1-b3c296b2af08\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.445Z",
"transactionId": 12024891.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640691",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002792efe5f9-e6cf-4659-87f1-b3c296b2af08\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.437Z",
"transactionId": 12024890.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640690",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002792efe5f9-e6cf-4659-87f1-b3c296b2af08\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.428Z",
"transactionId": 12024889.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.423Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 92efe5f9-e6cf-4659-87f1-b3c296b2af08",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.423Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=276f0340-cf0c-4458-80ed-48c1d929b8e7 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=276f0340-cf0c-4458-80ed-48c1d929b8e7 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=276f0340-cf0c-4458-80ed-48c1d929b8e7 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.423Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640689",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027276f0340-cf0c-4458-80ed-48c1d929b8e7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.420Z",
"transactionId": 12024888.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640688",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027276f0340-cf0c-4458-80ed-48c1d929b8e7\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.412Z",
"transactionId": 12024887.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640687",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027276f0340-cf0c-4458-80ed-48c1d929b8e7\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.409Z",
"transactionId": 12024887.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640686",
"pageFaults": 0.0,
"pageHits": 10.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027276f0340-cf0c-4458-80ed-48c1d929b8e7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.401Z",
"transactionId": 12024886.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640685",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027276f0340-cf0c-4458-80ed-48c1d929b8e7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.394Z",
"transactionId": 12024885.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 276f0340-cf0c-4458-80ed-48c1d929b8e7
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 276f0340-cf0c-4458-80ed-48c1d929b8e7
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 276f0340-cf0c-4458-80ed-48c1d929b8e7",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.389Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 276f0340-cf0c-4458-80ed-48c1d929b8e7
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 276f0340-cf0c-4458-80ed-48c1d929b8e7
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 276f0340-cf0c-4458-80ed-48c1d929b8e7",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.389Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=0f847d8f-af92-4b82-8f43-215571447f69 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=0f847d8f-af92-4b82-8f43-215571447f69 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=0f847d8f-af92-4b82-8f43-215571447f69 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.388Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640684",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00270f847d8f-af92-4b82-8f43-215571447f69\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.385Z",
"transactionId": 12024884.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640683",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00270f847d8f-af92-4b82-8f43-215571447f69\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.377Z",
"transactionId": 12024883.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640682",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00270f847d8f-af92-4b82-8f43-215571447f69\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.374Z",
"transactionId": 12024883.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640681",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00270f847d8f-af92-4b82-8f43-215571447f69\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.366Z",
"transactionId": 12024882.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640680",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00270f847d8f-af92-4b82-8f43-215571447f69\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.358Z",
"transactionId": 12024881.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 0f847d8f-af92-4b82-8f43-215571447f69
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 0f847d8f-af92-4b82-8f43-215571447f69
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 0f847d8f-af92-4b82-8f43-215571447f69",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.352Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 0f847d8f-af92-4b82-8f43-215571447f69
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 0f847d8f-af92-4b82-8f43-215571447f69
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 0f847d8f-af92-4b82-8f43-215571447f69",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.352Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=71fbec39-e683-4146-86d4-fb3bcd3b6ca1 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=71fbec39-e683-4146-86d4-fb3bcd3b6ca1 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=71fbec39-e683-4146-86d4-fb3bcd3b6ca1 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.351Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640679",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002771fbec39-e683-4146-86d4-fb3bcd3b6ca1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.348Z",
"transactionId": 12024880.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640678",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002771fbec39-e683-4146-86d4-fb3bcd3b6ca1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.340Z",
"transactionId": 12024879.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640677",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002771fbec39-e683-4146-86d4-fb3bcd3b6ca1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.337Z",
"transactionId": 12024879.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640676",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002771fbec39-e683-4146-86d4-fb3bcd3b6ca1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.329Z",
"transactionId": 12024878.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640675",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002771fbec39-e683-4146-86d4-fb3bcd3b6ca1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.320Z",
"transactionId": 12024877.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.315Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 71fbec39-e683-4146-86d4-fb3bcd3b6ca1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.315Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=faa2157d-335b-41b1-a593-8e47039dc337 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=faa2157d-335b-41b1-a593-8e47039dc337 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=faa2157d-335b-41b1-a593-8e47039dc337 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.315Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640674",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027faa2157d-335b-41b1-a593-8e47039dc337\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.312Z",
"transactionId": 12024876.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640673",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027faa2157d-335b-41b1-a593-8e47039dc337\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.304Z",
"transactionId": 12024875.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640672",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027faa2157d-335b-41b1-a593-8e47039dc337\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.301Z",
"transactionId": 12024875.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640671",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027faa2157d-335b-41b1-a593-8e47039dc337\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.293Z",
"transactionId": 12024874.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640670",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027faa2157d-335b-41b1-a593-8e47039dc337\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.285Z",
"transactionId": 12024873.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order faa2157d-335b-41b1-a593-8e47039dc337
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order faa2157d-335b-41b1-a593-8e47039dc337
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order faa2157d-335b-41b1-a593-8e47039dc337",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.281Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order faa2157d-335b-41b1-a593-8e47039dc337
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order faa2157d-335b-41b1-a593-8e47039dc337
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order faa2157d-335b-41b1-a593-8e47039dc337",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.280Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.280Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640669",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00275abe12e8-b81d-4e13-ad3e-7d0315fe4ab2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.277Z",
"transactionId": 12024872.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640668",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00275abe12e8-b81d-4e13-ad3e-7d0315fe4ab2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.269Z",
"transactionId": 12024871.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640667",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00275abe12e8-b81d-4e13-ad3e-7d0315fe4ab2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.265Z",
"transactionId": 12024871.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640666",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00275abe12e8-b81d-4e13-ad3e-7d0315fe4ab2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.258Z",
"transactionId": 12024870.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640665",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00275abe12e8-b81d-4e13-ad3e-7d0315fe4ab2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.249Z",
"transactionId": 12024869.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.245Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 5abe12e8-b81d-4e13-ad3e-7d0315fe4ab2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.244Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b627cf5d-c498-4f45-afbf-ce8922a21cac no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b627cf5d-c498-4f45-afbf-ce8922a21cac no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b627cf5d-c498-4f45-afbf-ce8922a21cac no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.244Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640664",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b627cf5d-c498-4f45-afbf-ce8922a21cac\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.241Z",
"transactionId": 12024868.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640663",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b627cf5d-c498-4f45-afbf-ce8922a21cac\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.233Z",
"transactionId": 12024867.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640662",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b627cf5d-c498-4f45-afbf-ce8922a21cac\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.230Z",
"transactionId": 12024867.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640661",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b627cf5d-c498-4f45-afbf-ce8922a21cac\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.222Z",
"transactionId": 12024866.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640660",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b627cf5d-c498-4f45-afbf-ce8922a21cac\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.214Z",
"transactionId": 12024865.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b627cf5d-c498-4f45-afbf-ce8922a21cac
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b627cf5d-c498-4f45-afbf-ce8922a21cac
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b627cf5d-c498-4f45-afbf-ce8922a21cac",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.209Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b627cf5d-c498-4f45-afbf-ce8922a21cac
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b627cf5d-c498-4f45-afbf-ce8922a21cac
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b627cf5d-c498-4f45-afbf-ce8922a21cac",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.209Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=1ead3a04-419f-4105-a5cf-727c127acd7c no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=1ead3a04-419f-4105-a5cf-727c127acd7c no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=1ead3a04-419f-4105-a5cf-727c127acd7c no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.209Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640659",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00271ead3a04-419f-4105-a5cf-727c127acd7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.206Z",
"transactionId": 12024864.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640658",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00271ead3a04-419f-4105-a5cf-727c127acd7c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.198Z",
"transactionId": 12024863.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640657",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00271ead3a04-419f-4105-a5cf-727c127acd7c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.195Z",
"transactionId": 12024863.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640656",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00271ead3a04-419f-4105-a5cf-727c127acd7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.187Z",
"transactionId": 12024862.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640655",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00271ead3a04-419f-4105-a5cf-727c127acd7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.179Z",
"transactionId": 12024861.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 1ead3a04-419f-4105-a5cf-727c127acd7c
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 1ead3a04-419f-4105-a5cf-727c127acd7c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 1ead3a04-419f-4105-a5cf-727c127acd7c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.174Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 1ead3a04-419f-4105-a5cf-727c127acd7c
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 1ead3a04-419f-4105-a5cf-727c127acd7c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 1ead3a04-419f-4105-a5cf-727c127acd7c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.174Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=074d00e8-0787-4da7-bf14-4b529390cc75 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=074d00e8-0787-4da7-bf14-4b529390cc75 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=074d00e8-0787-4da7-bf14-4b529390cc75 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.174Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640654",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027074d00e8-0787-4da7-bf14-4b529390cc75\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.171Z",
"transactionId": 12024860.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640653",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027074d00e8-0787-4da7-bf14-4b529390cc75\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.164Z",
"transactionId": 12024859.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640652",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027074d00e8-0787-4da7-bf14-4b529390cc75\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.161Z",
"transactionId": 12024859.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640651",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027074d00e8-0787-4da7-bf14-4b529390cc75\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.154Z",
"transactionId": 12024858.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640650",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027074d00e8-0787-4da7-bf14-4b529390cc75\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.146Z",
"transactionId": 12024857.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 074d00e8-0787-4da7-bf14-4b529390cc75
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 074d00e8-0787-4da7-bf14-4b529390cc75
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 074d00e8-0787-4da7-bf14-4b529390cc75",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.141Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 074d00e8-0787-4da7-bf14-4b529390cc75
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 074d00e8-0787-4da7-bf14-4b529390cc75
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 074d00e8-0787-4da7-bf14-4b529390cc75",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.141Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=ff83f0de-2185-46b6-a292-a3bb6e168066 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=ff83f0de-2185-46b6-a292-a3bb6e168066 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=ff83f0de-2185-46b6-a292-a3bb6e168066 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.141Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640649",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027ff83f0de-2185-46b6-a292-a3bb6e168066\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.137Z",
"transactionId": 12024856.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640648",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027ff83f0de-2185-46b6-a292-a3bb6e168066\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.130Z",
"transactionId": 12024855.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640647",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027ff83f0de-2185-46b6-a292-a3bb6e168066\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.127Z",
"transactionId": 12024855.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640646",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027ff83f0de-2185-46b6-a292-a3bb6e168066\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.120Z",
"transactionId": 12024854.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640645",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027ff83f0de-2185-46b6-a292-a3bb6e168066\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.112Z",
"transactionId": 12024853.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order ff83f0de-2185-46b6-a292-a3bb6e168066
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order ff83f0de-2185-46b6-a292-a3bb6e168066
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order ff83f0de-2185-46b6-a292-a3bb6e168066",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.106Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order ff83f0de-2185-46b6-a292-a3bb6e168066
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order ff83f0de-2185-46b6-a292-a3bb6e168066
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order ff83f0de-2185-46b6-a292-a3bb6e168066",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.106Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=5eda87d2-6e80-46fc-990e-9e61e2e02358 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=5eda87d2-6e80-46fc-990e-9e61e2e02358 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=5eda87d2-6e80-46fc-990e-9e61e2e02358 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.105Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640644",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00275eda87d2-6e80-46fc-990e-9e61e2e02358\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.102Z",
"transactionId": 12024852.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640643",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00275eda87d2-6e80-46fc-990e-9e61e2e02358\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.095Z",
"transactionId": 12024851.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640642",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00275eda87d2-6e80-46fc-990e-9e61e2e02358\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.092Z",
"transactionId": 12024851.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640641",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00275eda87d2-6e80-46fc-990e-9e61e2e02358\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.085Z",
"transactionId": 12024850.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640640",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00275eda87d2-6e80-46fc-990e-9e61e2e02358\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.077Z",
"transactionId": 12024849.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 5eda87d2-6e80-46fc-990e-9e61e2e02358
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 5eda87d2-6e80-46fc-990e-9e61e2e02358
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 5eda87d2-6e80-46fc-990e-9e61e2e02358",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.073Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 5eda87d2-6e80-46fc-990e-9e61e2e02358
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 5eda87d2-6e80-46fc-990e-9e61e2e02358
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 5eda87d2-6e80-46fc-990e-9e61e2e02358",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.072Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=51b5415b-1fc5-4be9-894e-3cb7cc05b4db no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=51b5415b-1fc5-4be9-894e-3cb7cc05b4db no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=51b5415b-1fc5-4be9-894e-3cb7cc05b4db no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.072Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640639",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002751b5415b-1fc5-4be9-894e-3cb7cc05b4db\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.069Z",
"transactionId": 12024848.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640638",
"pageFaults": 0.0,
"pageHits": 2.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002751b5415b-1fc5-4be9-894e-3cb7cc05b4db\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.060Z",
"transactionId": 12024847.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640637",
"pageFaults": 0.0,
"pageHits": 5.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002751b5415b-1fc5-4be9-894e-3cb7cc05b4db\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.057Z",
"transactionId": 12024847.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640636",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002751b5415b-1fc5-4be9-894e-3cb7cc05b4db\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.050Z",
"transactionId": 12024846.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640635",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002751b5415b-1fc5-4be9-894e-3cb7cc05b4db\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.042Z",
"transactionId": 12024845.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.037Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 51b5415b-1fc5-4be9-894e-3cb7cc05b4db",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.037Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=35abd487-f3e4-479c-b57a-47ac8fd14f48 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=35abd487-f3e4-479c-b57a-47ac8fd14f48 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=35abd487-f3e4-479c-b57a-47ac8fd14f48 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.037Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640634",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002735abd487-f3e4-479c-b57a-47ac8fd14f48\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.033Z",
"transactionId": 12024844.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640633",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002735abd487-f3e4-479c-b57a-47ac8fd14f48\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.026Z",
"transactionId": 12024843.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640632",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002735abd487-f3e4-479c-b57a-47ac8fd14f48\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.023Z",
"transactionId": 12024843.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640631",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002735abd487-f3e4-479c-b57a-47ac8fd14f48\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.015Z",
"transactionId": 12024842.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640630",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002735abd487-f3e4-479c-b57a-47ac8fd14f48\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:06.008Z",
"transactionId": 12024841.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 35abd487-f3e4-479c-b57a-47ac8fd14f48
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 35abd487-f3e4-479c-b57a-47ac8fd14f48
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 35abd487-f3e4-479c-b57a-47ac8fd14f48",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.003Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 35abd487-f3e4-479c-b57a-47ac8fd14f48
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 35abd487-f3e4-479c-b57a-47ac8fd14f48
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 35abd487-f3e4-479c-b57a-47ac8fd14f48",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.003Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:06 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:06.002Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:06 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640629",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00274c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.999Z",
"transactionId": 12024840.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640628",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00274c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.993Z",
"transactionId": 12024839.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640627",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00274c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.990Z",
"transactionId": 12024839.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640626",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00274c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.982Z",
"transactionId": 12024838.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640624",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00274c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.974Z",
"transactionId": 12024837.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.969Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 4c47b7cd-6467-4bf4-b7bf-c90b6f5c5d87",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.969Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=691c470b-9998-4b3b-aea1-2890e344c909 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=691c470b-9998-4b3b-aea1-2890e344c909 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=691c470b-9998-4b3b-aea1-2890e344c909 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.969Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640623",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027691c470b-9998-4b3b-aea1-2890e344c909\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.966Z",
"transactionId": 12024836.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640622",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027691c470b-9998-4b3b-aea1-2890e344c909\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.959Z",
"transactionId": 12024835.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640621",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027691c470b-9998-4b3b-aea1-2890e344c909\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.955Z",
"transactionId": 12024835.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640620",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027691c470b-9998-4b3b-aea1-2890e344c909\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.947Z",
"transactionId": 12024834.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640619",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027691c470b-9998-4b3b-aea1-2890e344c909\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.939Z",
"transactionId": 12024833.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 691c470b-9998-4b3b-aea1-2890e344c909
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 691c470b-9998-4b3b-aea1-2890e344c909
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 691c470b-9998-4b3b-aea1-2890e344c909",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.934Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 691c470b-9998-4b3b-aea1-2890e344c909
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 691c470b-9998-4b3b-aea1-2890e344c909
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 691c470b-9998-4b3b-aea1-2890e344c909",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.933Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b8e68e82-df1d-41e4-9df2-c1416fef8832 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b8e68e82-df1d-41e4-9df2-c1416fef8832 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b8e68e82-df1d-41e4-9df2-c1416fef8832 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.933Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640618",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b8e68e82-df1d-41e4-9df2-c1416fef8832\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.930Z",
"transactionId": 12024832.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640617",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b8e68e82-df1d-41e4-9df2-c1416fef8832\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.922Z",
"transactionId": 12024831.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640616",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b8e68e82-df1d-41e4-9df2-c1416fef8832\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.919Z",
"transactionId": 12024831.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640615",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b8e68e82-df1d-41e4-9df2-c1416fef8832\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.911Z",
"transactionId": 12024830.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640614",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b8e68e82-df1d-41e4-9df2-c1416fef8832\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.903Z",
"transactionId": 12024829.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b8e68e82-df1d-41e4-9df2-c1416fef8832
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b8e68e82-df1d-41e4-9df2-c1416fef8832
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b8e68e82-df1d-41e4-9df2-c1416fef8832",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.898Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b8e68e82-df1d-41e4-9df2-c1416fef8832
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b8e68e82-df1d-41e4-9df2-c1416fef8832
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b8e68e82-df1d-41e4-9df2-c1416fef8832",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.898Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=b97f1ea9-b071-4b35-89a7-36eb7df6616a no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=b97f1ea9-b071-4b35-89a7-36eb7df6616a no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=b97f1ea9-b071-4b35-89a7-36eb7df6616a no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.898Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640613",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027b97f1ea9-b071-4b35-89a7-36eb7df6616a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.894Z",
"transactionId": 12024828.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640612",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027b97f1ea9-b071-4b35-89a7-36eb7df6616a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.886Z",
"transactionId": 12024827.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640611",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027b97f1ea9-b071-4b35-89a7-36eb7df6616a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.883Z",
"transactionId": 12024827.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640610",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027b97f1ea9-b071-4b35-89a7-36eb7df6616a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.875Z",
"transactionId": 12024826.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640609",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027b97f1ea9-b071-4b35-89a7-36eb7df6616a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.867Z",
"transactionId": 12024825.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order b97f1ea9-b071-4b35-89a7-36eb7df6616a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order b97f1ea9-b071-4b35-89a7-36eb7df6616a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order b97f1ea9-b071-4b35-89a7-36eb7df6616a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.862Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order b97f1ea9-b071-4b35-89a7-36eb7df6616a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order b97f1ea9-b071-4b35-89a7-36eb7df6616a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order b97f1ea9-b071-4b35-89a7-36eb7df6616a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.862Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=9acc08ba-3dd4-40b8-990b-689d2f24d1aa no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=9acc08ba-3dd4-40b8-990b-689d2f24d1aa no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=9acc08ba-3dd4-40b8-990b-689d2f24d1aa no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.862Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640608",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00279acc08ba-3dd4-40b8-990b-689d2f24d1aa\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.858Z",
"transactionId": 12024824.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640607",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00279acc08ba-3dd4-40b8-990b-689d2f24d1aa\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.851Z",
"transactionId": 12024823.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640606",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00279acc08ba-3dd4-40b8-990b-689d2f24d1aa\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.848Z",
"transactionId": 12024823.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640605",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00279acc08ba-3dd4-40b8-990b-689d2f24d1aa\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.840Z",
"transactionId": 12024822.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640604",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00279acc08ba-3dd4-40b8-990b-689d2f24d1aa\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.832Z",
"transactionId": 12024821.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.828Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 9acc08ba-3dd4-40b8-990b-689d2f24d1aa",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.828Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=dc609db5-7192-463d-92ca-9e9e35c22299 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=dc609db5-7192-463d-92ca-9e9e35c22299 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=dc609db5-7192-463d-92ca-9e9e35c22299 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.828Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640603",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027dc609db5-7192-463d-92ca-9e9e35c22299\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.825Z",
"transactionId": 12024820.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640602",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027dc609db5-7192-463d-92ca-9e9e35c22299\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.818Z",
"transactionId": 12024819.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640601",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027dc609db5-7192-463d-92ca-9e9e35c22299\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.814Z",
"transactionId": 12024819.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640600",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027dc609db5-7192-463d-92ca-9e9e35c22299\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.807Z",
"transactionId": 12024818.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640599",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027dc609db5-7192-463d-92ca-9e9e35c22299\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.798Z",
"transactionId": 12024817.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order dc609db5-7192-463d-92ca-9e9e35c22299
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order dc609db5-7192-463d-92ca-9e9e35c22299
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order dc609db5-7192-463d-92ca-9e9e35c22299",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.794Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order dc609db5-7192-463d-92ca-9e9e35c22299
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order dc609db5-7192-463d-92ca-9e9e35c22299
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order dc609db5-7192-463d-92ca-9e9e35c22299",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.794Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=7e9fd443-896e-473c-abeb-3e8fa6ab76b7 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=7e9fd443-896e-473c-abeb-3e8fa6ab76b7 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=7e9fd443-896e-473c-abeb-3e8fa6ab76b7 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.793Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640598",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00277e9fd443-896e-473c-abeb-3e8fa6ab76b7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.790Z",
"transactionId": 12024816.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640597",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00277e9fd443-896e-473c-abeb-3e8fa6ab76b7\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.783Z",
"transactionId": 12024815.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640596",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00277e9fd443-896e-473c-abeb-3e8fa6ab76b7\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.779Z",
"transactionId": 12024815.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640595",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00277e9fd443-896e-473c-abeb-3e8fa6ab76b7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.771Z",
"transactionId": 12024814.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640594",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00277e9fd443-896e-473c-abeb-3e8fa6ab76b7\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.762Z",
"transactionId": 12024813.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.756Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 7e9fd443-896e-473c-abeb-3e8fa6ab76b7",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.756Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=196ee7d7-84ed-4d36-956f-4ba89ba74364 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=196ee7d7-84ed-4d36-956f-4ba89ba74364 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=196ee7d7-84ed-4d36-956f-4ba89ba74364 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.755Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640593",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027196ee7d7-84ed-4d36-956f-4ba89ba74364\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.752Z",
"transactionId": 12024812.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640592",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027196ee7d7-84ed-4d36-956f-4ba89ba74364\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.743Z",
"transactionId": 12024811.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640591",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027196ee7d7-84ed-4d36-956f-4ba89ba74364\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.740Z",
"transactionId": 12024811.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640590",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027196ee7d7-84ed-4d36-956f-4ba89ba74364\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.732Z",
"transactionId": 12024810.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640589",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027196ee7d7-84ed-4d36-956f-4ba89ba74364\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.723Z",
"transactionId": 12024809.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 196ee7d7-84ed-4d36-956f-4ba89ba74364
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 196ee7d7-84ed-4d36-956f-4ba89ba74364
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 196ee7d7-84ed-4d36-956f-4ba89ba74364",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.719Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 196ee7d7-84ed-4d36-956f-4ba89ba74364
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 196ee7d7-84ed-4d36-956f-4ba89ba74364
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 196ee7d7-84ed-4d36-956f-4ba89ba74364",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.718Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=697d5dce-2f0d-488d-9f63-4094afffcc27 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=697d5dce-2f0d-488d-9f63-4094afffcc27 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=697d5dce-2f0d-488d-9f63-4094afffcc27 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.718Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640588",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027697d5dce-2f0d-488d-9f63-4094afffcc27\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.715Z",
"transactionId": 12024808.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640587",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027697d5dce-2f0d-488d-9f63-4094afffcc27\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.707Z",
"transactionId": 12024807.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640586",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027697d5dce-2f0d-488d-9f63-4094afffcc27\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.703Z",
"transactionId": 12024807.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640585",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027697d5dce-2f0d-488d-9f63-4094afffcc27\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.695Z",
"transactionId": 12024806.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640584",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027697d5dce-2f0d-488d-9f63-4094afffcc27\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.686Z",
"transactionId": 12024805.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 697d5dce-2f0d-488d-9f63-4094afffcc27
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 697d5dce-2f0d-488d-9f63-4094afffcc27
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 697d5dce-2f0d-488d-9f63-4094afffcc27",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.681Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 697d5dce-2f0d-488d-9f63-4094afffcc27
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 697d5dce-2f0d-488d-9f63-4094afffcc27
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 697d5dce-2f0d-488d-9f63-4094afffcc27",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.681Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=bc8da54e-0ee6-4986-abfe-f4f13766b093 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=bc8da54e-0ee6-4986-abfe-f4f13766b093 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=bc8da54e-0ee6-4986-abfe-f4f13766b093 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.681Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640583",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027bc8da54e-0ee6-4986-abfe-f4f13766b093\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.677Z",
"transactionId": 12024804.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640582",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027bc8da54e-0ee6-4986-abfe-f4f13766b093\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.669Z",
"transactionId": 12024803.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640581",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027bc8da54e-0ee6-4986-abfe-f4f13766b093\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.666Z",
"transactionId": 12024803.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640580",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027bc8da54e-0ee6-4986-abfe-f4f13766b093\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.658Z",
"transactionId": 12024802.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640579",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027bc8da54e-0ee6-4986-abfe-f4f13766b093\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.651Z",
"transactionId": 12024801.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order bc8da54e-0ee6-4986-abfe-f4f13766b093
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order bc8da54e-0ee6-4986-abfe-f4f13766b093
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order bc8da54e-0ee6-4986-abfe-f4f13766b093",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.646Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order bc8da54e-0ee6-4986-abfe-f4f13766b093
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order bc8da54e-0ee6-4986-abfe-f4f13766b093
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order bc8da54e-0ee6-4986-abfe-f4f13766b093",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.646Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=1aec4cf6-7b45-4d40-b429-225d1266c65f no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=1aec4cf6-7b45-4d40-b429-225d1266c65f no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=1aec4cf6-7b45-4d40-b429-225d1266c65f no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.646Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640578",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00271aec4cf6-7b45-4d40-b429-225d1266c65f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.642Z",
"transactionId": 12024800.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640577",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00271aec4cf6-7b45-4d40-b429-225d1266c65f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.635Z",
"transactionId": 12024799.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640576",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00271aec4cf6-7b45-4d40-b429-225d1266c65f\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.632Z",
"transactionId": 12024799.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640575",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00271aec4cf6-7b45-4d40-b429-225d1266c65f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.625Z",
"transactionId": 12024798.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640574",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00271aec4cf6-7b45-4d40-b429-225d1266c65f\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.617Z",
"transactionId": 12024797.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 1aec4cf6-7b45-4d40-b429-225d1266c65f
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 1aec4cf6-7b45-4d40-b429-225d1266c65f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 1aec4cf6-7b45-4d40-b429-225d1266c65f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.612Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 1aec4cf6-7b45-4d40-b429-225d1266c65f
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 1aec4cf6-7b45-4d40-b429-225d1266c65f
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 1aec4cf6-7b45-4d40-b429-225d1266c65f",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.612Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=8ed5101b-5440-4029-92d4-24275f324ea2 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=8ed5101b-5440-4029-92d4-24275f324ea2 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=8ed5101b-5440-4029-92d4-24275f324ea2 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.612Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640573",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00278ed5101b-5440-4029-92d4-24275f324ea2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.609Z",
"transactionId": 12024796.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640572",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00278ed5101b-5440-4029-92d4-24275f324ea2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.602Z",
"transactionId": 12024795.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640571",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00278ed5101b-5440-4029-92d4-24275f324ea2\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.599Z",
"transactionId": 12024795.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640570",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00278ed5101b-5440-4029-92d4-24275f324ea2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.591Z",
"transactionId": 12024794.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640569",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00278ed5101b-5440-4029-92d4-24275f324ea2\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.583Z",
"transactionId": 12024793.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 8ed5101b-5440-4029-92d4-24275f324ea2
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 8ed5101b-5440-4029-92d4-24275f324ea2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 8ed5101b-5440-4029-92d4-24275f324ea2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.579Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 8ed5101b-5440-4029-92d4-24275f324ea2
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 8ed5101b-5440-4029-92d4-24275f324ea2
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 8ed5101b-5440-4029-92d4-24275f324ea2",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.578Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=59ed4245-c2fd-48b3-937e-c60219288c03 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=59ed4245-c2fd-48b3-937e-c60219288c03 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=59ed4245-c2fd-48b3-937e-c60219288c03 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.578Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640568",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002759ed4245-c2fd-48b3-937e-c60219288c03\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.575Z",
"transactionId": 12024792.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640566",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002759ed4245-c2fd-48b3-937e-c60219288c03\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.569Z",
"transactionId": 12024790.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640565",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002759ed4245-c2fd-48b3-937e-c60219288c03\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.565Z",
"transactionId": 12024790.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640564",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002759ed4245-c2fd-48b3-937e-c60219288c03\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.558Z",
"transactionId": 12024789.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640563",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002759ed4245-c2fd-48b3-937e-c60219288c03\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.550Z",
"transactionId": 12024788.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 59ed4245-c2fd-48b3-937e-c60219288c03
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 59ed4245-c2fd-48b3-937e-c60219288c03
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 59ed4245-c2fd-48b3-937e-c60219288c03",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.545Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 59ed4245-c2fd-48b3-937e-c60219288c03
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 59ed4245-c2fd-48b3-937e-c60219288c03
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 59ed4245-c2fd-48b3-937e-c60219288c03",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.545Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=9b33289b-556a-4455-b242-9b4f9378014e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=9b33289b-556a-4455-b242-9b4f9378014e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=9b33289b-556a-4455-b242-9b4f9378014e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.545Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640562",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00279b33289b-556a-4455-b242-9b4f9378014e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.541Z",
"transactionId": 12024787.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640561",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00279b33289b-556a-4455-b242-9b4f9378014e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.534Z",
"transactionId": 12024786.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640559",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00279b33289b-556a-4455-b242-9b4f9378014e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.530Z",
"transactionId": 12024786.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640558",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00279b33289b-556a-4455-b242-9b4f9378014e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.524Z",
"transactionId": 12024785.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640557",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00279b33289b-556a-4455-b242-9b4f9378014e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.516Z",
"transactionId": 12024784.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 9b33289b-556a-4455-b242-9b4f9378014e
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 9b33289b-556a-4455-b242-9b4f9378014e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 9b33289b-556a-4455-b242-9b4f9378014e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.511Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 9b33289b-556a-4455-b242-9b4f9378014e
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 9b33289b-556a-4455-b242-9b4f9378014e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 9b33289b-556a-4455-b242-9b4f9378014e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.511Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=d23cccde-63ea-47d6-a753-23c309d201bc no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=d23cccde-63ea-47d6-a753-23c309d201bc no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=d23cccde-63ea-47d6-a753-23c309d201bc no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.511Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640556",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027d23cccde-63ea-47d6-a753-23c309d201bc\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.508Z",
"transactionId": 12024783.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640555",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027d23cccde-63ea-47d6-a753-23c309d201bc\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.500Z",
"transactionId": 12024782.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640554",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027d23cccde-63ea-47d6-a753-23c309d201bc\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.497Z",
"transactionId": 12024782.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640553",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027d23cccde-63ea-47d6-a753-23c309d201bc\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.489Z",
"transactionId": 12024781.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640552",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027d23cccde-63ea-47d6-a753-23c309d201bc\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.481Z",
"transactionId": 12024780.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order d23cccde-63ea-47d6-a753-23c309d201bc
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order d23cccde-63ea-47d6-a753-23c309d201bc
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order d23cccde-63ea-47d6-a753-23c309d201bc",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.476Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order d23cccde-63ea-47d6-a753-23c309d201bc
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order d23cccde-63ea-47d6-a753-23c309d201bc
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order d23cccde-63ea-47d6-a753-23c309d201bc",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.476Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=55a061dd-d4b7-4b13-9b8f-723679eb8bc1 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=55a061dd-d4b7-4b13-9b8f-723679eb8bc1 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=55a061dd-d4b7-4b13-9b8f-723679eb8bc1 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.475Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640551",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002755a061dd-d4b7-4b13-9b8f-723679eb8bc1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.472Z",
"transactionId": 12024779.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640550",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002755a061dd-d4b7-4b13-9b8f-723679eb8bc1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.465Z",
"transactionId": 12024778.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640549",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002755a061dd-d4b7-4b13-9b8f-723679eb8bc1\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.462Z",
"transactionId": 12024778.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640548",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002755a061dd-d4b7-4b13-9b8f-723679eb8bc1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.453Z",
"transactionId": 12024777.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640547",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002755a061dd-d4b7-4b13-9b8f-723679eb8bc1\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.445Z",
"transactionId": 12024776.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.441Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 55a061dd-d4b7-4b13-9b8f-723679eb8bc1",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.440Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.440Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640546",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002761b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.437Z",
"transactionId": 12024775.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640545",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002761b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.429Z",
"transactionId": 12024774.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640544",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002761b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.426Z",
"transactionId": 12024774.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640543",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002761b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.418Z",
"transactionId": 12024773.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640542",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002761b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.410Z",
"transactionId": 12024772.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.405Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 61b1ceaa-622c-4b1e-a5e5-d1a8ce6f5476",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.405Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=f73ed21b-358a-499e-95b6-c7a28f725a4a no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=f73ed21b-358a-499e-95b6-c7a28f725a4a no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=f73ed21b-358a-499e-95b6-c7a28f725a4a no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.405Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640541",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027f73ed21b-358a-499e-95b6-c7a28f725a4a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.402Z",
"transactionId": 12024771.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640540",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027f73ed21b-358a-499e-95b6-c7a28f725a4a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.395Z",
"transactionId": 12024770.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640539",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027f73ed21b-358a-499e-95b6-c7a28f725a4a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.392Z",
"transactionId": 12024770.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640538",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027f73ed21b-358a-499e-95b6-c7a28f725a4a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.384Z",
"transactionId": 12024769.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640537",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027f73ed21b-358a-499e-95b6-c7a28f725a4a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.375Z",
"transactionId": 12024768.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order f73ed21b-358a-499e-95b6-c7a28f725a4a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order f73ed21b-358a-499e-95b6-c7a28f725a4a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order f73ed21b-358a-499e-95b6-c7a28f725a4a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.370Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order f73ed21b-358a-499e-95b6-c7a28f725a4a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order f73ed21b-358a-499e-95b6-c7a28f725a4a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order f73ed21b-358a-499e-95b6-c7a28f725a4a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.370Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=d83c7b96-b5fe-41d5-b798-cc731292757a no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=d83c7b96-b5fe-41d5-b798-cc731292757a no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=d83c7b96-b5fe-41d5-b798-cc731292757a no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.370Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640536",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027d83c7b96-b5fe-41d5-b798-cc731292757a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.365Z",
"transactionId": 12024767.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640535",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027d83c7b96-b5fe-41d5-b798-cc731292757a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.357Z",
"transactionId": 12024766.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640534",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027d83c7b96-b5fe-41d5-b798-cc731292757a\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.354Z",
"transactionId": 12024766.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640533",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027d83c7b96-b5fe-41d5-b798-cc731292757a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.345Z",
"transactionId": 12024765.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640532",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027d83c7b96-b5fe-41d5-b798-cc731292757a\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.337Z",
"transactionId": 12024764.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order d83c7b96-b5fe-41d5-b798-cc731292757a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order d83c7b96-b5fe-41d5-b798-cc731292757a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order d83c7b96-b5fe-41d5-b798-cc731292757a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.332Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order d83c7b96-b5fe-41d5-b798-cc731292757a
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order d83c7b96-b5fe-41d5-b798-cc731292757a
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order d83c7b96-b5fe-41d5-b798-cc731292757a",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.332Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=127c3057-bee0-4d20-90c6-9ba23705971e no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=127c3057-bee0-4d20-90c6-9ba23705971e no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=127c3057-bee0-4d20-90c6-9ba23705971e no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.332Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640531",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027127c3057-bee0-4d20-90c6-9ba23705971e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.329Z",
"transactionId": 12024763.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 1.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640530",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027127c3057-bee0-4d20-90c6-9ba23705971e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.321Z",
"transactionId": 12024762.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640529",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027127c3057-bee0-4d20-90c6-9ba23705971e\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.317Z",
"transactionId": 12024762.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640528",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027127c3057-bee0-4d20-90c6-9ba23705971e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.309Z",
"transactionId": 12024761.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640527",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027127c3057-bee0-4d20-90c6-9ba23705971e\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.300Z",
"transactionId": 12024760.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 127c3057-bee0-4d20-90c6-9ba23705971e
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 127c3057-bee0-4d20-90c6-9ba23705971e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 127c3057-bee0-4d20-90c6-9ba23705971e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.296Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 127c3057-bee0-4d20-90c6-9ba23705971e
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 127c3057-bee0-4d20-90c6-9ba23705971e
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 127c3057-bee0-4d20-90c6-9ba23705971e",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.296Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=97a7f50a-1ace-4a9b-8d0e-51a566325735 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=97a7f50a-1ace-4a9b-8d0e-51a566325735 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=97a7f50a-1ace-4a9b-8d0e-51a566325735 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.295Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640526",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002797a7f50a-1ace-4a9b-8d0e-51a566325735\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.292Z",
"transactionId": 12024759.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640525",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002797a7f50a-1ace-4a9b-8d0e-51a566325735\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.284Z",
"transactionId": 12024758.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640524",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002797a7f50a-1ace-4a9b-8d0e-51a566325735\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.280Z",
"transactionId": 12024758.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640523",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002797a7f50a-1ace-4a9b-8d0e-51a566325735\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.273Z",
"transactionId": 12024757.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640522",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002797a7f50a-1ace-4a9b-8d0e-51a566325735\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.264Z",
"transactionId": 12024756.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 97a7f50a-1ace-4a9b-8d0e-51a566325735
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 97a7f50a-1ace-4a9b-8d0e-51a566325735
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 97a7f50a-1ace-4a9b-8d0e-51a566325735",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.259Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 97a7f50a-1ace-4a9b-8d0e-51a566325735
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 97a7f50a-1ace-4a9b-8d0e-51a566325735
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 97a7f50a-1ace-4a9b-8d0e-51a566325735",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.259Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=a00c50c9-bc21-4ff7-b562-1975f82540cd no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=a00c50c9-bc21-4ff7-b562-1975f82540cd no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=a00c50c9-bc21-4ff7-b562-1975f82540cd no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.259Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640521",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027a00c50c9-bc21-4ff7-b562-1975f82540cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.255Z",
"transactionId": 12024755.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640520",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027a00c50c9-bc21-4ff7-b562-1975f82540cd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.247Z",
"transactionId": 12024754.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640519",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027a00c50c9-bc21-4ff7-b562-1975f82540cd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.243Z",
"transactionId": 12024754.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640518",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027a00c50c9-bc21-4ff7-b562-1975f82540cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.236Z",
"transactionId": 12024753.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640517",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027a00c50c9-bc21-4ff7-b562-1975f82540cd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.227Z",
"transactionId": 12024752.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order a00c50c9-bc21-4ff7-b562-1975f82540cd
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order a00c50c9-bc21-4ff7-b562-1975f82540cd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order a00c50c9-bc21-4ff7-b562-1975f82540cd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.222Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order a00c50c9-bc21-4ff7-b562-1975f82540cd
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order a00c50c9-bc21-4ff7-b562-1975f82540cd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order a00c50c9-bc21-4ff7-b562-1975f82540cd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.222Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=8fdd25b1-082d-46ee-a7f6-0761fa21b8e8 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=8fdd25b1-082d-46ee-a7f6-0761fa21b8e8 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=8fdd25b1-082d-46ee-a7f6-0761fa21b8e8 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.221Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640516",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00278fdd25b1-082d-46ee-a7f6-0761fa21b8e8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.218Z",
"transactionId": 12024751.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640515",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00278fdd25b1-082d-46ee-a7f6-0761fa21b8e8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.211Z",
"transactionId": 12024750.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640514",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00278fdd25b1-082d-46ee-a7f6-0761fa21b8e8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.208Z",
"transactionId": 12024750.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640513",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00278fdd25b1-082d-46ee-a7f6-0761fa21b8e8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.200Z",
"transactionId": 12024749.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640512",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00278fdd25b1-082d-46ee-a7f6-0761fa21b8e8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.192Z",
"transactionId": 12024748.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.188Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 8fdd25b1-082d-46ee-a7f6-0761fa21b8e8",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.188Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=3387d16a-df90-4d19-bd8a-e57d8c6503f8 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=3387d16a-df90-4d19-bd8a-e57d8c6503f8 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=3387d16a-df90-4d19-bd8a-e57d8c6503f8 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.187Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640511",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00273387d16a-df90-4d19-bd8a-e57d8c6503f8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.184Z",
"transactionId": 12024747.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640510",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00273387d16a-df90-4d19-bd8a-e57d8c6503f8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.176Z",
"transactionId": 12024746.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640509",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00273387d16a-df90-4d19-bd8a-e57d8c6503f8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.173Z",
"transactionId": 12024746.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640508",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00273387d16a-df90-4d19-bd8a-e57d8c6503f8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.166Z",
"transactionId": 12024745.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640507",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00273387d16a-df90-4d19-bd8a-e57d8c6503f8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.159Z",
"transactionId": 12024744.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.154Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 3387d16a-df90-4d19-bd8a-e57d8c6503f8",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.153Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=6a423d7c-928c-4494-80bb-32c14c226c40 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=6a423d7c-928c-4494-80bb-32c14c226c40 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=6a423d7c-928c-4494-80bb-32c14c226c40 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.153Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640506",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00276a423d7c-928c-4494-80bb-32c14c226c40\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.150Z",
"transactionId": 12024743.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640505",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00276a423d7c-928c-4494-80bb-32c14c226c40\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.143Z",
"transactionId": 12024742.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640504",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00276a423d7c-928c-4494-80bb-32c14c226c40\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.140Z",
"transactionId": 12024742.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640503",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00276a423d7c-928c-4494-80bb-32c14c226c40\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.132Z",
"transactionId": 12024741.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640502",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00276a423d7c-928c-4494-80bb-32c14c226c40\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.123Z",
"transactionId": 12024740.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 6a423d7c-928c-4494-80bb-32c14c226c40
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 6a423d7c-928c-4494-80bb-32c14c226c40
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 6a423d7c-928c-4494-80bb-32c14c226c40",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.119Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 6a423d7c-928c-4494-80bb-32c14c226c40
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 6a423d7c-928c-4494-80bb-32c14c226c40
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 6a423d7c-928c-4494-80bb-32c14c226c40",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.119Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=8a0d8036-45b8-460b-ac71-bd35bff37801 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=8a0d8036-45b8-460b-ac71-bd35bff37801 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=8a0d8036-45b8-460b-ac71-bd35bff37801 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.118Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640501",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00278a0d8036-45b8-460b-ac71-bd35bff37801\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.115Z",
"transactionId": 12024739.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640500",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00278a0d8036-45b8-460b-ac71-bd35bff37801\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.108Z",
"transactionId": 12024738.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640499",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00278a0d8036-45b8-460b-ac71-bd35bff37801\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.105Z",
"transactionId": 12024738.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640498",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00278a0d8036-45b8-460b-ac71-bd35bff37801\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.097Z",
"transactionId": 12024737.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640497",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00278a0d8036-45b8-460b-ac71-bd35bff37801\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.089Z",
"transactionId": 12024736.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 8a0d8036-45b8-460b-ac71-bd35bff37801
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 8a0d8036-45b8-460b-ac71-bd35bff37801
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 8a0d8036-45b8-460b-ac71-bd35bff37801",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.084Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 8a0d8036-45b8-460b-ac71-bd35bff37801
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 8a0d8036-45b8-460b-ac71-bd35bff37801
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 8a0d8036-45b8-460b-ac71-bd35bff37801",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.084Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=f24b484f-3f68-4812-ab96-6284b043c125 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=f24b484f-3f68-4812-ab96-6284b043c125 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=f24b484f-3f68-4812-ab96-6284b043c125 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.083Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640496",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027f24b484f-3f68-4812-ab96-6284b043c125\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.080Z",
"transactionId": 12024735.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640495",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027f24b484f-3f68-4812-ab96-6284b043c125\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.072Z",
"transactionId": 12024734.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640494",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027f24b484f-3f68-4812-ab96-6284b043c125\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.069Z",
"transactionId": 12024734.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640493",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027f24b484f-3f68-4812-ab96-6284b043c125\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.061Z",
"transactionId": 12024733.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640492",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027f24b484f-3f68-4812-ab96-6284b043c125\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.053Z",
"transactionId": 12024732.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order f24b484f-3f68-4812-ab96-6284b043c125
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order f24b484f-3f68-4812-ab96-6284b043c125
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order f24b484f-3f68-4812-ab96-6284b043c125",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.048Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order f24b484f-3f68-4812-ab96-6284b043c125
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order f24b484f-3f68-4812-ab96-6284b043c125
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order f24b484f-3f68-4812-ab96-6284b043c125",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.047Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=525894b7-a47e-4846-91af-ea867cbcb2e6 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=525894b7-a47e-4846-91af-ea867cbcb2e6 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=525894b7-a47e-4846-91af-ea867cbcb2e6 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.047Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640491",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027525894b7-a47e-4846-91af-ea867cbcb2e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.043Z",
"transactionId": 12024731.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640490",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027525894b7-a47e-4846-91af-ea867cbcb2e6\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.035Z",
"transactionId": 12024730.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640489",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027525894b7-a47e-4846-91af-ea867cbcb2e6\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.031Z",
"transactionId": 12024730.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640488",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027525894b7-a47e-4846-91af-ea867cbcb2e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.023Z",
"transactionId": 12024729.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640487",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027525894b7-a47e-4846-91af-ea867cbcb2e6\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.013Z",
"transactionId": 12024728.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 525894b7-a47e-4846-91af-ea867cbcb2e6
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 525894b7-a47e-4846-91af-ea867cbcb2e6
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 525894b7-a47e-4846-91af-ea867cbcb2e6",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.008Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 525894b7-a47e-4846-91af-ea867cbcb2e6
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 525894b7-a47e-4846-91af-ea867cbcb2e6
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 525894b7-a47e-4846-91af-ea867cbcb2e6",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.008Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=bcf9a730-f810-4636-bd21-2ae55fa54a7c no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:05 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=bcf9a730-f810-4636-bd21-2ae55fa54a7c no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=bcf9a730-f810-4636-bd21-2ae55fa54a7c no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:05.008Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:05 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640486",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027bcf9a730-f810-4636-bd21-2ae55fa54a7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:05.004Z",
"transactionId": 12024727.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640485",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027bcf9a730-f810-4636-bd21-2ae55fa54a7c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.996Z",
"transactionId": 12024726.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640484",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027bcf9a730-f810-4636-bd21-2ae55fa54a7c\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.992Z",
"transactionId": 12024726.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640483",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027bcf9a730-f810-4636-bd21-2ae55fa54a7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.985Z",
"transactionId": 12024725.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640482",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027bcf9a730-f810-4636-bd21-2ae55fa54a7c\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.977Z",
"transactionId": 12024724.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order bcf9a730-f810-4636-bd21-2ae55fa54a7c
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order bcf9a730-f810-4636-bd21-2ae55fa54a7c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order bcf9a730-f810-4636-bd21-2ae55fa54a7c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.972Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order bcf9a730-f810-4636-bd21-2ae55fa54a7c
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order bcf9a730-f810-4636-bd21-2ae55fa54a7c
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order bcf9a730-f810-4636-bd21-2ae55fa54a7c",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.972Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=2494308e-616d-4db0-88ec-f4118d3fc61b no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=2494308e-616d-4db0-88ec-f4118d3fc61b no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=2494308e-616d-4db0-88ec-f4118d3fc61b no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.972Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640481",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u00272494308e-616d-4db0-88ec-f4118d3fc61b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.969Z",
"transactionId": 12024723.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640480",
"pageFaults": 0.0,
"pageHits": 4.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u00272494308e-616d-4db0-88ec-f4118d3fc61b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.961Z",
"transactionId": 12024722.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640479",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u00272494308e-616d-4db0-88ec-f4118d3fc61b\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.958Z",
"transactionId": 12024722.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640478",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u00272494308e-616d-4db0-88ec-f4118d3fc61b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.950Z",
"transactionId": 12024721.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640477",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u00272494308e-616d-4db0-88ec-f4118d3fc61b\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.942Z",
"transactionId": 12024720.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 2494308e-616d-4db0-88ec-f4118d3fc61b
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 2494308e-616d-4db0-88ec-f4118d3fc61b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 2494308e-616d-4db0-88ec-f4118d3fc61b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.937Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 2494308e-616d-4db0-88ec-f4118d3fc61b
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 2494308e-616d-4db0-88ec-f4118d3fc61b
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 2494308e-616d-4db0-88ec-f4118d3fc61b",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.937Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=d08bbcab-5f7f-4b20-ac8e-ec96b07535fd no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=d08bbcab-5f7f-4b20-ac8e-ec96b07535fd no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=d08bbcab-5f7f-4b20-ac8e-ec96b07535fd no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.937Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640476",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027d08bbcab-5f7f-4b20-ac8e-ec96b07535fd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.934Z",
"transactionId": 12024719.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640475",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027d08bbcab-5f7f-4b20-ac8e-ec96b07535fd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.926Z",
"transactionId": 12024718.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640474",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027d08bbcab-5f7f-4b20-ac8e-ec96b07535fd\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.923Z",
"transactionId": 12024718.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640473",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027d08bbcab-5f7f-4b20-ac8e-ec96b07535fd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.915Z",
"transactionId": 12024717.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640472",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027d08bbcab-5f7f-4b20-ac8e-ec96b07535fd\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.907Z",
"transactionId": 12024716.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.902Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order d08bbcab-5f7f-4b20-ac8e-ec96b07535fd",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.902Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=573603bb-7fd6-4ced-b151-bd339bae09ff no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=573603bb-7fd6-4ced-b151-bd339bae09ff no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=573603bb-7fd6-4ced-b151-bd339bae09ff no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.902Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640471",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u0027573603bb-7fd6-4ced-b151-bd339bae09ff\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.899Z",
"transactionId": 12024715.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640470",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u0027573603bb-7fd6-4ced-b151-bd339bae09ff\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.891Z",
"transactionId": 12024714.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640469",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u0027573603bb-7fd6-4ced-b151-bd339bae09ff\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.888Z",
"transactionId": 12024714.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640468",
"pageFaults": 0.0,
"pageHits": 8.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u0027573603bb-7fd6-4ced-b151-bd339bae09ff\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.881Z",
"transactionId": 12024713.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640467",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u0027573603bb-7fd6-4ced-b151-bd339bae09ff\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.873Z",
"transactionId": 12024712.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 573603bb-7fd6-4ced-b151-bd339bae09ff
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 573603bb-7fd6-4ced-b151-bd339bae09ff
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 573603bb-7fd6-4ced-b151-bd339bae09ff",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.868Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [daily_cron] About to process work order 573603bb-7fd6-4ced-b151-bd339bae09ff
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:368
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] About to process work order 573603bb-7fd6-4ced-b151-bd339bae09ff
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:368",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] About to process work order 573603bb-7fd6-4ced-b151-bd339bae09ff",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.867Z",
"version": "unknown"
}2h ago DEBUG virtual-assistant [reminder] wo=82833989-69a3-449d-a4f3-e47e6ae901d8 no reminder policy (NONE) — nothing to do
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:220
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[reminder] wo=82833989-69a3-449d-a4f3-e47e6ae901d8 no reminder policy (NONE) — nothing to do
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:220",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[reminder] wo=82833989-69a3-449d-a4f3-e47e6ae901d8 no reminder policy (NONE) \u2014 nothing to do",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.867Z",
"version": "unknown"
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact) WHERE f.delpending = false ...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})<-[:FACT_TO_WORK_ORDER]-(f:Fact)
WHERE f.delpending = false
RETURN f
ORDER BY f.createdat ASC
raw payload (15 fields)
{
"allocatedBytes": 724.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "23A43F51",
"id": "24640466",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})\u003c-[:FACT_TO_WORK_ORDER]-(f:Fact)\n WHERE f.delpending = false\n RETURN f\n ORDER BY f.createdat ASC\n ",
"queryParameters": "{work_order_id: \u002782833989-69a3-449d-a4f3-e47e6ae901d8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.864Z",
"transactionId": 12024711.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
OPTIONAL MATCH (d:Document)
WHERE d.tildaid IN COALESCE(a.docIds, [])
WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents
// Compute latest AI_MSG draft id per work order for gating REGENERATE
OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]->(ai:WorkOrderActivity)
WHERE ai.activity_type = 'AI_MSG' // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck
WITH w, a, documents,
max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,
collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs
WITH a, documents,
CASE
WHEN size(ai_msgs) = 0 THEN false
ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)
END AS is_latest_draft
RETURN a,
CASE WHEN size(documents) > 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,
is_latest_draft
ORDER BY a.createdat DESC
SKIP $skip
LIMIT $limit
raw payload (15 fields)
{
"allocatedBytes": 3272.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "2A13D7A9",
"id": "24640465",
"pageFaults": 0.0,
"pageHits": 6.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n OPTIONAL MATCH (d:Document)\n WHERE d.tildaid IN COALESCE(a.docIds, [])\n WITH w, a, COLLECT(DISTINCT {tildaid: d.tildaid, fileName: d.fileName, contentType: d.contentType}) as documents\n // Compute latest AI_MSG draft id per work order for gating REGENERATE\n OPTIONAL MATCH (w)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(ai:WorkOrderActivity)\n WHERE ai.activity_type = \u0027AI_MSG\u0027 // any status: a newer SENT/QUEUED must supersede an older FindingsChanged draft, else REGENERATE stays stuck\n WITH w, a, documents,\n max(coalesce(ai.updatedat, ai.createdat)) AS latest_any_ts,\n collect({id: ai.tildaid, ts: coalesce(ai.updatedat, ai.createdat), status: ai.status, ignoreType: ai.ignoreType}) AS ai_msgs\n WITH a, documents,\n CASE\n WHEN size(ai_msgs) = 0 THEN false\n ELSE any(x IN ai_msgs WHERE x.id = a.tildaid AND x.ts = latest_any_ts)\n END AS is_latest_draft\n RETURN a,\n CASE WHEN size(documents) \u003e 0 AND documents[0].tildaid IS NOT NULL THEN documents ELSE [] END AS documents,\n is_latest_draft\n ORDER BY a.createdat DESC\n SKIP $skip\n LIMIT $limit\n ",
"queryParameters": "{limit: 1, statuses: [\u0027DRAFT\u0027], skip: 0, work_order_id: \u002782833989-69a3-449d-a4f3-e47e6ae901d8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.857Z",
"transactionId": 12024710.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity) WHERE 1=1 AND a.activity_type IN...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity)
WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses
RETURN count(a) as total
raw payload (15 fields)
{
"allocatedBytes": 488.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "FA66F084",
"id": "24640464",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "\n MATCH (w:WorkOrder {tildaid: $work_order_id})-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity)\n WHERE 1=1 AND a.activity_type IN $activity_types AND a.status IN $statuses \n RETURN count(a) as total\n ",
"queryParameters": "{statuses: [\u0027DRAFT\u0027], work_order_id: \u002782833989-69a3-449d-a4f3-e47e6ae901d8\u0027, activity_types: [\u0027AI_MSG\u0027]}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.853Z",
"transactionId": 12024710.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (wo:WorkOrder {tildaid: $wo_id}) OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type:...
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (wo:WorkOrder {tildaid: $wo_id})
OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]->(a:WorkOrderActivity {activity_type: 'U_REPLY'})
RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts
raw payload (15 fields)
{
"allocatedBytes": 928.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "4C51129A",
"id": "24640463",
"pageFaults": 0.0,
"pageHits": 9.0,
"planning": 0.0,
"query": "\n MATCH (wo:WorkOrder {tildaid: $wo_id})\n OPTIONAL MATCH (wo)-[:WORK_ORDER_TO_ACTIVITY]-\u003e(a:WorkOrderActivity {activity_type: \u0027U_REPLY\u0027})\n RETURN wo.createdat AS created_at, max(a.timestamp) AS latest_reply_ts\n ",
"queryParameters": "{wo_id: \u002782833989-69a3-449d-a4f3-e47e6ae901d8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.846Z",
"transactionId": 12024709.0,
"waiting": 0.0
}2h ago INFO virtual-assistant MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n
time2026-07-27 00:07:04 UTC
severityINFO
servicevirtual-assistant
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podserver-2-dev-0
query
MATCH (n:WorkOrder {tildaid: $node_id})
RETURN n
raw payload (15 fields)
{
"allocatedBytes": 312.0,
"cpu": 0.0,
"elapsedTimeMs": 0.0,
"executionPlanCacheKeyHash": "E0146DD7",
"id": "24640462",
"pageFaults": 0.0,
"pageHits": 7.0,
"planning": 0.0,
"query": "MATCH (n:WorkOrder {tildaid: $node_id}) RETURN n",
"queryParameters": "{node_id: \u002782833989-69a3-449d-a4f3-e47e6ae901d8\u0027}",
"runtime": "pipelined",
"source": "bolt-session\tbolt\tneo4j-python/5.28.0 Python/3.12.13-final-0 (linux)\t\tclient/10.129.4.156:38312\tserver/10.173.0.8:7687\u003e",
"timestamp": "2026-07-27T00:07:04.838Z",
"transactionId": 12024708.0,
"waiting": 0.0
}2h ago DEBUG virtual-assistant [daily_cron] Starting processing for work order 82833989-69a3-449d-a4f3-e47e6ae901d8
time2026-07-27 00:07:04 UTC
severityDEBUG
servicevirtual-assistant
sourcejobs/daily_work_order_cron.py:135
clustermaster
org02bcadc5-e03b-44d6-842c-db76b3734289
versionunknown
trace6d249c159a52f15d1a7028e269fc4c5d
span1de502596d44e52e
podvirtual-assistant-65b975d66b-l8wpw
message
[daily_cron] Starting processing for work order 82833989-69a3-449d-a4f3-e47e6ae901d8
raw payload (8 fields)
{
"caller": "jobs/daily_work_order_cron.py:135",
"cluster": "master",
"environment": "DEVELOPMENT",
"message": "[daily_cron] Starting processing for work order 82833989-69a3-449d-a4f3-e47e6ae901d8",
"org_alias": "02bcadc5-e03b-44d6-842c-db76b3734289",
"service": "virtual-assistant",
"timestamp": "2026-07-27T00:07:04.833Z",
"version": "unknown"
}
Every log line sharing this trace id, across all services — fetched live from Cloud Logging
(tilda-trial-automation), never stored. Open the Logs Explorer
for the same view with field filters.