vericify 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/tui/panels.js CHANGED
@@ -42,6 +42,10 @@ function activityBadge(sourceKind) {
42
42
  return "pp";
43
43
  }
44
44
 
45
+ function displaySummary(item) {
46
+ return item.collapse_summary ?? item.display_summary ?? item.summary;
47
+ }
48
+
45
49
  export function layoutTierForWidth(width) {
46
50
  if (width < 110) return "narrow";
47
51
  if (width < 170) return "medium";
@@ -63,7 +67,19 @@ function globalActivity(projected) {
63
67
  run_status: run.run.status,
64
68
  }))
65
69
  )
66
- .sort((left, right) => String(right.timestamp).localeCompare(String(left.timestamp)));
70
+ .sort((left, right) => {
71
+ const scoreDelta = (right.score ?? 0) - (left.score ?? 0);
72
+ if (scoreDelta !== 0) return scoreDelta;
73
+ return String(right.timestamp).localeCompare(String(left.timestamp));
74
+ });
75
+ }
76
+
77
+ function visibleActivity(items) {
78
+ return items.filter((item) => item.visible_by_default !== false);
79
+ }
80
+
81
+ function meaningfulActivity(items) {
82
+ return visibleActivity(items).filter((item) => item.signal_class === "primary" || item.signal_class === "secondary");
67
83
  }
68
84
 
69
85
  function latestDelta(run) {
@@ -127,84 +143,59 @@ function buildLaneDetailRows(run, tier) {
127
143
 
128
144
  function buildRunTriageRows(run) {
129
145
  if (!run) return ["No run selected."];
146
+ const signal = run.live_signal ?? {};
130
147
  const rows = [];
131
- const blockedNodes = (run.nodes ?? []).filter((node) => node.status === "blocked");
132
- if (blockedNodes.length) {
133
- rows.push(`P1 blocked nodes ${blockedNodes.length}: ${top(blockedNodes.map((node) => node.title), 2).join(", ")}`);
148
+ rows.push(`P${signal.attention_score >= 140 ? 1 : 2} ${signal.attention_class ?? "observe_only"}: ${signal.attention_reason ?? "No immediate action required."}`);
149
+ rows.push(`Why now: ${signal.why_now ?? "No meaningful movement yet."}`);
150
+ rows.push(`Next: ${signal.expected_next_event ?? "observe_only"} | owner action ${signal.recommended_owner_action ?? "observe_only"}`);
151
+ if (signal.needs_narrative) {
152
+ rows.push(`Narrative required: ${signal.recommended_post_kind} | ${signal.recommended_summary_template}`);
134
153
  }
154
+ const blockedNodes = (run.nodes ?? []).filter((node) => node.status === "blocked");
155
+ if (blockedNodes.length) rows.push(`Blocked nodes ${blockedNodes.length}: ${top(blockedNodes.map((node) => node.title), 2).join(", ")}`);
135
156
  const queuedHandoffs = (run.handoff_timeline?.items ?? []).filter((handoff) => handoff.status === "open" || handoff.status === "blocked");
136
- if (queuedHandoffs.length) {
137
- rows.push(`P1 handoff queue ${queuedHandoffs.length}: ${top(queuedHandoffs.map((handoff) => handoff.handoff_id), 2).join(", ")}`);
138
- }
139
- const staleLanes = (run.lanes ?? [])
140
- .filter((lane) => lane.status !== "completed")
141
- .sort((left, right) => String(left.updated_at).localeCompare(String(right.updated_at)));
142
- if (staleLanes.length) {
143
- const lane = staleLanes[0];
144
- rows.push(`P2 stale lane: ${lane.agent_id} last signaled ${relativeTimeFromNow(lane.updated_at)}`);
145
- }
157
+ if (queuedHandoffs.length) rows.push(`Open handoffs ${queuedHandoffs.length}: ${top(queuedHandoffs.map((handoff) => handoff.handoff_id), 2).join(", ")}`);
146
158
  const blockedNeighbor = (run.similarity?.neighbors ?? []).find((neighbor) => neighbor.outcome === "blocked");
147
159
  if (blockedNeighbor) {
148
- rows.push(`P2 failure echo: compare with ${blockedNeighbor.run_id} at ${(blockedNeighbor.score * 100).toFixed(0)}%`);
160
+ rows.push(`Failure echo: compare with ${blockedNeighbor.run_id} at ${(blockedNeighbor.score * 100).toFixed(0)}%`);
149
161
  }
150
162
  const recoveryNeighbor = (run.similarity?.neighbors ?? []).find((neighbor) => neighbor.outcome === "completed");
151
163
  if (recoveryNeighbor) {
152
- rows.push(`OK recovery path: ${recoveryNeighbor.run_id} reached done from a ${(recoveryNeighbor.score * 100).toFixed(0)}% similar path`);
164
+ rows.push(`Recovery path: ${recoveryNeighbor.run_id} reached done from a ${(recoveryNeighbor.score * 100).toFixed(0)}% similar path`);
153
165
  }
154
166
  return rows.length ? rows : ["No acute risks. Run is flowing."];
155
167
  }
156
168
 
157
169
  function buildGlobalTriageRows(projected, selectedRun) {
158
- const rows = [];
159
- const blockedRuns = (projected.runs ?? []).filter((run) => run.run.status === "blocked");
160
- if (blockedRuns.length) {
161
- rows.push(`P1 blocked runs ${blockedRuns.length}: ${top(blockedRuns.map((run) => run.run.title), 3).join(", ")}`);
162
- }
163
- const openHandoffs = (projected.runs ?? [])
164
- .flatMap((run) => run.handoff_timeline?.items ?? [])
165
- .filter((handoff) => handoff.status === "open" || handoff.status === "blocked");
166
- if (openHandoffs.length) {
167
- rows.push(`P1 handoffs awaiting movement ${openHandoffs.length}: ${top(openHandoffs.map((handoff) => handoff.handoff_id), 3).join(", ")}`);
168
- }
169
- const blockedNodes = (projected.runs ?? []).flatMap((run) => run.nodes ?? []).filter((node) => node.status === "blocked");
170
- if (blockedNodes.length) {
171
- rows.push(`P1 blocked nodes ${blockedNodes.length}: ${top(blockedNodes.map((node) => node.title), 3).join(", ")}`);
172
- }
173
- const staleLanes = (projected.runs ?? [])
174
- .flatMap((run) => (run.lanes ?? []).map((lane) => ({ run, lane })))
175
- .filter(({ lane }) => lane.status !== "completed")
176
- .sort((left, right) => String(left.lane.updated_at).localeCompare(String(right.lane.updated_at)));
177
- if (staleLanes.length) {
178
- const { run, lane } = staleLanes[0];
179
- rows.push(`P2 stale lane ${lane.agent_id} in ${run.run.title}: last signal ${relativeTimeFromNow(lane.updated_at)}`);
180
- }
170
+ const attention = top((projected.attention_items ?? []).filter((item) => item.attention_class !== "observe_only"), 5);
171
+ const rows = attention.map((item) =>
172
+ `P${item.attention_score >= 140 ? 1 : 2} ${compactStatus(item.status)} ${item.title} | ${item.attention_reason} | next ${item.expected_next_event ?? "observe_only"}`
173
+ );
181
174
  const blockedNeighbor = selectedRun?.similarity?.neighbors?.find((neighbor) => neighbor.outcome === "blocked");
182
175
  if (blockedNeighbor) {
183
- rows.push(`P2 compare now: selected run resembles blocked ${blockedNeighbor.run_id} at ${(blockedNeighbor.score * 100).toFixed(0)}%`);
176
+ rows.push(`Compare now: selected run resembles blocked ${blockedNeighbor.run_id} at ${(blockedNeighbor.score * 100).toFixed(0)}%`);
184
177
  }
185
178
  return rows.length ? rows : ["No hot triage. Traffic is flowing."];
186
179
  }
187
180
 
188
181
  function buildSelectedRunRadar(selectedRun) {
189
182
  if (!selectedRun) return ["No selected run."];
183
+ const signal = selectedRun.live_signal ?? {};
190
184
  const checkpoint = latestCheckpoint(selectedRun);
191
185
  const delta = latestDelta(selectedRun);
192
- const nextNode = activeNodeLabels(selectedRun)[0];
193
- const queuedHandoff = (selectedRun.handoff_timeline?.items ?? []).find((handoff) => handoff.status === "open" || handoff.status === "blocked");
194
- const risk = buildRunTriageRows(selectedRun)[0];
195
186
  return [
196
187
  `${compactStatus(selectedRun.run.status)} ${selectedRun.run.title}`,
197
188
  `NOW ${checkpoint ? checkpoint.process_summary.split("\n")[0] : "No checkpoint yet."}`,
198
- `NEXT ${queuedHandoff ? `${queuedHandoff.to_agent} for ${queuedHandoff.node_ref ?? queuedHandoff.handoff_id}` : nextNode ? `advance ${nextNode}` : "await new movement"}`,
199
- `RISK ${risk}`,
189
+ `NEXT ${signal.expected_next_event ?? activeNodeLabels(selectedRun)[0] ?? "await new movement"} | action ${signal.recommended_owner_action ?? "observe_only"}`,
190
+ `PULSE ${signal.why_now ?? "No meaningful movement yet."}`,
200
191
  `PATH ${delta ? delta.layers.join(" / ") : "entry only"} | confidence ${((selectedRun.run_summary?.completion_confidence ?? 0) * 100).toFixed(0)}%`,
201
192
  ];
202
193
  }
203
194
 
204
195
  function buildTrafficRows(projected, tier) {
205
196
  const limit = tier === "narrow" ? 6 : 10;
206
- return top(globalActivity(projected), limit).map((item) =>
207
- `${formatTimestamp(item.timestamp)} [${activityBadge(item.source_kind)}] ${urgencyBadge(item.status)} ${item.run_title} | ${item.actor_id} | ${item.summary}`
197
+ return top(meaningfulActivity(globalActivity(projected)), limit).map((item) =>
198
+ `${formatTimestamp(item.timestamp)} [${activityBadge(item.source_kind)}] ${urgencyBadge(item.status)} ${item.run_title} | ${item.actor_id} | ${displaySummary(item)}`
208
199
  );
209
200
  }
210
201
 
@@ -230,6 +221,37 @@ function historyCueRows(projected, selectedRun) {
230
221
  ];
231
222
  }
232
223
 
224
+ function buildPresenceRows(run) {
225
+ if (!run) return ["No run selected."];
226
+ const signal = run.live_signal ?? {};
227
+ const captureCommand = signal.recommended_post_kind
228
+ ? `/ post --run-id ${run.run.run_id} --agent-id ${signal.current_actor_id ?? "operator"} --kind ${signal.recommended_post_kind} --summary "${signal.recommended_summary_template}"`
229
+ : undefined;
230
+ return [
231
+ `Owner ${signal.current_actor_id ?? "-"} | waiting ${signal.waiting_on_actor_id ?? "-"} | source ${signal.presence_source ?? "-"}`,
232
+ `Freshness ${signal.freshness_class ?? "-"} | last response ${signal.last_response_at ? relativeTimeFromNow(signal.last_response_at) : "-"}`,
233
+ `Next ${signal.expected_next_event ?? "observe_only"} | late ${signal.overdue_at ? relativeTimeFromNow(signal.overdue_at) : "-"} | confidence ${signal.signal_confidence ? `${(signal.signal_confidence * 100).toFixed(0)}%` : "-"}`,
234
+ captureCommand ? `Capture ${captureCommand}` : `Action ${signal.recommended_owner_action ?? "observe_only"}`,
235
+ ];
236
+ }
237
+
238
+ function buildQueueRows(projected) {
239
+ const queue = (projected.runs ?? [])
240
+ .flatMap((run) => (run.handoff_timeline?.items ?? []).map((handoff) => ({ run, handoff })))
241
+ .filter(({ handoff }) => handoff.status === "open" || handoff.status === "accepted" || handoff.status === "blocked")
242
+ .sort((left, right) => String(right.handoff.updated_at ?? right.handoff.created_at).localeCompare(String(left.handoff.updated_at ?? left.handoff.created_at)));
243
+ return top(queue, 6).map(({ run, handoff }) =>
244
+ `${urgencyBadge(handoff.status)} ${handoff.status} ${handoff.from_agent} -> ${handoff.to_agent} | ${run.run.title} | ${handoff.node_ref ?? handoff.handoff_id}`
245
+ );
246
+ }
247
+
248
+ function buildQuietContextRows(projected, selectedRun) {
249
+ return [
250
+ ...compareCueRows(selectedRun),
251
+ ...historyCueRows(projected, selectedRun),
252
+ ];
253
+ }
254
+
233
255
  function buildCompareSummaryRows(report) {
234
256
  if (!report) return ["No comparable run available."];
235
257
  return [
@@ -291,8 +313,8 @@ function buildRecoveryCueRows(report) {
291
313
 
292
314
  function buildHistoryTimelineRows(projected, selectedRun, tier) {
293
315
  const activity = selectedRun
294
- ? top([...(selectedRun.activity_items ?? [])].sort((left, right) => String(right.timestamp).localeCompare(String(left.timestamp))), tier === "narrow" ? 6 : 8)
295
- : top(globalActivity(projected), tier === "narrow" ? 6 : 8);
316
+ ? top(visibleActivity([...(selectedRun.activity_items ?? [])].sort((left, right) => String(right.timestamp).localeCompare(String(left.timestamp)))), tier === "narrow" ? 6 : 8)
317
+ : top(visibleActivity(globalActivity(projected)), tier === "narrow" ? 6 : 8);
296
318
  return activity.map((item) =>
297
319
  `${formatTimestamp(item.timestamp)} [${activityBadge(item.source_kind)}] ${item.actor_id} | ${item.summary}`
298
320
  );
@@ -326,16 +348,18 @@ export function buildHubMetrics(projected, options = {}) {
326
348
  const lanes = runs.flatMap((run) => run.lanes ?? []);
327
349
  const nodes = runs.flatMap((run) => run.nodes ?? []);
328
350
  const handoffs = runs.flatMap((run) => run.handoff_timeline?.items ?? []);
329
- const activityCount = runs.reduce((sum, run) => sum + (run.activity_items?.length ?? 0), 0);
351
+ const activityCount = runs.reduce((sum, run) => sum + meaningfulActivity(run.activity_items ?? []).length, 0);
330
352
  const runningRuns = runs.filter((run) => run.run.status === "running").length;
331
353
  const blockedRuns = runs.filter((run) => run.run.status === "blocked").length;
354
+ const staleRuns = runs.filter((run) => ["stale", "stale_acknowledged", "archival"].includes(run.live_signal?.freshness_class)).length;
355
+ const narrativeGaps = runs.filter((run) => run.live_signal?.needs_narrative).length;
332
356
  const liveLanes = lanes.filter((lane) => lane.status === "running").length;
333
357
  const blockedNodes = nodes.filter((node) => node.status === "blocked").length;
334
358
  const openHandoffs = handoffs.filter((handoff) => handoff.status === "open" || handoff.status === "blocked").length;
335
359
  if (tier === "narrow") {
336
- return `Runs ${runs.length} | Live ${runningRuns} | Blkd ${blockedRuns} | Lanes ${liveLanes}/${lanes.length} | HOs ${openHandoffs} | Nodes ${blockedNodes} | Act ${activityCount}`;
360
+ return `Runs ${runs.length} | Live ${runningRuns} | Blkd ${blockedRuns} | Stale ${staleRuns} | Notes ${narrativeGaps} | HOs ${openHandoffs} | Act ${activityCount}`;
337
361
  }
338
- return `Runs ${runs.length} | Live ${runningRuns} | Blocked ${blockedRuns} | Lanes ${lanes.length}/${liveLanes} live | Handoffs ${openHandoffs} open | Nodes ${blockedNodes} blocked | Activity ${activityCount}`;
362
+ return `Runs ${runs.length} | Live ${runningRuns} | Blocked ${blockedRuns} | Stale ${staleRuns} | Narrative ${narrativeGaps} | Handoffs ${openHandoffs} open | Nodes ${blockedNodes} blocked | Activity ${activityCount}`;
339
363
  }
340
364
 
341
365
  export function buildRunBoardSection(projected, selectedRun, options = {}) {
@@ -343,7 +367,7 @@ export function buildRunBoardSection(projected, selectedRun, options = {}) {
343
367
  const rows = top(projected.run_summaries ?? [], tier === "narrow" ? 6 : 8).map((summary) => {
344
368
  const isSelected = summary.run_id === selectedRun?.run?.run_id ? ">" : " ";
345
369
  const node = summary.current_node_labels?.[0] ?? "steady";
346
- return `${isSelected} ${urgencyBadge(summary.status)} ${compactStatus(summary.status)} ${summary.title} | br ${summary.branch_count} | ln ${summary.lane_count} | node ${node} | ${relativeTimeFromNow(summary.updated_at)}`;
370
+ return `${isSelected} ${urgencyBadge(summary.status)} ${compactStatus(summary.status)} ${summary.title} | ${summary.attention_class ?? "observe_only"} | ${summary.freshness_class ?? "-"} | node ${node} | ${relativeTimeFromNow(summary.updated_at)}`;
347
371
  });
348
372
  return {
349
373
  title: "Run Board",
@@ -352,14 +376,88 @@ export function buildRunBoardSection(projected, selectedRun, options = {}) {
352
376
  };
353
377
  }
354
378
 
379
+ const PEER_ADAPTER_IDS = new Set(["codex", "claude-code", "cursor", "vscode-copilot-chat", "antigravity"]);
380
+ const STATUS_GLYPH = { ready: "✓", attached: "●", detected: "◉", manual: "○" };
381
+
382
+ function relPath(absPath, root) {
383
+ return absPath.startsWith(root + "/") ? absPath.slice(root.length + 1) : absPath;
384
+ }
385
+
386
+ function adapterStatusRow(profile, workspaceRoot) {
387
+ const glyph = STATUS_GLYPH[profile.detection_status] ?? "?";
388
+ const status = profile.detection_status.padEnd(8);
389
+ const label = (profile.label_override ?? profile.label).padEnd(22);
390
+ const cat = `(${profile.category})`.padEnd(10);
391
+ let detail = "";
392
+ if (profile.detection_status === "manual") {
393
+ detail = `→ vericify attach --adapter ${profile.adapter_id}`;
394
+ } else {
395
+ const paths = profile.detected_paths.slice(0, 3).map((p) => relPath(p, workspaceRoot));
396
+ detail = paths.join(" ");
397
+ if (profile.session_id) detail += ` session:${profile.session_id}`;
398
+ }
399
+ return `${glyph} ${status} ${label} ${cat} ${detail}`;
400
+ }
401
+
402
+ function buildPeerObservationRows(projected, tier) {
403
+ const limit = tier === "narrow" ? 4 : 6;
404
+ const items = (projected.runs ?? [])
405
+ .flatMap((run) => run.activity_items ?? [])
406
+ .filter((item) =>
407
+ item.label === "peer_observation" ||
408
+ (PEER_ADAPTER_IDS.has(item.actor_id) && item.source_kind === "status_event")
409
+ )
410
+ .sort((a, b) => String(b.timestamp).localeCompare(String(a.timestamp)));
411
+ return top(items, limit).map((item) =>
412
+ `${formatTimestamp(item.timestamp)} [${item.actor_id}] ${item.summary}`
413
+ );
414
+ }
415
+
416
+ function buildAttachGuideRows(profiles) {
417
+ const manual = profiles.filter((p) => p.detection_status === "manual" && p.category === "peer");
418
+ if (!manual.length) return ["All peer adapters detected or attached."];
419
+ return [
420
+ "Activate with: vericify attach --adapter <id>",
421
+ ...manual.map((p) => ` ○ ${p.adapter_id.padEnd(22)} ${p.label}`),
422
+ ];
423
+ }
424
+
425
+ export function buildAdaptersSections(projected, options = {}) {
426
+ const { tier = "wide" } = options;
427
+ const profiles = projected.adapter_profiles ?? [];
428
+ const workspaceRoot = projected.workspace?.root_path ?? "";
429
+ const adapterRows = profiles.map((p) => adapterStatusRow(p, workspaceRoot));
430
+ const observationRows = buildPeerObservationRows(projected, tier);
431
+ const guideRows = buildAttachGuideRows(profiles);
432
+ return [
433
+ {
434
+ title: "Adapter Sources",
435
+ rows: adapterRows.length ? adapterRows : ["No adapters resolved."],
436
+ tone: "STATUS",
437
+ fullWidth: true,
438
+ },
439
+ {
440
+ title: "Peer Observations",
441
+ rows: observationRows.length ? observationRows : ["No peer capture data yet."],
442
+ tone: "TRACE",
443
+ },
444
+ {
445
+ title: "Attach Guide",
446
+ rows: guideRows,
447
+ tone: "WAIT",
448
+ },
449
+ ];
450
+ }
451
+
355
452
  export function buildHubSections(projected, selectedRun, options = {}) {
356
453
  const { tier = "wide" } = options;
357
454
  return [
358
- { title: "Triage Shelf", rows: buildGlobalTriageRows(projected, selectedRun), tone: "HOT" },
359
- { title: "Selected Run Radar", rows: buildSelectedRunRadar(selectedRun), tone: selectedRun?.run?.status === "blocked" ? "HOT" : "LIVE" },
360
- { title: "Network Traffic", rows: buildTrafficRows(projected, tier), tone: "FLOW", fullWidth: tier === "wide" },
361
- { title: "Compare Cue", rows: compareCueRows(selectedRun), tone: "DIFF" },
362
- { title: "History Cue", rows: historyCueRows(projected, selectedRun), tone: "TRACE" },
455
+ { title: "Pulse", rows: buildSelectedRunRadar(selectedRun ?? projected.runs?.[0]), tone: selectedRun?.run?.status === "blocked" ? "HOT" : "LIVE" },
456
+ { title: "Attention", rows: buildGlobalTriageRows(projected, selectedRun), tone: "HOT" },
457
+ { title: "Latest Meaningful Change", rows: buildTrafficRows(projected, tier), tone: "FLOW", fullWidth: tier === "wide" },
458
+ { title: "Presence", rows: buildPresenceRows(selectedRun ?? projected.runs?.[0]), tone: "STATUS" },
459
+ { title: "Queue", rows: buildQueueRows(projected), tone: "QUEUE" },
460
+ { title: "Quiet Context", rows: buildQuietContextRows(projected, selectedRun), tone: "TRACE", fullWidth: tier === "wide" },
363
461
  ];
364
462
  }
365
463
 
@@ -378,8 +476,8 @@ export function buildInspectSections(run, options = {}) {
378
476
  const delta = index > 0 ? run.deltas?.find((candidate) => candidate.to_checkpoint_id === checkpoint.checkpoint_id) : undefined;
379
477
  return `${formatTimestamp(checkpoint.timestamp)} | ${checkpoint.process_summary.split("\n")[0]} | ${delta ? delta.layers.join("/") : "entry"}`;
380
478
  });
381
- const activityRows = (run.activity_items ?? []).slice(-12).map((item) =>
382
- `${formatTimestamp(item.timestamp)} [${activityBadge(item.source_kind)}] ${urgencyBadge(item.status)} ${item.actor_id} | ${item.summary}`
479
+ const activityRows = meaningfulActivity(run.activity_items ?? []).slice(-12).map((item) =>
480
+ `${formatTimestamp(item.timestamp)} [${activityBadge(item.source_kind)}] ${urgencyBadge(item.status)} ${item.actor_id} | ${displaySummary(item)}`
383
481
  );
384
482
  const similarityRows = (run.similarity?.neighbors ?? []).slice(0, 4).map((neighbor) => summarizeNeighbor(run, neighbor));
385
483
 
@@ -390,11 +488,13 @@ export function buildInspectSections(run, options = {}) {
390
488
  `${compactStatus(run.run.status)} ${run.run.title}`,
391
489
  `Objective: ${run.run.objective ?? "-"}`,
392
490
  `Updated: ${formatTimestamp(run.run.updated_at)} (${relativeTimeFromNow(run.run.updated_at)})`,
491
+ `Attention: ${run.live_signal?.attention_class ?? "observe_only"} | freshness ${run.live_signal?.freshness_class ?? "-"}`,
393
492
  ],
394
493
  tone: run.run.status === "blocked" ? "HOT" : "LIVE",
395
494
  },
396
- { title: "Lane Skyline", rows: buildLaneSkylineRows(run, tier), tone: "FLOW" },
397
- { title: "Triage Shelf", rows: buildRunTriageRows(run), tone: "HOT" },
495
+ { title: "Pulse", rows: buildSelectedRunRadar(run), tone: "FLOW" },
496
+ { title: "Attention", rows: buildRunTriageRows(run), tone: "HOT" },
497
+ { title: "Presence", rows: buildPresenceRows(run), tone: "STATUS" },
398
498
  { title: "Handoff Queue", rows: handoffRows.length ? handoffRows : ["No queued handoffs."], tone: "QUEUE" },
399
499
  { title: "Branch Divergence", rows: branchRows(run), tone: "FORK" },
400
500
  { title: "Lane Detail", rows: buildLaneDetailRows(run, tier), tone: "FLOW" },
@@ -54,6 +54,7 @@ export function createRuntimeRecorder({
54
54
  view,
55
55
  source,
56
56
  interactive: true,
57
+ observer_telemetry: true,
57
58
  ...payload,
58
59
  },
59
60
  });
@@ -67,6 +68,7 @@ export function createRuntimeRecorder({
67
68
  view,
68
69
  source,
69
70
  interactive: true,
71
+ observer_telemetry: true,
70
72
  ...metadata,
71
73
  },
72
74
  });