agentfootprint-lens 0.70.0 → 0.71.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.
Files changed (71) hide show
  1. package/README.md +29 -1
  2. package/dist/{Lens-BTYtIG2P.d.cts → Lens-DaElQv4z.d.cts} +3 -3
  3. package/dist/{Lens-D9v2O1_0.d.ts → Lens-lTf_UA0N.d.ts} +3 -3
  4. package/dist/{chunk-ORT5OUHS.js → chunk-CXTWT2L6.js} +5 -5
  5. package/dist/{chunk-AUEVEPXO.js → chunk-EMAZMZKI.js} +8 -3
  6. package/dist/chunk-EMAZMZKI.js.map +1 -0
  7. package/dist/{chunk-62D2ENRC.js → chunk-IBSMUKPU.js} +2 -2
  8. package/dist/{chunk-T7KPNGF4.js → chunk-JSGDVUYF.js} +4 -4
  9. package/dist/{chunk-5SVI4YZI.js → chunk-K6DNVTYE.js} +57 -40
  10. package/dist/chunk-K6DNVTYE.js.map +1 -0
  11. package/dist/{chunk-WM5QJ6TD.js → chunk-OM2CDZJS.js} +8 -9
  12. package/dist/chunk-OM2CDZJS.js.map +1 -0
  13. package/dist/{chunk-IPCNNYQU.js → chunk-PFGNLVLG.js} +2 -2
  14. package/dist/{chunk-LDO7Y76D.js → chunk-R6FVUU2I.js} +2 -2
  15. package/dist/{chunk-XK74JIRU.js → chunk-SGRWGP6H.js} +2 -2
  16. package/dist/{chunk-H6WJWHGM.js → chunk-SYH5K5CL.js} +21 -2
  17. package/dist/chunk-SYH5K5CL.js.map +1 -0
  18. package/dist/{chunk-BFAI2IPA.js → chunk-WIQVUP5C.js} +14 -1
  19. package/dist/chunk-WIQVUP5C.js.map +1 -0
  20. package/dist/context.cjs +80 -37
  21. package/dist/context.cjs.map +1 -1
  22. package/dist/context.d.cts +4 -4
  23. package/dist/context.d.ts +4 -4
  24. package/dist/context.js +5 -5
  25. package/dist/{contextAt-DMEApZ0a.d.ts → contextAt-CwRRDQYD.d.ts} +39 -2
  26. package/dist/{contextAt-Bh_RvlCh.d.cts → contextAt-Cy5xTLup.d.cts} +39 -2
  27. package/dist/core.cjs +37 -1
  28. package/dist/core.cjs.map +1 -1
  29. package/dist/core.d.cts +67 -9
  30. package/dist/core.d.ts +67 -9
  31. package/dist/core.js +13 -5
  32. package/dist/{index-DDIswcOd.d.cts → index-CJhcdeTi.d.cts} +10 -4
  33. package/dist/{index-H69wNeA6.d.ts → index-fj3hsuFi.d.ts} +10 -4
  34. package/dist/index.cjs +89 -40
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.d.cts +14 -14
  37. package/dist/index.d.ts +14 -14
  38. package/dist/index.js +19 -11
  39. package/dist/index.js.map +1 -1
  40. package/dist/{lensCursorPort-CNGtHIoW.d.ts → lensCursorPort-Djm3W7K1.d.cts} +9 -0
  41. package/dist/{lensCursorPort-CNGtHIoW.d.cts → lensCursorPort-Djm3W7K1.d.ts} +9 -0
  42. package/dist/{selectSkillFrameContext-CyQaoeAU.d.ts → selectSkillFrameContext-Bs8JINIi.d.ts} +1 -1
  43. package/dist/{selectSkillFrameContext-T8wfkmfX.d.cts → selectSkillFrameContext-xPr-gzFp.d.cts} +1 -1
  44. package/dist/skillgraph.cjs +8 -0
  45. package/dist/skillgraph.cjs.map +1 -1
  46. package/dist/skillgraph.d.cts +6 -6
  47. package/dist/skillgraph.d.ts +6 -6
  48. package/dist/skillgraph.js +5 -5
  49. package/dist/{stepForRuntimeStageId-Bqk3o7YJ.d.cts → stepForRuntimeStageId-CPb4EI74.d.cts} +1 -1
  50. package/dist/{stepForRuntimeStageId-CDFphp7F.d.ts → stepForRuntimeStageId-zJ6H0gU1.d.ts} +1 -1
  51. package/dist/{tagAxis-C8Qzb1si.d.cts → tagAxis-CijjA_6P.d.cts} +1 -1
  52. package/dist/{tagAxis-C-nC2oeB.d.ts → tagAxis-ClhV50a2.d.ts} +1 -1
  53. package/dist/{useSharedCursor-CYo-KHyo.d.ts → useSharedCursor-CdXdsXvD.d.ts} +1 -1
  54. package/dist/{useSharedCursor-CXM4Qvfh.d.cts → useSharedCursor-lgpWw94t.d.cts} +1 -1
  55. package/dist/why.cjs +15 -4
  56. package/dist/why.cjs.map +1 -1
  57. package/dist/why.d.cts +7 -7
  58. package/dist/why.d.ts +7 -7
  59. package/dist/why.js +7 -7
  60. package/package.json +2 -2
  61. package/dist/chunk-5SVI4YZI.js.map +0 -1
  62. package/dist/chunk-AUEVEPXO.js.map +0 -1
  63. package/dist/chunk-BFAI2IPA.js.map +0 -1
  64. package/dist/chunk-H6WJWHGM.js.map +0 -1
  65. package/dist/chunk-WM5QJ6TD.js.map +0 -1
  66. /package/dist/{chunk-ORT5OUHS.js.map → chunk-CXTWT2L6.js.map} +0 -0
  67. /package/dist/{chunk-62D2ENRC.js.map → chunk-IBSMUKPU.js.map} +0 -0
  68. /package/dist/{chunk-T7KPNGF4.js.map → chunk-JSGDVUYF.js.map} +0 -0
  69. /package/dist/{chunk-IPCNNYQU.js.map → chunk-PFGNLVLG.js.map} +0 -0
  70. /package/dist/{chunk-LDO7Y76D.js.map → chunk-R6FVUU2I.js.map} +0 -0
  71. /package/dist/{chunk-XK74JIRU.js.map → chunk-SGRWGP6H.js.map} +0 -0
package/README.md CHANGED
@@ -1159,7 +1159,35 @@ they settled — the reading's own `open` choice is still printed as filed),
1159
1159
  the values the library **derived from a reading**, each call's **source
1160
1160
  clock** zone, and the `period` row's result checks — **differs from asked**
1161
1161
  (against, the range compared, what was read, `missing`, `extra`), `shifted`
1162
- by how much, and beyond retention.
1162
+ by how much, and beyond retention. Each call reads in the order it happened
1163
+ (0.71.0): **asked** → **sent** (the row's own `sent` on a widened fill; on
1164
+ every other dispatched call the row's `asked`, which the library's row
1165
+ defines as the sent range — `as asked`; a fill rounded outward says so and
1166
+ names no range the record did not keep) → **read** (the period the result
1167
+ declared, or `undeclared`) → the **difference** the `period` row filed.
1168
+ `sentOf(window)` and `readOf(call)` (`agentfootprint-lens/core`) are the same
1169
+ reading for a host's own view.
1170
+
1171
+ **At a stop, hand it the record AT that stop.** A host that moves a cursor
1172
+ folds the record through the stop's `foldCommitIdx`, not its `commitIdx`
1173
+ (0.71.0): "Run · start" shares its commit index with the first stage but
1174
+ stands BEFORE it — on a resumed leg, before the paused call's stand-in bound
1175
+ the answer and dispatched — so it folds the base (`-1`):
1176
+
1177
+ ```ts
1178
+ import { contextAt, foldCursorOf } from 'agentfootprint-lens/core';
1179
+
1180
+ const at = shared.forAxis('group').at; // any LensCursor reading
1181
+ const ctx = contextAt(snapshot, foldCursorOf(at)); // NOT { commitIdx: at.commitIdx }
1182
+ const rows = ctx.keys.find((k) => k.path === 'findingsLedger')?.value;
1183
+ const coverage = ctx.keys.find((k) => k.path === 'coverageDeclared')?.value;
1184
+ <TimeView rows={rows} coverage={coverage} />
1185
+ ```
1186
+
1187
+ On a resumed leg the rows filed before the pause (the clock, the reading, the
1188
+ call's window waiting on the ask) are part of the leg's base — the state at
1189
+ the pause — and are in the record at every stop of it, "Run · start"
1190
+ included; what the leg itself files appears at the stop that filed it.
1163
1191
 
1164
1192
  **The law: never compute a reason.** The standing section lists a reason
1165
1193
  only when the assessment you pass names it; the ledger is read only to
@@ -3,11 +3,11 @@ import { ToolChoiceCall, ToolChoiceSummary, AnswerAccount, AnswerAccountShownLea
3
3
  import * as agentfootprint from 'agentfootprint';
4
4
  import { CommentaryTemplates } from 'agentfootprint';
5
5
  import React__default, { Ref } from 'react';
6
- import { h as NavigationResult, C as CursorPosition, m as LensRecorder, a as LensCursor } from './lensCursorPort-CNGtHIoW.cjs';
7
- import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-C8Qzb1si.cjs';
6
+ import { h as NavigationResult, C as CursorPosition, m as LensRecorder, a as LensCursor } from './lensCursorPort-Djm3W7K1.cjs';
7
+ import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-CijjA_6P.cjs';
8
8
  import { NodeTypes } from '@xyflow/react';
9
9
  import { TraceGraph, TraceFlowLayout, RuntimeOverlay } from 'footprint-explainable-ui/flowchart';
10
- import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-CXM4Qvfh.cjs';
10
+ import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-lgpWw94t.cjs';
11
11
 
12
12
  /**
13
13
  * LensFlow — the canonical Lens chart renderer.
@@ -3,11 +3,11 @@ import { ToolChoiceCall, ToolChoiceSummary, AnswerAccount, AnswerAccountShownLea
3
3
  import * as agentfootprint from 'agentfootprint';
4
4
  import { CommentaryTemplates } from 'agentfootprint';
5
5
  import React__default, { Ref } from 'react';
6
- import { h as NavigationResult, C as CursorPosition, m as LensRecorder, a as LensCursor } from './lensCursorPort-CNGtHIoW.js';
7
- import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-C-nC2oeB.js';
6
+ import { h as NavigationResult, C as CursorPosition, m as LensRecorder, a as LensCursor } from './lensCursorPort-Djm3W7K1.js';
7
+ import { C as ChartGroupHighlight, H as Humanizer, b as BookmarkStore } from './tagAxis-ClhV50a2.js';
8
8
  import { NodeTypes } from '@xyflow/react';
9
9
  import { TraceGraph, TraceFlowLayout, RuntimeOverlay } from 'footprint-explainable-ui/flowchart';
10
- import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-CYo-KHyo.js';
10
+ import { L as LensCursorAt, S as SharedCursor } from './useSharedCursor-CdXdsXvD.js';
11
11
 
12
12
  /**
13
13
  * LensFlow — the canonical Lens chart renderer.
@@ -4,7 +4,7 @@ import {
4
4
  describeReceived,
5
5
  refusalDestinationFor,
6
6
  useNarrowRow
7
- } from "./chunk-LDO7Y76D.js";
7
+ } from "./chunk-R6FVUU2I.js";
8
8
  import {
9
9
  selectSkillBeatAt,
10
10
  selectSkillBeats,
@@ -12,14 +12,14 @@ import {
12
12
  selectSkillRoute,
13
13
  selectSkillTopology,
14
14
  stepForRuntimeStageId
15
- } from "./chunk-62D2ENRC.js";
15
+ } from "./chunk-IBSMUKPU.js";
16
16
  import {
17
17
  T,
18
18
  TimeTravel
19
- } from "./chunk-XK74JIRU.js";
19
+ } from "./chunk-SGRWGP6H.js";
20
20
  import {
21
21
  scrubAxisFor
22
- } from "./chunk-BFAI2IPA.js";
22
+ } from "./chunk-WIQVUP5C.js";
23
23
 
24
24
  // src/react/skillGraphFlowLayout.ts
25
25
  import dagre from "dagre";
@@ -1513,4 +1513,4 @@ export {
1513
1513
  SKILL_GRAPH_READS,
1514
1514
  SkillGraphDebugger
1515
1515
  };
1516
- //# sourceMappingURL=chunk-ORT5OUHS.js.map
1516
+ //# sourceMappingURL=chunk-CXTWT2L6.js.map
@@ -11,7 +11,10 @@ import {
11
11
  } from "./chunk-XEAZRBOH.js";
12
12
  import {
13
13
  T
14
- } from "./chunk-XK74JIRU.js";
14
+ } from "./chunk-SGRWGP6H.js";
15
+ import {
16
+ foldCursorOf
17
+ } from "./chunk-WIQVUP5C.js";
15
18
 
16
19
  // src/react/components/ServedBadge.tsx
17
20
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -702,7 +705,9 @@ var SECTION_FIELDS = Object.freeze({
702
705
  function cursorAnchor(props) {
703
706
  return {
704
707
  runtimeStageId: props.cursorRuntimeStageId ?? props.cursor?.at.runtimeStageId ?? "",
705
- commitIdx: props.commitIdx ?? props.cursor?.at.commitIdx ?? -1
708
+ // A cursor's reading folds through the last commit its stop HELD (`foldAt.ts`): `-1` at
709
+ // Run · start, the same anchor `<Lens>` hands this tab as `commitIdx`.
710
+ commitIdx: props.commitIdx ?? (props.cursor !== void 0 ? foldCursorOf(props.cursor.at).commitIdx : -1)
706
711
  };
707
712
  }
708
713
  var snapshotOf = snapshotOfRunner;
@@ -1579,4 +1584,4 @@ export {
1579
1584
  collapsedTicketOf,
1580
1585
  ServedTab
1581
1586
  };
1582
- //# sourceMappingURL=chunk-AUEVEPXO.js.map
1587
+ //# sourceMappingURL=chunk-EMAZMZKI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/components/ServedBadge.tsx","../src/react/components/ServedGraph.tsx","../src/react/components/ServedTab.tsx"],"sourcesContent":["/**\n * <Badge> — what the hash check established for one row, on screen.\n *\n * ONE OWNER, TWO VIEWS. The Served tab's list and the Served graph draw the\n * same four verdicts, so the badge, its four words and its colours live here\n * and nowhere else: a badge softened in one view and not the other would be\n * two different accounts of one record. `ServedTab` re-exports it, and its\n * `LABELS` take the four words from {@link BADGE_LABELS} rather than repeating\n * them.\n *\n * A badge is NEVER softened for a prettier picture. `'damaged'` draws Damaged,\n * whatever it sits beside.\n */\n\nimport React from 'react';\n\nimport type { FieldCheck, ServedFieldStatus } from '../../core/served/index.js';\nimport { T } from '../theme/index.js';\n\n/** The four verdicts, and the two words for the hashes they were decided by. */\nexport const BADGE_LABELS = Object.freeze({\n verified: 'Verified',\n reconstructed: 'Reconstructed',\n damaged: 'Damaged',\n notOnRecord: 'Not on record',\n onReceipt: 'on receipt',\n receipt: 'receipt',\n rebuilt: 'rebuilt',\n} as const);\n\nexport function statusLabel(status: ServedFieldStatus): string {\n switch (status) {\n case 'verified':\n return BADGE_LABELS.verified;\n case 'reconstructed':\n return BADGE_LABELS.reconstructed;\n case 'damaged':\n return BADGE_LABELS.damaged;\n default:\n return BADGE_LABELS.notOnRecord;\n }\n}\n\nexport function statusColor(status: ServedFieldStatus): string {\n switch (status) {\n case 'verified':\n return T.success;\n case 'damaged':\n return T.error;\n default:\n return T.textMuted;\n }\n}\n\n/**\n * The status badge. Title carries the two hashes it was decided by — data.\n * When the two DISAGREE they are also printed inline, whatever the status: a\n * disagreement an excusing gap turned into \"reconstructed\" is still a fact the\n * reader wants on screen, not only in a tooltip.\n */\nexport function Badge({ check }: { check: FieldCheck }): React.ReactElement {\n const title = [\n check.onReceipt !== undefined ? `${BADGE_LABELS.receipt} ${check.onReceipt}` : undefined,\n check.rebuilt !== undefined ? `${BADGE_LABELS.rebuilt} ${check.rebuilt}` : undefined,\n ]\n .filter((s) => s !== undefined)\n .join(' · ');\n const disagree =\n check.onReceipt !== undefined &&\n check.rebuilt !== undefined &&\n check.onReceipt !== check.rebuilt;\n return (\n <span style={{ display: 'inline-flex', gap: 6, alignItems: 'center' }}>\n {disagree && (\n <span style={hashesStyle} data-testid=\"served-hashes\">\n {BADGE_LABELS.receipt} {check.onReceipt} · {BADGE_LABELS.rebuilt} {check.rebuilt}\n </span>\n )}\n <span\n style={badgeStyle(statusColor(check.status), check.status === 'not-on-record')}\n data-testid=\"served-badge\"\n data-status={check.status}\n {...(title !== '' ? { title } : {})}\n >\n {statusLabel(check.status)}\n </span>\n </span>\n );\n}\n\nexport function badgeStyle(color: string, dashed: boolean): React.CSSProperties {\n return {\n padding: '0 6px',\n borderRadius: 999,\n border: `1px ${dashed ? 'dashed' : 'solid'} ${color}`,\n color,\n fontSize: 10,\n fontWeight: 600,\n letterSpacing: '0.02em',\n whiteSpace: 'nowrap',\n };\n}\n\nconst hashesStyle: React.CSSProperties = {\n fontFamily: T.fontMono,\n fontSize: 10.5,\n color: T.textMuted,\n};\n","/**\n * <ServedGraph> — one call as a picture: HELD · SERVED · WITHHELD.\n *\n * The Served tab's list is right for checking one row and wrong for seeing\n * that the system string was assembled from a base plus one skill body plus\n * two injections while three tools were withheld. That is one picture, and\n * this is it — the SAME row the list draws (`servedGraphAt`), arranged as\n * three bands and the edges between them. It holds no position: the tab hands\n * it a graph the ONE cursor already resolved.\n *\n * THE LAWS IT KEEPS (each is a test in `test/served/`):\n * 1. ONE CURSOR. Props in, nothing out. No state of its own at all.\n * 2. NO SENTENCE OF THE LENS'S OWN. Every explanation on screen is the\n * library's own string — a gap's `why`, a request-only line's `reason`,\n * a withheld-list value, a receipt field's name — printed verbatim.\n * The strings this file owns are LABELS ({@link GRAPH_LABELS}), and\n * `test/served/no-own-claims.test.ts` walks it to keep it that way.\n * 3. A BADGE IS NEVER SOFTENED. The badge is `ServedBadge.tsx`'s, shared\n * with the list: a Damaged row draws Damaged here too.\n * 4. ABSENT IS NOT NONE. A slot the rebuild produced nothing for draws its\n * gaps and the receipt's own count beside the 0; a fold key with no\n * committed value draws the Not-on-record badge, never an empty node.\n * 5. AUTHORITY OMISSIONS COME FROM THE FOLD. Hidden skills reach the\n * withheld band with `from: 'fold'` — a receipt never names them.\n * ATTENTION OMISSIONS COME FROM THE RECEIPT (0.52.0): each evicted turn\n * is a withheld edge into the messages slot carrying the receipt's own\n * hash and the epoch that last served it — a number, or Not on record.\n *\n * DRAWN WITH NO DEPENDENCY. Flex and CSS grid, three bands that wrap on a\n * narrow rail; every long value truncates with its full text on `title`, so\n * nothing is clipped and the rail never scrolls sideways.\n */\n\nimport React from 'react';\n\nimport type {\n CallNode,\n HeldNode,\n ServedEdge,\n ServedEdgeState,\n ServedGraph as ServedGraphData,\n ServedSlotName,\n SlotNode,\n WithheldNode,\n} from '../../core/served/index.js';\nimport { T } from '../theme/index.js';\nimport { Badge } from './ServedBadge.js';\n\n/**\n * Every string this view owns. Labels only — a name for a thing on screen,\n * never a sentence about the run.\n */\nexport const GRAPH_LABELS = Object.freeze({\n view: 'View',\n list: 'List',\n graph: 'Graph',\n held: 'Held',\n served: 'Served',\n withheld: 'Withheld',\n call: 'Call',\n epoch: 'epoch',\n commit: 'commit',\n model: 'model',\n provider: 'provider',\n runId: 'run id',\n cause: 'cause',\n covers: 'covers',\n from: 'from',\n rebuilt: 'rebuilt',\n receipt: 'receipt',\n onReceiptOnly: 'on receipt only',\n rebuiltOnly: 'rebuilt only',\n entered: 'entered',\n left: 'left',\n unchanged: 'unchanged',\n forced: 'forced',\n schemaChanged: 'schema changed',\n hiddenFromModel: 'hidden from the model',\n attentionDrops: 'attention drops',\n redacted: 'redacted',\n gap: 'gap',\n toolWithheld: 'withheld',\n fold: 'fold',\n cacheStrategy: 'cache strategy',\n noCacheStrategy: 'no cache strategy',\n lastServedOn: 'last served on',\n} as const);\n\n/** The word for a withheld node's kind — the record's own vocabulary. */\nconst WITHHELD_LABELS: Readonly<Record<WithheldNode['kind'], string>> = Object.freeze({\n 'tool-withheld': GRAPH_LABELS.toolWithheld,\n 'attention-drop': GRAPH_LABELS.attentionDrops,\n 'hidden-skill': GRAPH_LABELS.hiddenFromModel,\n redacted: GRAPH_LABELS.redacted,\n gap: GRAPH_LABELS.gap,\n});\n\nconst STATE_LABELS: Readonly<Record<ServedEdgeState, string>> = Object.freeze({\n entered: GRAPH_LABELS.entered,\n left: GRAPH_LABELS.left,\n unchanged: GRAPH_LABELS.unchanged,\n});\n\nexport interface ServedGraphProps {\n /** The three bands, as `servedGraphAt` built them from the cursor's row. */\n readonly graph: ServedGraphData;\n}\n\nexport function ServedGraph({ graph }: ServedGraphProps): React.ReactElement {\n return (\n <div data-testid=\"served-graph\" style={rootStyle}>\n <CallCard call={graph.call} />\n <div style={bandsStyle}>\n <Band title={GRAPH_LABELS.held} testId=\"graph-band-held\">\n {graph.held.map((node) => (\n <HeldRow key={node.key} node={node} />\n ))}\n </Band>\n <Band title={GRAPH_LABELS.served} testId=\"graph-band-served\">\n {graph.served.map((slot) => (\n <SlotCard\n key={slot.slot}\n slot={slot}\n edges={graph.edges.filter((e) => e.slot === slot.slot)}\n withheld={graph.withheld.filter((w) => w.slot === slot.slot)}\n />\n ))}\n </Band>\n <Band title={GRAPH_LABELS.withheld} testId=\"graph-band-withheld\">\n {graph.withheld.map((node, i) => (\n <WithheldCard key={`${node.kind}:${node.name}:${i}`} node={node} />\n ))}\n </Band>\n </div>\n </div>\n );\n}\n\n// ─── the call ──────────────────────────────────────────────────────────\n\nfunction CallCard({ call }: { call: CallNode }): React.ReactElement {\n return (\n <div style={callStyle} data-testid=\"graph-call\" data-epoch={call.epoch}>\n <div style={rowStyle}>\n <span style={bandTitleStyle}>{GRAPH_LABELS.call}</span>\n <span style={chipStyle(T.primary)}>\n {GRAPH_LABELS.epoch} {call.epoch}\n </span>\n <span style={monoStyle}>{call.callRuntimeStageId}</span>\n <span style={mutedStyle}>\n {GRAPH_LABELS.commit} {call.commitIdx}\n </span>\n {call.damaged && <Badge check={{ status: 'damaged' }} />}\n </div>\n <div style={rowStyle} data-testid=\"graph-call-basis\">\n {call.basis !== undefined ? (\n <>\n <span style={mutedStyle}>{GRAPH_LABELS.model}</span>\n <span style={monoStyle}>{call.basis.model}</span>\n <span style={mutedStyle}>{GRAPH_LABELS.provider}</span>\n <span style={monoStyle}>{call.basis.provider}</span>\n <span style={mutedStyle}>{GRAPH_LABELS.runId}</span>\n <span style={monoMutedStyle}>{call.basis.runId}</span>\n </>\n ) : (\n <>\n <span style={mutedStyle}>\n {GRAPH_LABELS.model} · {GRAPH_LABELS.provider}\n </span>\n <Badge check={{ status: call.basisStatus }} />\n </>\n )}\n {call.receiptCause !== undefined && (\n <span\n style={chipStyle(call.receiptCause === 'receipt-shape-rejected' ? T.error : T.textMuted)}\n data-testid=\"graph-call-cause\"\n >\n {GRAPH_LABELS.cause} · {call.receiptCause}\n </span>\n )}\n </div>\n <div style={rowStyle} data-testid=\"graph-call-strategy\">\n <span style={mutedStyle}>{GRAPH_LABELS.cacheStrategy}</span>\n <CacheStrategy value={call.cacheStrategy} />\n </div>\n </div>\n );\n}\n\n/**\n * `Receipt.cache.strategy` as DATA: the name the receipt carries (`'*'` is the\n * built-in pass-through, printed as itself, never translated), the label for\n * the receipt's own `null` (no strategy stood between assembly and the port),\n * or the Not-on-record badge where no receipt can say. Shared with the list\n * view's cache section.\n */\nexport function CacheStrategy({ value }: { value: string | null | undefined }): React.ReactElement {\n if (value === undefined) return <Badge check={{ status: 'not-on-record' }} />;\n if (value === null) {\n return (\n <span style={mutedStyle} data-testid=\"served-cache-strategy\" data-strategy=\"null\">\n {GRAPH_LABELS.noCacheStrategy}\n </span>\n );\n }\n return (\n <span style={monoStyle} data-testid=\"served-cache-strategy\" data-strategy={value}>\n {value}\n </span>\n );\n}\n\n// ─── bands ─────────────────────────────────────────────────────────────\n\nfunction Band({\n title,\n testId,\n children,\n}: {\n title: string;\n testId: string;\n children: React.ReactNode;\n}): React.ReactElement {\n return (\n <section style={bandStyle} data-testid={testId} aria-label={title}>\n <div style={bandTitleStyle}>{title}</div>\n {children}\n </section>\n );\n}\n\nfunction HeldRow({ node }: { node: HeldNode }): React.ReactElement {\n const value = node.value === undefined ? undefined : safeJson(node.value);\n // A structured value (an array or an object — the findings ledger, the\n // active injections) is clipped to one line by default and opens IN PLACE\n // to the whole value, pretty-printed, inside its own bounded scroll, so a\n // long record never stretches the band and is never denied. The graph holds\n // no state (one cursor: PROBE a), so the open/closed bit is the browser's —\n // a native <details>. The count beside the caret is the record's own (array\n // length or key count), a number, not a claim.\n const structured = node.value !== null && typeof node.value === 'object';\n const count = structured ? (Array.isArray(node.value) ? node.value.length : Object.keys(node.value as object).length) : undefined;\n return (\n <div style={heldStyle} data-testid=\"graph-held\" data-key={node.key} data-status={node.status}>\n <span style={keyStyle}>{node.key}</span>\n {value !== undefined && structured ? (\n <details style={heldDetailsStyle} data-testid=\"graph-held-details\">\n <summary style={heldSummaryStyle} data-testid=\"graph-held-toggle\" aria-label={`${node.key} · ${count}`}>\n <span style={countStyle}>{count}</span>\n <span style={valueStyle} title={value} data-testid=\"graph-held-clipped\">\n {value}\n </span>\n </summary>\n <pre style={heldValueOpenStyle} data-testid=\"graph-held-value\">\n {prettyJson(node.value)}\n </pre>\n </details>\n ) : value !== undefined ? (\n <span style={valueStyle} title={value}>\n {value}\n </span>\n ) : (\n // A key the record committed no value for: the badge IS the empty\n // state — an empty box would read as \"nothing was there\".\n <Badge check={{ status: node.status }} />\n )}\n {value !== undefined && node.status === 'damaged' && <Badge check={{ status: 'damaged' }} />}\n </div>\n );\n}\n\n// ─── the served band ───────────────────────────────────────────────────\n\n/** Edges grouped by the node they leave, in wire order. A tool carries no\n * origin (the record names none), so its group has no origin node. */\nfunction groupByOrigin(\n edges: readonly ServedEdge[],\n): readonly { readonly origin?: string; readonly edges: readonly ServedEdge[] }[] {\n const groups: { origin?: string; edges: ServedEdge[] }[] = [];\n for (const edge of edges) {\n let group = groups.find((g) => g.origin === edge.origin);\n if (group === undefined) {\n group = edge.origin !== undefined ? { origin: edge.origin, edges: [] } : { edges: [] };\n groups.push(group);\n }\n group.edges.push(edge);\n }\n return groups;\n}\n\nfunction SlotCard({\n slot,\n edges,\n withheld,\n}: {\n slot: SlotNode;\n edges: readonly ServedEdge[];\n withheld: readonly WithheldNode[];\n}): React.ReactElement {\n return (\n <div\n style={slotStyle}\n data-testid=\"graph-slot\"\n data-slot={slot.slot}\n data-rebuilt={slot.rebuilt}\n data-receipt={slot.onReceipt}\n data-gapped={slot.gaps.length > 0 ? slot.gaps.map((g) => g.gap).join(' ') : undefined}\n >\n <div style={rowStyle}>\n <span style={slotNameStyle}>{slot.slot}</span>\n <span style={countStyle} data-testid=\"graph-slot-count\">\n {GRAPH_LABELS.rebuilt} {slot.rebuilt}\n {slot.onReceipt !== undefined && ` · ${GRAPH_LABELS.receipt} ${slot.onReceipt}`}\n </span>\n {slot.check !== undefined && <Badge check={slot.check} />}\n </div>\n {slot.gaps.length > 0 && (\n <div style={chipsStyle}>\n {slot.gaps.map((gap) => (\n <span key={gap.gap} style={chipStyle(T.warning)} data-testid=\"graph-slot-gap\" data-gap={gap.gap}>\n {gap.gap}\n </span>\n ))}\n </div>\n )}\n {groupByOrigin(edges).map((group, i) => (\n <div key={group.origin ?? `#${i}`} style={groupStyle}>\n {group.origin !== undefined && (\n <div style={originStyle} data-testid=\"graph-origin\" data-origin={group.origin}>\n {group.origin}\n </div>\n )}\n {group.edges.map((edge) => (\n <EdgeRow key={edge.id} edge={edge} />\n ))}\n </div>\n ))}\n {withheld.map((node, i) => (\n <div\n key={`${node.kind}:${node.name}:${i}`}\n style={withheldEdgeStyle}\n data-testid=\"graph-withheld-edge\"\n data-kind={node.kind}\n data-name={node.name}\n data-slot={slot.slot}\n data-hash={node.hash}\n data-last-served-on={node.lastServedOn}\n >\n <Elbow />\n <span style={keyStyle}>{WITHHELD_LABELS[node.kind]}</span>\n <span style={monoMutedStyle}>{node.name}</span>\n {node.hash !== undefined && <EvictedTurnFacts node={node} />}\n </div>\n ))}\n {slot.onReceiptOnly > 0 && (\n <div style={countRowStyle} data-testid=\"graph-slot-on-receipt-only\">\n <span style={keyStyle}>{GRAPH_LABELS.onReceiptOnly}</span>\n <span style={monoStyle}>{slot.onReceiptOnly}</span>\n </div>\n )}\n {slot.rebuiltOnly > 0 && (\n <div style={countRowStyle} data-testid=\"graph-slot-rebuilt-only\">\n <span style={keyStyle}>{GRAPH_LABELS.rebuiltOnly}</span>\n <span style={monoStyle}>{slot.rebuiltOnly}</span>\n </div>\n )}\n </div>\n );\n}\n\nfunction EdgeRow({ edge }: { edge: ServedEdge }): React.ReactElement {\n const left = edge.state === 'left';\n const text = edge.text ?? '';\n return (\n <div\n style={left ? { ...edgeStyle, ...leftEdgeStyle } : edgeStyle}\n data-testid=\"graph-edge\"\n data-edge={edge.id}\n data-kind={edge.kind}\n data-slot={edge.slot}\n data-origin={edge.origin}\n data-state={edge.state}\n data-status={edge.check.status}\n >\n <Elbow />\n {edge.label !== undefined && (\n <span style={monoStyle} data-testid=\"graph-edge-label\">\n {edge.label}\n </span>\n )}\n {text !== '' && (\n <span style={valueStyle} title={text} data-testid=\"graph-edge-text\">\n {text}\n </span>\n )}\n {edge.forced === true && <span style={chipStyle(T.warning)}>{GRAPH_LABELS.forced}</span>}\n {edge.schemaChanged === true && (\n <span style={chipStyle(T.warning)} data-testid=\"graph-edge-schema-changed\">\n {GRAPH_LABELS.schemaChanged}\n </span>\n )}\n {edge.schemaOnReceiptOnly === true && (\n <span style={chipStyle(T.textMuted)} data-testid=\"graph-edge-schema-on-receipt\">\n {GRAPH_LABELS.onReceiptOnly}\n </span>\n )}\n {edge.state !== undefined && (\n <span style={chipStyle(stateColor(edge.state))} data-testid=\"graph-edge-state\">\n {STATE_LABELS[edge.state]}\n </span>\n )}\n <Badge check={edge.check} />\n </div>\n );\n}\n\n// ─── the withheld band ─────────────────────────────────────────────────\n\nfunction WithheldCard({ node }: { node: WithheldNode }): React.ReactElement {\n return (\n <div\n style={withheldStyle}\n data-testid=\"graph-withheld\"\n data-kind={node.kind}\n data-name={node.name}\n data-from={node.from}\n data-slot={node.slot}\n data-hash={node.hash}\n data-last-served-on={node.lastServedOn}\n >\n <div style={rowStyle}>\n <span style={keyStyle}>{WITHHELD_LABELS[node.kind]}</span>\n <span style={monoStyle}>{node.name}</span>\n <span style={mutedStyle}>\n {GRAPH_LABELS.from} · {node.from}\n </span>\n {node.status !== undefined && <Badge check={{ status: node.status }} />}\n </div>\n {node.hash !== undefined && (\n <div style={rowStyle} data-testid=\"graph-withheld-turn\">\n <EvictedTurnFacts node={node} />\n </div>\n )}\n {node.cause !== undefined && (\n <span\n style={chipStyle(node.cause === 'receipt-shape-rejected' ? T.error : T.textMuted)}\n data-testid=\"graph-withheld-cause\"\n >\n {GRAPH_LABELS.cause} · {node.cause}\n </span>\n )}\n {node.fields !== undefined && (\n <div style={chipsStyle}>\n <span style={keyStyle}>{GRAPH_LABELS.covers}</span>\n {node.fields.map((field) => (\n <span key={field} style={fieldChipStyle}>\n {field}\n </span>\n ))}\n </div>\n )}\n {/* The library's own sentence, verbatim — this view writes none. */}\n {node.why !== undefined && (\n <p style={libraryStyle} data-testid=\"graph-withheld-why\">\n {node.why}\n </p>\n )}\n </div>\n );\n}\n\n/**\n * One evicted turn's facts: the receipt's own hash for it, and the epoch the\n * row paired it with (`core/served/evictedTurns.ts`) — a number where an\n * earlier receipt in this recording served it, the Not-on-record badge where\n * none did.\n */\nfunction EvictedTurnFacts({ node }: { node: WithheldNode }): React.ReactElement {\n return (\n <>\n <span style={monoMutedStyle} data-testid=\"graph-evicted-hash\">\n {node.hash}\n </span>\n <span style={mutedStyle}>{GRAPH_LABELS.lastServedOn}</span>\n {node.lastServedOn !== undefined ? (\n <span style={chipStyle(T.primary)} data-testid=\"graph-evicted-epoch\">\n {GRAPH_LABELS.epoch} {node.lastServedOn}\n </span>\n ) : (\n <Badge check={{ status: 'not-on-record' }} />\n )}\n </>\n );\n}\n\n// ─── pieces ────────────────────────────────────────────────────────────\n\n/** The connector into a slot: a drawn elbow, not a character. */\nfunction Elbow(): React.ReactElement {\n return <span aria-hidden=\"true\" style={elbowStyle} />;\n}\n\nfunction stateColor(state: ServedEdgeState): string {\n if (state === 'entered') return T.success;\n if (state === 'left') return T.error;\n return T.textMuted;\n}\n\nfunction prettyJson(value: unknown): string {\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction safeJson(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n// ─── styles ────────────────────────────────────────────────────────────\n\nconst rootStyle: React.CSSProperties = { display: 'flex', flexDirection: 'column', gap: 8 };\nconst bandsStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'flex-start',\n gap: 8,\n};\nconst bandStyle: React.CSSProperties = {\n flex: '1 1 220px',\n minWidth: 0,\n border: `1px solid ${T.border}`,\n borderRadius: 8,\n padding: '8px 10px',\n background: T.bgSecondary,\n};\nconst bandTitleStyle: React.CSSProperties = {\n fontSize: 10,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n color: T.textMuted,\n marginBottom: 6,\n};\nconst callStyle: React.CSSProperties = {\n border: `1px solid ${T.border}`,\n borderRadius: 8,\n padding: '8px 10px',\n background: T.bgTertiary,\n};\nconst rowStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 6,\n minWidth: 0,\n margin: '2px 0',\n};\nconst heldStyle: React.CSSProperties = { ...rowStyle, borderTop: `1px dashed ${T.border}`, paddingTop: 3 };\nconst heldDetailsStyle: React.CSSProperties = { flex: '1 1 0', minWidth: 0 };\nconst heldSummaryStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'baseline',\n gap: 6,\n minWidth: 0,\n cursor: 'pointer',\n listStyle: 'revert',\n};\nconst heldValueOpenStyle: React.CSSProperties = {\n flex: '1 1 100%',\n margin: 0,\n fontFamily: T.fontMono,\n fontSize: 10.5,\n color: T.textPrimary,\n whiteSpace: 'pre',\n overflow: 'auto',\n maxHeight: 240,\n minWidth: 0,\n};\nconst slotStyle: React.CSSProperties = {\n border: `1px solid ${T.border}`,\n borderRadius: 6,\n padding: '6px 8px',\n marginBottom: 6,\n background: T.bgPrimary,\n minWidth: 0,\n};\nconst slotNameStyle: React.CSSProperties = {\n fontFamily: T.fontMono,\n fontSize: 11,\n fontWeight: 700,\n color: T.textPrimary,\n};\nconst groupStyle: React.CSSProperties = { marginTop: 4, minWidth: 0 };\nconst originStyle: React.CSSProperties = {\n display: 'inline-block',\n padding: '0 6px',\n borderRadius: 4,\n border: `1px solid ${T.primary}`,\n color: T.primary,\n fontFamily: T.fontMono,\n fontSize: 10,\n};\nconst edgeStyle: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n minWidth: 0,\n marginLeft: 8,\n padding: '1px 0',\n};\nconst leftEdgeStyle: React.CSSProperties = {\n opacity: 0.7,\n textDecoration: 'line-through',\n};\nconst withheldEdgeStyle: React.CSSProperties = {\n ...edgeStyle,\n opacity: 0.8,\n color: T.textMuted,\n};\nconst elbowStyle: React.CSSProperties = {\n flex: 'none',\n width: 10,\n height: 8,\n borderLeft: `1px solid ${T.border}`,\n borderBottom: `1px solid ${T.border}`,\n borderBottomLeftRadius: 4,\n marginBottom: 4,\n};\nconst withheldStyle: React.CSSProperties = {\n border: `1px dashed ${T.border}`,\n borderRadius: 6,\n padding: '6px 8px',\n marginBottom: 6,\n background: T.bgPrimary,\n minWidth: 0,\n};\nconst chipsStyle: React.CSSProperties = { display: 'flex', flexWrap: 'wrap', gap: 4, margin: '3px 0' };\nconst countRowStyle: React.CSSProperties = { ...rowStyle, marginLeft: 8 };\nconst countStyle: React.CSSProperties = { fontSize: 10.5, fontFamily: T.fontMono, color: T.textMuted };\nconst keyStyle: React.CSSProperties = { fontSize: 10.5, color: T.textMuted, flex: 'none' };\nconst valueStyle: React.CSSProperties = {\n fontFamily: T.fontMono,\n fontSize: 11,\n color: T.textPrimary,\n flex: '1 1 0',\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n};\nconst monoStyle: React.CSSProperties = { fontFamily: T.fontMono, fontSize: 11, color: T.textPrimary };\nconst monoMutedStyle: React.CSSProperties = {\n fontFamily: T.fontMono,\n fontSize: 10.5,\n color: T.textMuted,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n};\nconst mutedStyle: React.CSSProperties = { fontSize: 10.5, color: T.textMuted };\nconst fieldChipStyle: React.CSSProperties = {\n padding: '0 5px',\n borderRadius: 4,\n border: `1px solid ${T.border}`,\n fontFamily: T.fontMono,\n fontSize: 10,\n color: T.textSecondary,\n};\nconst libraryStyle: React.CSSProperties = {\n margin: '4px 0 0',\n fontSize: 11,\n lineHeight: 1.45,\n color: T.textSecondary,\n borderLeft: `2px solid ${T.primary}`,\n paddingLeft: 8,\n};\nfunction chipStyle(color: string): React.CSSProperties {\n return {\n padding: '0 6px',\n borderRadius: 999,\n border: `1px solid ${color}`,\n color,\n fontSize: 10,\n fontFamily: T.fontMono,\n whiteSpace: 'nowrap',\n };\n}\n","/**\n * <ServedTab> — at every LLM call, exactly what the model was served, provable\n * from the log.\n *\n * agentfootprint 9.88.0 ships the two halves: `servedAt(k)` REBUILDS the\n * request from committed pieces and `receiptAt(k)` reads the hashes-only\n * record the call itself committed. This tab renders both at the Why Lens's\n * one cursor and marks every field with what the check established.\n *\n * THE LAWS THIS FILE KEEPS — each one was learned by breaking it:\n *\n * 1. OMIT, NEVER DENY. A field a gap covers is never rendered as \"empty\" or\n * \"none\": the gap is the empty state, printed beside the field.\n * 2. NO CLAIM SENTENCES OF ITS OWN. Every explanatory sentence on this tab\n * is `SERVED_GAPS[k].why` VERBATIM, or is computed data (a status, a\n * count, a hash, an epoch number, a diff). The strings this file owns are\n * LABELS — `LABELS` below — and `test/served/no-own-claims.test.ts` walks\n * every literal to keep it that way.\n * 3. VERIFIED MEANS HASHES AGREE. The badge reads what `core/served/verify`\n * decided with the library's own `receiptHash` / `messageDigestInput`.\n * 4. AUTHORITY OMISSIONS COME FROM THE FOLD. Hidden skill ids are read at the\n * stop through footprintjs's `stateAt` (`foldFactsAt`), never from the\n * receipt, and labelled \"hidden from the model\".\n * 5. ONE CURSOR. Props in (`cursorRuntimeStageId`, `commitIdx` — or, since\n * 0.51.0, the whole `cursor` those two are read off), a jump request out\n * (`onJumpTo`). The only local state is a diff toggle and which schemas\n * are expanded — never a position.\n *\n * A RECORD CAN NEVER TAKE THE LENS DOWN. The tab reads a shape it does not own\n * off a recording that came from disk; the core narrows it (`receiptShape.ts`)\n * and a render throw past that is caught by the boundary at the bottom of this\n * file, which prints the Damaged badge and the thrown message as data — so the\n * one cursor and every other tab survive exactly the record this tab exists\n * to call damaged.\n */\n\nimport React, { useMemo, useState } from 'react';\nimport { SERVED_GAPS, type ServedGap } from 'agentfootprint';\n\nimport {\n EXCUSING_GAPS,\n type AttentionOmissionStatus,\n foldFactsAt,\n servedGraphAt,\n servedRowAt,\n servedRowForEpoch,\n sincePrevious,\n verify,\n type FieldCheck,\n type FoldFacts,\n type ServedFieldStatus,\n type ServedRow,\n type ServedVerification,\n type SincePrevious,\n} from '../../core/served/index.js';\nimport type { LensCursor } from '../../core/cursor/lensCursor.js';\nimport { foldCursorOf } from '../../core/cursor/foldAt.js';\nimport type { DiffSegment } from '../../core/utils/diffPrompts.js';\n// The badge is ONE owner across the tab's two views (list and graph) — see\n// `ServedBadge.tsx`. Re-exported below so its import path is unchanged.\nimport { Badge, BADGE_LABELS } from './ServedBadge.js';\nimport { CacheStrategy, ServedGraph, GRAPH_LABELS } from './ServedGraph.js';\nimport { snapshotLogKey, snapshotOfRunner } from '../../core/utils/snapshotOfRunner.js';\nimport { T } from '../theme/index.js';\n\n/**\n * Every string this tab owns. Labels only: a name for a thing on the screen,\n * never a sentence about the run. The one entry that reads as a sentence —\n * `betweenCalls` — is the note the design decided verbatim, rendered only when\n * `ServedRow.betweenCalls` is true (a computed flag), and named as the single\n * exception in `test/served/no-own-claims.test.ts`.\n */\nexport const LABELS = Object.freeze({\n tab: 'Served',\n /** The provider's cache breakpoint, placed where it fell: everything above it was the reusable prefix. */\n cacheBoundary: 'cache boundary',\n /** The cache recorder's run totals (agentfootprint `cacheRecorder`), when a host attached it. */\n cacheReadTotal: 'cache read tokens',\n freshInputTotal: 'fresh input tokens',\n hitRate: 'hit rate',\n runTotal: 'run total',\n unknown: 'unknown',\n epoch: 'epoch',\n call: 'call',\n commit: 'commit',\n asOfCall: 'as of call',\n betweenCalls: 'this stop is between calls',\n noCallAtOrBefore: 'no call at or before this stop',\n served: 'Served',\n systemPrompt: 'System prompt',\n messagesAsSent: 'Messages as sent',\n toolsAsSent: 'Tools as sent',\n basis: 'Basis',\n fold: 'Fold',\n omissions: 'Omissions',\n gaps: 'Gaps',\n sincePrevious: 'Since previous',\n verified: BADGE_LABELS.verified,\n reconstructed: BADGE_LABELS.reconstructed,\n damaged: BADGE_LABELS.damaged,\n notOnRecord: BADGE_LABELS.notOnRecord,\n onReceipt: BADGE_LABELS.onReceipt,\n onReceiptOnly: 'on receipt only',\n receipt: BADGE_LABELS.receipt,\n rebuilt: BADGE_LABELS.rebuilt,\n pieces: 'pieces',\n requestOnly: 'request-only',\n forced: 'forced',\n withheld: 'withheld',\n schema: 'schema',\n showDiff: 'Show diff',\n hideDiff: 'Hide diff',\n model: 'model',\n provider: 'provider',\n runId: 'run id',\n params: 'params',\n cache: 'cache',\n transform: 'transform',\n transformHash: 'transform hash',\n markersApplied: 'markers applied',\n foldBase: 'fold base',\n redacted: 'redacted',\n iteration: 'iteration',\n currentSkill: 'current skill',\n stepPointer: 'step pointer',\n engagement: 'engagement',\n activeInjections: 'active injections',\n hiddenFromModel: 'hidden from the model',\n /** The findings ledger (agentfootprint 9.101.0): its `source: 'findings'` system piece, the tickets on the wire, the rows on the fold. */\n findingsPiece: 'findings piece',\n collapsedTickets: 'collapsed tickets',\n findingsLedger: 'findings ledger',\n attentionDrops: 'attention drops',\n count: 'count',\n hashes: 'hashes',\n lastServedOn: GRAPH_LABELS.lastServedOn,\n cacheStrategy: GRAPH_LABELS.cacheStrategy,\n noCacheStrategy: GRAPH_LABELS.noCacheStrategy,\n covers: 'covers',\n cause: 'cause',\n from: 'from',\n to: 'to',\n system: 'system',\n messages: 'messages',\n tools: 'tools',\n changed: 'changed',\n unchanged: 'unchanged',\n entered: 'entered',\n left: 'left',\n added: 'added',\n removed: 'removed',\n schemaChanged: 'schema changed',\n schemasNotComparable: 'schemas not comparable',\n diffNotComputed: 'diff not computed',\n rebuiltOnly: 'rebuilt only',\n tokens: 'tokens',\n foldUnavailable: 'fold unavailable',\n skippedRows: 'skipped rows',\n // The view toggle (0.49.0). The graph owns the words it draws with; the tab\n // only names the two views.\n view: GRAPH_LABELS.view,\n list: GRAPH_LABELS.list,\n graph: GRAPH_LABELS.graph,\n} as const);\n\n/** Receipt-field paths each section renders — what a gap's `fields` are\n * matched against to highlight the section. */\nconst SECTION_FIELDS = Object.freeze({\n system: ['system.hash', 'system.chars', 'system.pieces'],\n messages: ['messages.count', 'messages.entries', 'messages.requestOnly'],\n tools: ['tools.names', 'tools.schemaHashes', 'tools.forced', 'tools.withheld'],\n basis: ['basis.model', 'basis.provider', 'basis.runId', 'basis.epoch', 'epoch'],\n params: ['params'],\n cache: ['cache.transform', 'cache.transformHash', 'cache.markersApplied', 'cache.strategy'],\n omissions: ['omittedForAttention'],\n} as const);\n\nexport interface ServedTabProps {\n /** The runner whose last snapshot holds the log (`getLastSnapshot` is\n * duck-checked), or the snapshot itself. */\n readonly runner: unknown;\n /** THE cursor's address — the Why Lens's single position. Optional since\n * 0.51.0: pass `cursor` instead and this is read from `cursor.at`. */\n readonly cursorRuntimeStageId?: string;\n /** THE cursor's commit anchor; `-1` when unknown. Optional since 0.51.0 for\n * the same reason. */\n readonly commitIdx?: number;\n /** Move the ONE cursor to an address (the call's own stop). */\n readonly onJumpTo?: (runtimeStageId: string) => void;\n /**\n * THE cursor, in the one vocabulary every view is handed (0.51.0).\n *\n * A shell that already holds a `LensCursor` — from `<Lens slots={{ detail }}>`\n * or from `lensCursorFrom` — passes this ALONE:\n *\n * ```tsx\n * <ServedTab runner={runner} cursor={p.cursor} />\n * ```\n *\n * The two scalars above still work and still WIN when supplied, which is\n * what keeps `<Lens>`'s own wiring byte for byte. This is the same one\n * cursor either way: the tab reads a position, and holds none.\n */\n readonly cursor?: LensCursor;\n}\n\n/** The address + commit this tab reads, from whichever shape the host passed.\n * The explicit scalars win; the cursor is the fallback, so no host has two\n * sources of truth at once. */\nfunction cursorAnchor(props: ServedTabProps): { runtimeStageId: string; commitIdx: number } {\n return {\n runtimeStageId: props.cursorRuntimeStageId ?? props.cursor?.at.runtimeStageId ?? '',\n // A cursor's reading folds through the last commit its stop HELD (`foldAt.ts`): `-1` at\n // Run · start, the same anchor `<Lens>` hands this tab as `commitIdx`.\n commitIdx:\n props.commitIdx ?? (props.cursor !== undefined ? foldCursorOf(props.cursor.at).commitIdx : -1),\n };\n}\n\n// `snapshotOfRunner` / `snapshotLogKey` (0.48.0): the runner's last snapshot\n// and the \"did its log move\" key are one owner now, shared with the tag\n// legend and the bookmark key — see `core/utils/snapshotOfRunner.ts`.\nconst snapshotOf = snapshotOfRunner;\nconst logKeyOf = snapshotLogKey;\n\n/**\n * The provider's cache breakpoint, drawn where it fell (0.59.0): after the\n * element at `index` of `field`, when the receipt's `cache.markersApplied`\n * names that place. Everything above the line was the reusable prefix of\n * the call — the prefill-once idea, read off the record, never inferred.\n */\nfunction CacheBoundary({\n markers,\n field,\n index,\n}: {\n readonly markers: readonly { readonly field: string; readonly boundaryIndex: number; readonly ttl: string }[];\n readonly field: 'system' | 'messages' | 'tools';\n readonly index: number;\n}): React.ReactElement | null {\n const here = markers.filter((m) => m.field === field && m.boundaryIndex === index);\n if (here.length === 0) return null;\n return (\n <>\n {here.map((m, k) => (\n <div key={k} style={boundaryStyle} data-testid=\"served-cache-boundary\" data-field={m.field} data-index={m.boundaryIndex}>\n <span style={monoMutedStyle}>\n {LABELS.cacheBoundary} · {m.field} · {m.boundaryIndex} · {m.ttl}\n </span>\n </div>\n ))}\n </>\n );\n}\n\n// One-word CSS literals only: the own-claims walker reads every string.\nconst boundaryStyle: React.CSSProperties = {\n borderTopWidth: 1,\n borderTopStyle: 'dashed',\n borderTopColor: 'currentColor',\n marginTop: 6,\n marginBottom: 0,\n paddingTop: 4,\n opacity: 0.8,\n};\n\n/** A recorded claim, as agentfootprint's `Claim<T>` spells it: known with a value, or not. */\ntype RecordedClaim =\n | { readonly kind: 'known'; readonly value: number; readonly reason?: undefined }\n | { readonly kind: string; readonly value?: undefined; readonly reason?: string };\n\n/** The cache recorder's run totals, read off the snapshot's recorder rows (0.60.0). Absent when no host attached one. */\nfunction cacheTotalsOf(snapshot: unknown): { readonly read?: RecordedClaim; readonly fresh?: RecordedClaim; readonly hitRate?: RecordedClaim } | undefined {\n const rows = (snapshot as { recorders?: unknown } | null | undefined)?.recorders;\n if (!Array.isArray(rows)) return undefined;\n const row = rows.find((r) => (r as { id?: unknown } | null)?.id === 'cache-recorder') as { data?: unknown } | undefined;\n const data = row?.data as Record<string, unknown> | undefined;\n if (data === undefined || data === null || typeof data !== 'object') return undefined;\n const claim = (v: unknown): RecordedClaim | undefined =>\n v !== null && typeof v === 'object' && typeof (v as { kind?: unknown }).kind === 'string' ? (v as RecordedClaim) : undefined;\n return {\n ...(claim(data.cacheReadTokensTotal) !== undefined && { read: claim(data.cacheReadTokensTotal)! }),\n ...(claim(data.freshInputTokensTotal) !== undefined && { fresh: claim(data.freshInputTokensTotal)! }),\n ...(claim(data.hitRate) !== undefined && { hitRate: claim(data.hitRate)! }),\n };\n}\n\n/**\n * The ticket a served tool message carries in place of a result the model\n * judged (agentfootprint 9.101.0, `findings/serve.ts · collapseJudged`):\n * `{ collapsed: true, standing, toolCallId }` as JSON, no model words. Read\n * by its SHAPE — the library names no guard on a barrel — and never\n * inferred: a content that does not parse to that shape is a result.\n */\nexport function collapsedTicketOf(content: unknown): { readonly standing: string; readonly toolCallId: string } | undefined {\n if (typeof content !== 'string' || !content.startsWith('{')) return undefined;\n try {\n const parsed = JSON.parse(content) as { collapsed?: unknown; standing?: unknown; toolCallId?: unknown } | null;\n if (parsed === null || typeof parsed !== 'object' || parsed.collapsed !== true) return undefined;\n if (typeof parsed.standing !== 'string' || typeof parsed.toolCallId !== 'string') return undefined;\n return { standing: parsed.standing, toolCallId: parsed.toolCallId };\n } catch {\n return undefined;\n }\n}\n\n/** The ledger's rows counted by their own `kind`, first-seen order: `basis 6 · standing 4`. */\nfunction rowKindCounts(rows: readonly unknown[]): string {\n const counts = new Map<string, number>();\n for (const row of rows) {\n const kind = (row as { kind?: unknown } | null)?.kind;\n if (typeof kind === 'string') counts.set(kind, (counts.get(kind) ?? 0) + 1);\n }\n return Array.from(counts, ([kind, n]) => `${kind} ${n}`).join(' · ');\n}\n\n/** One recorded claim as a line: the value when known, the recorder's own reason when not. */\nfunction ClaimLine({ label, claim, testId, format }: { readonly label: string; readonly claim: RecordedClaim; readonly testId: string; readonly format?: (n: number) => string }): React.ReactElement {\n return (\n <DataLine label={`${label} · ${LABELS.runTotal}`} testId={testId}>\n {claim.kind === 'known' ? (\n <span style={monoStyle} data-kind=\"known\">{format ? format((claim as { value: number }).value) : String((claim as { value: number }).value)}</span>\n ) : (\n <span style={monoMutedStyle} data-kind={claim.kind}>\n {LABELS.unknown}{claim.reason !== undefined ? ` · ${claim.reason}` : ''}\n </span>\n )}\n </DataLine>\n );\n}\n\n/** The tab, inside the boundary that keeps a bad record from unmounting the\n * Lens. `ServedTabBody` is the tab itself. */\nexport function ServedTab(props: ServedTabProps): React.ReactElement {\n const anchor = cursorAnchor(props);\n return (\n <ServedTabBoundary resetKey={`${anchor.runtimeStageId}#${anchor.commitIdx}`}>\n <ServedTabBody {...props} />\n </ServedTabBoundary>\n );\n}\n\nfunction ServedTabBody(props: ServedTabProps): React.ReactElement {\n const { runner, onJumpTo } = props;\n const { runtimeStageId: cursorRuntimeStageId, commitIdx } = cursorAnchor(props);\n // The snapshot is re-read every render (cheap) but only ADOPTED when its log\n // key moves, so the derivation below — and the library's own per-snapshot\n // memos — hold across renders the cursor did not cause.\n const fresh = snapshotOf(runner);\n const logKey = logKeyOf(fresh);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `fresh` is keyed by `logKey` on purpose\n const snapshot = useMemo(() => fresh, [runner, logKey]);\n // Derived from the cursor — nothing here remembers a position.\n const derived = useMemo(() => {\n // The ANCHOR, not a cursor — this tab holds no position, it reads one.\n const at = { runtimeStageId: cursorRuntimeStageId, commitIdx };\n const row = servedRowAt(snapshot, at);\n if (row === undefined) return undefined;\n const checks = verify(row.view, row.receipt, row.receipt?.basis.runId ?? '', row.receiptCause);\n const previous =\n row.previousEpoch !== undefined ? servedRowForEpoch(snapshot, row.previousEpoch) : undefined;\n const since = previous !== undefined ? sincePrevious(row, previous) : undefined;\n const fold = foldFactsAt(snapshot, at);\n // The SECOND VIEW of the same row — no second read, no second cursor.\n const graph = servedGraphAt({ row, fold, checks, ...(since !== undefined ? { since } : {}) });\n return { row, checks, since, fold, graph };\n }, [snapshot, cursorRuntimeStageId, commitIdx]);\n\n // UI state only: two toggles and a set of expanded schema names. No position.\n const [viewMode, setViewMode] = useState<ServedViewMode>('list');\n const [showDiff, setShowDiff] = useState(false);\n const [openSchemas, setOpenSchemas] = useState<ReadonlySet<string>>(() => new Set());\n\n if (derived === undefined) {\n return (\n <div style={panelStyle} data-testid=\"served-tab\" data-served=\"none\">\n <Header row={undefined} onJumpTo={onJumpTo} viewMode={viewMode} onViewMode={setViewMode} />\n <div style={mutedStyle} data-testid=\"served-no-call\">\n {LABELS.noCallAtOrBefore}\n </div>\n </div>\n );\n }\n\n const { row, checks, since, fold, graph } = derived;\n const view = row.view;\n const markers = row.receipt?.cache.markersApplied ?? [];\n const cacheTotals = useMemo(() => cacheTotalsOf(snapshot), [snapshot]);\n // The findings ledger on THIS wire (agentfootprint 9.101.0): the system\n // piece(s) it composed, and the tool results it served as tickets.\n const findingsPieces = view.system.pieces.filter((p) => p.source === 'findings').length;\n const tickets = view.messages.asSent.flatMap((m) => {\n const t = m.role === 'tool' ? collapsedTicketOf(m.content) : undefined;\n return t !== undefined ? [t] : [];\n });\n const gapsCovering = (fields: readonly string[]): readonly ServedGap[] =>\n view.gaps.filter((g) => g.fields.some((f) => fields.includes(f)));\n const excusing = (fields: readonly string[]): boolean =>\n gapsCovering(fields).some((g) => EXCUSING_GAPS.includes(g.gap));\n // A section's header count: the rebuilt count alone when nothing excuses a\n // short rebuild; under an excuse, BOTH counts labelled, so a bare number\n // never reads as \"0 tools\" beside a receipt that names one.\n const counts = (rebuilt: number, onReceipt: number | undefined, fields: readonly string[]) =>\n onReceipt !== undefined && excusing(fields) ? (\n <Count n={rebuilt} label={LABELS.rebuilt} also={onReceipt} alsoLabel={LABELS.receipt} />\n ) : (\n <Count n={rebuilt} />\n );\n\n return (\n <div style={panelStyle} data-testid=\"served-tab\" data-epoch={row.epoch} data-view={viewMode}>\n <Header row={row} onJumpTo={onJumpTo} viewMode={viewMode} onViewMode={setViewMode} />\n\n {viewMode === 'graph' ? (\n <ServedGraph graph={graph} />\n ) : (\n <>\n {/* ── SERVED ─────────────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.served}</SectionTitle>\n\n <Section\n testId=\"served-system\"\n title={LABELS.systemPrompt}\n badge={<Badge check={checks.system} />}\n gaps={gapsCovering(SECTION_FIELDS.system)}\n extra={\n since !== undefined && since.system.changed ? (\n <button\n type=\"button\"\n style={buttonStyle}\n aria-pressed={showDiff}\n data-testid=\"served-toggle-diff\"\n onClick={() => setShowDiff((v) => !v)}\n >\n {showDiff ? LABELS.hideDiff : LABELS.showDiff}\n </button>\n ) : undefined\n }\n >\n {showDiff && since !== undefined && since.system.changed ? (\n <Diff since={since} />\n ) : (\n <>\n {view.system.pieces.map((piece, i) => (\n <React.Fragment key={i}>\n <div style={pieceStyle} data-testid=\"served-piece\">\n <div style={pieceHeadStyle}>\n <span style={monoMutedStyle}>\n {piece.slot} · {piece.source}\n </span>\n <Badge check={checks.pieces[i] ?? { status: 'reconstructed' }} />\n </div>\n <Mono>{piece.text}</Mono>\n </div>\n <CacheBoundary markers={markers} field=\"system\" index={i} />\n </React.Fragment>\n ))}\n {checks.onReceiptOnly.pieces > 0 && (\n <DataLine label={`${LABELS.pieces} · ${LABELS.onReceiptOnly}`}>\n {checks.onReceiptOnly.pieces}\n </DataLine>\n )}\n {checks.rebuiltOnly.pieces > 0 && (\n <DataLine label={`${LABELS.pieces} · ${LABELS.rebuiltOnly}`}>\n {checks.rebuiltOnly.pieces}\n </DataLine>\n )}\n {/* The ledger's own piece, named by its source, with the verdict\n the check gave THAT piece. Absent when no piece carries the\n source: an unarmed run, or an armed one before any standing\n was declared — nothing is claimed either way. */}\n {findingsPieces > 0 && (\n <DataLine label={LABELS.findingsPiece} testId=\"served-findings-piece\">\n {findingsPieces}\n {view.system.pieces.map((piece, i) =>\n piece.source === 'findings' ? (\n <Badge key={i} check={checks.pieces[i] ?? { status: 'reconstructed' }} />\n ) : null,\n )}\n </DataLine>\n )}\n {view.system.pieces.length === 0 &&\n gapsCovering(SECTION_FIELDS.system).length === 0 && (\n <DataLine label={LABELS.pieces}>0</DataLine>\n )}\n </>\n )}\n </Section>\n\n <Section\n testId=\"served-messages\"\n title={LABELS.messagesAsSent}\n badge={counts(\n view.messages.asSent.length + view.messages.requestOnly.length,\n row.receipt !== undefined\n ? row.receipt.messages.entries.length + row.receipt.messages.requestOnly.length\n : undefined,\n SECTION_FIELDS.messages,\n )}\n gaps={gapsCovering(SECTION_FIELDS.messages)}\n >\n {view.messages.asSent.map((m, i) => (\n <React.Fragment key={i}>\n <div style={messageStyle} data-testid=\"served-message\" data-role={m.role}>\n <div style={pieceHeadStyle}>\n <span style={monoMutedStyle}>\n {m.role}\n {m.toolCallId !== undefined ? ` · ${m.toolCallId}` : ''}\n {m.toolName !== undefined ? ` · ${m.toolName}` : ''}\n </span>\n <Badge check={checks.messages[i] ?? { status: 'reconstructed' }} />\n </div>\n {m.content !== '' && <Mono>{m.content}</Mono>}\n {(m.toolCalls ?? []).map((c) => (\n <div key={c.id} style={toolCallStyle} data-testid=\"served-tool-call\">\n <span style={monoMutedStyle}>{c.id}</span> <span style={monoStyle}>{c.name}</span>{' '}\n <span style={monoMutedStyle}>{safeJson(c.args)}</span>\n </div>\n ))}\n </div>\n <CacheBoundary markers={markers} field=\"messages\" index={i} />\n </React.Fragment>\n ))}\n {view.messages.requestOnly.map((line, i) => (\n <div key={`ro-${i}`} style={messageStyle} data-testid=\"served-request-only\">\n <div style={pieceHeadStyle}>\n <span style={monoMutedStyle}>\n {line.role} · {LABELS.requestOnly} · {line.reason}\n </span>\n <Badge check={checks.requestOnly[i] ?? { status: 'reconstructed' }} />\n </div>\n <Mono>{line.text}</Mono>\n </div>\n ))}\n {(checks.onReceiptOnly.messages > 0 || checks.onReceiptOnly.requestOnly > 0) && (\n <DataLine label={`${LABELS.messages} · ${LABELS.onReceiptOnly}`}>\n {checks.onReceiptOnly.messages + checks.onReceiptOnly.requestOnly}\n </DataLine>\n )}\n {(checks.rebuiltOnly.messages > 0 || checks.rebuiltOnly.requestOnly > 0) && (\n <DataLine label={`${LABELS.messages} · ${LABELS.rebuiltOnly}`}>\n {checks.rebuiltOnly.messages + checks.rebuiltOnly.requestOnly}\n </DataLine>\n )}\n {/* Results the model judged, served as tickets: the count, then each\n ticket's own `toolCallId · standing` as the wire carries it.\n Absent when no tool message carries one. */}\n {tickets.length > 0 && (\n <DataLine label={LABELS.collapsedTickets} testId=\"served-collapsed-tickets\">\n {tickets.length}\n {tickets.map((t) => (\n <span\n key={t.toolCallId}\n style={chipStyle(T.textMuted)}\n data-testid=\"served-collapsed-ticket\"\n data-standing={t.standing}\n >\n {t.toolCallId} · {t.standing}\n </span>\n ))}\n </DataLine>\n )}\n </Section>\n\n <Section\n testId=\"served-tools\"\n title={LABELS.toolsAsSent}\n badge={\n <span style={{ display: 'flex', gap: 6, alignItems: 'center' }}>\n {counts(\n view.tools.names.length,\n checks.namesOnReceipt?.length,\n SECTION_FIELDS.tools,\n )}\n <Badge check={checks.toolNames} />\n </span>\n }\n gaps={gapsCovering(SECTION_FIELDS.tools)}\n >\n {view.tools.withheld !== undefined && (\n <DataLine label={LABELS.withheld} testId=\"served-withheld\">\n {view.tools.withheld}\n </DataLine>\n )}\n {view.tools.names.map((name, i) => {\n const schema = view.tools.schemas.find((s) => s.name === name);\n const isForced = view.tools.forced === name;\n const open = openSchemas.has(name);\n return (\n <React.Fragment key={name}>\n <div style={toolStyle} data-testid=\"served-tool\" data-tool={name}>\n <div style={pieceHeadStyle}>\n <span>\n <span style={monoStyle}>{name}</span>\n {isForced && (\n <span style={chipStyle(T.warning)} data-testid=\"served-forced\">\n {LABELS.forced}\n </span>\n )}\n </span>\n <span style={{ display: 'flex', gap: 6, alignItems: 'center' }}>\n {schema !== undefined && (\n <Badge check={checks.toolSchemas[name] ?? { status: 'reconstructed' }} />\n )}\n {schema !== undefined && (\n <button\n type=\"button\"\n style={buttonStyle}\n aria-expanded={open}\n onClick={() =>\n setOpenSchemas((prev) => {\n const next = new Set(prev);\n if (next.has(name)) next.delete(name);\n else next.add(name);\n return next;\n })\n }\n >\n {LABELS.schema}\n </button>\n )}\n </span>\n </div>\n {open && schema !== undefined && <Mono>{safeJson(schema)}</Mono>}\n </div>\n <CacheBoundary markers={markers} field=\"tools\" index={i} />\n </React.Fragment>\n );\n })}\n {checks.onReceiptOnly.toolNames.length > 0 && (\n <DataLine label={`${LABELS.tools} · ${LABELS.onReceiptOnly}`}>\n {checks.onReceiptOnly.toolNames.join(', ')}\n </DataLine>\n )}\n {checks.rebuiltOnly.toolNames.length > 0 && (\n <DataLine label={`${LABELS.tools} · ${LABELS.rebuiltOnly}`}>\n {checks.rebuiltOnly.toolNames.join(', ')}\n </DataLine>\n )}\n {/* Schema NAMES hashed on one side only (`RowCounts.schemas`): the\n forced tool's, under `forced-tool-schema`, is on the receipt only. */}\n {checks.onReceiptOnly.schemas.length > 0 && (\n <DataLine label={`${LABELS.schema} · ${LABELS.onReceiptOnly}`} testId=\"served-schemas-on-receipt-only\">\n <span style={monoStyle}>{checks.onReceiptOnly.schemas.join(', ')}</span>\n </DataLine>\n )}\n {checks.rebuiltOnly.schemas.length > 0 && (\n <DataLine label={`${LABELS.schema} · ${LABELS.rebuiltOnly}`} testId=\"served-schemas-rebuilt-only\">\n <span style={monoStyle}>{checks.rebuiltOnly.schemas.join(', ')}</span>\n </DataLine>\n )}\n </Section>\n\n {/* ── BASIS ──────────────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.basis}</SectionTitle>\n <Section testId=\"served-basis\" title={LABELS.basis} gaps={gapsCovering(SECTION_FIELDS.basis)}>\n <DataLine label={LABELS.epoch}>{view.epoch}</DataLine>\n <DataLine label={LABELS.call}>\n <span style={monoStyle}>{row.callRuntimeStageId}</span>\n </DataLine>\n <DataLine label={LABELS.commit}>{row.commitIdx}</DataLine>\n {view.basis !== undefined ? (\n <>\n <DataLine label={LABELS.model} testId=\"served-model\">\n {view.basis.model}\n </DataLine>\n <DataLine label={LABELS.provider}>{view.basis.provider}</DataLine>\n <DataLine label={LABELS.runId}>\n <span style={monoMutedStyle}>{view.basis.runId}</span>\n </DataLine>\n </>\n ) : (\n <Presence label={`${LABELS.model} · ${LABELS.provider}`} />\n )}\n </Section>\n <Section testId=\"served-params\" title={LABELS.params} gaps={gapsCovering(SECTION_FIELDS.params)}>\n {row.receipt !== undefined ? (\n <>\n {Object.entries(row.receipt.params).map(([k, v]) => (\n <DataLine key={k} label={k} testId={`served-param-${k}`}>\n <span style={monoStyle}>{safeJson(v)}</span>\n </DataLine>\n ))}\n {/* No dial on the receipt: the gap beside the section is the\n empty state (`provider-defaults` names `params`); a bare 0\n here would read as \"no dials\", which the record cannot say. */}\n </>\n ) : (\n <Presence label={LABELS.params} />\n )}\n </Section>\n <Section testId=\"served-cache\" title={LABELS.cache} gaps={gapsCovering(SECTION_FIELDS.cache)}>\n {cacheTotals?.read !== undefined && (\n <ClaimLine label={LABELS.cacheReadTotal} claim={cacheTotals.read} testId=\"served-cache-read-total\" />\n )}\n {cacheTotals?.fresh !== undefined && (\n <ClaimLine label={LABELS.freshInputTotal} claim={cacheTotals.fresh} testId=\"served-cache-fresh-total\" />\n )}\n {cacheTotals?.hitRate !== undefined && (\n <ClaimLine label={LABELS.hitRate} claim={cacheTotals.hitRate} testId=\"served-cache-hit-rate\" format={(n) => `${Math.round(n * 1000) / 10}%`} />\n )}\n {row.receipt !== undefined ? (\n <>\n <DataLine label={LABELS.transform}>{row.receipt.cache.transform}</DataLine>\n {row.receipt.cache.transformHash !== null && (\n <DataLine label={LABELS.transformHash}>\n <span style={monoMutedStyle}>{row.receipt.cache.transformHash}</span>\n </DataLine>\n )}\n <DataLine label={LABELS.markersApplied}>\n {row.receipt.cache.markersApplied.length}\n {row.receipt.cache.markersApplied.length > 0 && (\n <span style={monoMutedStyle}>\n {' '}\n {row.receipt.cache.markersApplied\n .map((m) => `${m.field}[${m.boundaryIndex}] ${m.ttl}`)\n .join(' · ')}\n </span>\n )}\n </DataLine>\n {/* WHICH strategy (agentfootprint 9.93.0), as the receipt says it:\n a name, the label for its own `null`, or Not on record on a\n receipt minted before the field existed. `graph.call` carries\n the same value — one owner, `servedGraphAt` · `callNode`. */}\n <DataLine label={LABELS.cacheStrategy} testId=\"served-strategy\">\n <CacheStrategy value={graph.call.cacheStrategy} />\n </DataLine>\n </>\n ) : (\n <Presence label={LABELS.cache} />\n )}\n </Section>\n\n {/* ── FOLD ───────────────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.fold}</SectionTitle>\n <FoldSection fold={fold} />\n\n {/* ── OMISSIONS ──────────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.omissions}</SectionTitle>\n <Section\n testId=\"served-omissions\"\n title={LABELS.attentionDrops}\n gaps={gapsCovering(SECTION_FIELDS.omissions)}\n >\n <Omissions row={row} status={checks.omittedForAttention} />\n </Section>\n\n {/* ── GAPS ───────────────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.gaps}</SectionTitle>\n <div data-testid=\"served-gaps\">\n {view.gaps.map((gap) => (\n <GapCard key={gap.gap} gap={gap} />\n ))}\n </div>\n\n {/* ── SINCE PREVIOUS ─────────────────────────────────────────────── */}\n <SectionTitle>{LABELS.sincePrevious}</SectionTitle>\n <Section testId=\"served-since\" title={LABELS.sincePrevious}>\n {since === undefined ? (\n // The epoch before this one is not in this recording. That is all the\n // data says: a resumed leg's first call has a previous epoch the\n // paused leg carries, so its number is printed and its row is\n // \"not on record\" — never \"no previous epoch\".\n <DataLine label={LABELS.from}>\n {row.epoch > 1 && (\n <span style={monoMutedStyle}>\n {LABELS.epoch} {row.epoch - 1}{' '}\n </span>\n )}\n <Badge check={{ status: 'not-on-record' }} />\n </DataLine>\n ) : (\n <SinceBlock since={since} showDiff={showDiff} />\n )}\n </Section>\n </>\n )}\n </div>\n );\n}\n\n// ─── pieces ────────────────────────────────────────────────────────────\n\n/** Which of the tab's two views is on screen. The list is the default. */\nexport type ServedViewMode = 'list' | 'graph';\n\nfunction Header({\n row,\n onJumpTo,\n viewMode,\n onViewMode,\n}: {\n row: ServedRow | undefined;\n onJumpTo?: ((runtimeStageId: string) => void) | undefined;\n viewMode: ServedViewMode;\n onViewMode: (mode: ServedViewMode) => void;\n}): React.ReactElement {\n return (\n <div style={headerStyle}>\n <span style={headerTitleStyle}>{LABELS.tab}</span>\n {/* No epoch at or before this stop: there is nothing for either view to\n draw, so the toggle is not offered rather than offered and inert. */}\n {row !== undefined && <ViewToggle mode={viewMode} onMode={onViewMode} />}\n {row !== undefined && (\n <>\n <span style={chipStyle(T.primary)} data-testid=\"served-epoch\">\n {LABELS.epoch} {row.epoch}\n </span>\n <button\n type=\"button\"\n style={{ ...buttonStyle, fontFamily: T.fontMono }}\n data-testid=\"served-call-id\"\n onClick={() => onJumpTo?.(row.callRuntimeStageId)}\n >\n {row.callRuntimeStageId}\n </button>\n {row.betweenCalls && (\n <span style={noteStyle} data-testid=\"served-between-calls\">\n {LABELS.asOfCall} {row.epoch} — {LABELS.betweenCalls}\n </span>\n )}\n </>\n )}\n </div>\n );\n}\n\n// The badge lives in `ServedBadge.tsx` — ONE owner for the tab's two views.\nexport { Badge } from './ServedBadge.js';\n\n/** A receipt-only field that is not here: the \"Not on record\" badge, no value. */\nfunction Presence({ label }: { label: string }): React.ReactElement {\n return (\n <DataLine label={label}>\n <Badge check={{ status: 'not-on-record' }} />\n </DataLine>\n );\n}\n\n/** A count. With `label`/`also`, two labelled counts — the rebuilt one and\n * the receipt's — so neither reads as the whole truth under an excuse. */\nfunction Count({\n n,\n label,\n also,\n alsoLabel,\n}: {\n n: number;\n label?: string;\n also?: number;\n alsoLabel?: string;\n}): React.ReactElement {\n return (\n <span style={countStyle} data-testid=\"served-count\" data-rebuilt={n} data-receipt={also}>\n {label !== undefined ? `${label} ${n}` : n}\n {also !== undefined && ` · ${alsoLabel ?? ''} ${also}`}\n </span>\n );\n}\n\nfunction SectionTitle({ children }: { children: React.ReactNode }): React.ReactElement {\n return <div style={sectionTitleStyle}>{children}</div>;\n}\n\nfunction Section({\n testId,\n title,\n badge,\n gaps = [],\n extra,\n children,\n}: {\n testId: string;\n title: string;\n badge?: React.ReactNode;\n gaps?: readonly ServedGap[];\n extra?: React.ReactNode;\n children: React.ReactNode;\n}): React.ReactElement {\n return (\n <section\n style={sectionStyle}\n data-testid={testId}\n data-gapped={gaps.length > 0 ? gaps.map((g) => g.gap).join(' ') : undefined}\n >\n <div style={sectionHeadStyle}>\n <span style={sectionHeadTitleStyle}>{title}</span>\n <span style={{ display: 'flex', gap: 6, alignItems: 'center' }}>\n {extra}\n {badge}\n </span>\n </div>\n {gaps.length > 0 && (\n <div style={gapChipsStyle}>\n {gaps.map((g) => (\n <span\n key={g.gap}\n style={chipStyle(g.cause === 'receipt-shape-rejected' ? T.error : T.warning)}\n data-testid=\"served-gap-chip\"\n data-gap={g.gap}\n >\n {g.gap}\n </span>\n ))}\n </div>\n )}\n {children}\n </section>\n );\n}\n\nfunction DataLine({\n label,\n testId,\n children,\n}: {\n label: string;\n testId?: string;\n children: React.ReactNode;\n}): React.ReactElement {\n return (\n <div style={dataLineStyle} {...(testId !== undefined ? { 'data-testid': testId } : {})}>\n <span style={dataLabelStyle}>{label}</span>\n <span style={dataValueStyle}>{children}</span>\n </div>\n );\n}\n\n/** A sentence that came from the library. Rendered verbatim, styled as quoted. */\nfunction Library({\n children,\n ...rest\n}: {\n children: string;\n 'data-testid'?: string;\n}): React.ReactElement {\n return (\n <p style={libraryStyle} {...rest}>\n {children}\n </p>\n );\n}\n\nfunction GapCard({ gap }: { gap: ServedGap }): React.ReactElement {\n const damaged = gap.cause === 'receipt-shape-rejected';\n return (\n <div\n style={gapCardStyle(damaged)}\n data-testid=\"served-gap\"\n data-gap={gap.gap}\n {...(gap.cause !== undefined ? { 'data-cause': gap.cause } : {})}\n >\n <div style={pieceHeadStyle}>\n <span style={monoStyle}>{gap.gap}</span>\n {gap.cause !== undefined && (\n <span style={chipStyle(damaged ? T.error : T.textMuted)} data-testid=\"served-gap-cause\">\n {LABELS.cause} · {gap.cause}\n </span>\n )}\n </div>\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 4, margin: '4px 0' }}>\n <span style={dataLabelStyle}>{LABELS.covers}</span>\n {gap.fields.map((f) => (\n <span key={f} style={fieldChipStyle}>\n {f}\n </span>\n ))}\n </div>\n <Library data-testid=\"served-gap-why\">{SERVED_GAPS[gap.gap].why}</Library>\n </div>\n );\n}\n\n/**\n * The attention drops, as the receipt states them (0.52.0):\n * · rows on the receipt → the count, then one line per evicted turn: the\n * receipt's own hash and the epoch that last served it (a number, or the\n * Not-on-record badge when no earlier receipt in this recording did);\n * · none, on a receipt minted by a library whose window files every drop →\n * the receipt's own claim, printed as its count: 0;\n * · not on record (no receipt, or one from before the field was written) →\n * the badge; the gap chip beside the section names the field where the\n * `no-receipt-on-chart` gap covers it.\n */\nfunction Omissions({\n row,\n status,\n}: {\n row: ServedRow;\n status: AttentionOmissionStatus;\n}): React.ReactElement {\n if (status === 'not-on-record') return <Presence label={LABELS.attentionDrops} />;\n const drops = row.receipt?.omittedForAttention;\n return (\n <>\n <DataLine label={LABELS.count} testId=\"served-omissions-count\">\n {drops?.count ?? 0}\n </DataLine>\n {(row.evictedTurns ?? []).map((turn, i) => (\n <DataLine\n key={`${turn.hash}:${i}`}\n label={LABELS.hashes}\n testId=\"served-evicted-turn\"\n >\n <span style={monoMutedStyle} data-testid=\"served-evicted-hash\">\n {turn.hash}\n </span>{' '}\n <span style={dataLabelStyle}>{LABELS.lastServedOn}</span>{' '}\n {turn.lastServedOn !== undefined ? (\n <span style={chipStyle(T.primary)} data-testid=\"served-evicted-epoch\">\n {LABELS.epoch} {turn.lastServedOn}\n </span>\n ) : (\n <Badge check={{ status: 'not-on-record' }} />\n )}\n </DataLine>\n ))}\n </>\n );\n}\n\nfunction FoldSection({ fold }: { fold: FoldFacts }): React.ReactElement {\n return (\n <Section testId=\"served-fold\" title={LABELS.fold}>\n {/* A fold that could not run, or rows it could not read: printed as\n data beside the Damaged badge. The receipt, the view and the one\n cursor are unaffected — only the fold's own facts are absent. */}\n {fold.foldError !== undefined && (\n <DataLine label={LABELS.foldUnavailable} testId=\"served-fold-error\">\n <Badge check={{ status: 'damaged' }} />\n <span style={monoMutedStyle}>{fold.foldError}</span>\n </DataLine>\n )}\n {fold.skipped !== undefined && (\n <DataLine label={LABELS.skippedRows} testId=\"served-fold-skipped\">\n <Badge check={{ status: 'damaged' }} />\n {fold.skipped.length}\n <span style={monoMutedStyle}>{fold.skipped.join(' ')}</span>\n </DataLine>\n )}\n {fold.basis !== undefined && <DataLine label={LABELS.foldBase}>{fold.basis}</DataLine>}\n {fold.redacted && <DataLine label={LABELS.redacted}>{String(fold.redacted)}</DataLine>}\n {fold.iteration !== undefined && (\n <DataLine label={LABELS.iteration}>{fold.iteration}</DataLine>\n )}\n {fold.currentSkillId !== undefined && (\n <DataLine label={LABELS.currentSkill} testId=\"served-current-skill\">\n <span style={monoStyle}>{fold.currentSkillId}</span>\n </DataLine>\n )}\n {fold.stepPointer !== undefined && (\n <DataLine label={LABELS.stepPointer}>\n <span style={monoMutedStyle}>{safeJson(fold.stepPointer)}</span>\n </DataLine>\n )}\n {fold.mapEngagement !== undefined && (\n <DataLine label={LABELS.engagement}>\n <span style={monoMutedStyle}>{safeJson(fold.mapEngagement)}</span>\n </DataLine>\n )}\n {fold.activeInjections !== undefined && (\n <DataLine label={LABELS.activeInjections}>\n {fold.activeInjections.length}\n <span style={monoMutedStyle}>\n {' '}\n {fold.activeInjections\n .map((inj) => {\n const i = inj as { slot?: unknown; source?: unknown };\n return [i.slot, i.source].filter((x) => typeof x === 'string').join('·');\n })\n .filter((s) => s !== '')\n .join(' ')}\n </span>\n </DataLine>\n )}\n {fold.hiddenSkillIds !== undefined && (\n <DataLine label={LABELS.hiddenFromModel} testId=\"served-hidden-skills\">\n {fold.hiddenSkillIds.map((id) => (\n <span key={id} style={chipStyle(T.warning)} data-testid=\"served-hidden-skill\">\n {id}\n </span>\n ))}\n {fold.hiddenSkillIds.length === 0 && <Count n={0} />}\n </DataLine>\n )}\n {/* The ledger's rows at this stop, as the fold holds them: the count,\n then one count per row `kind` in first-seen order (`basis`,\n `standing`, `conflict` — the record's own words). A reader folds\n the rows; this line only says how many are on the record here. */}\n {fold.findingsLedger !== undefined && (\n <DataLine label={LABELS.findingsLedger} testId=\"served-findings-ledger\">\n {fold.findingsLedger.length}\n <span style={monoMutedStyle}>\n {' '}\n {rowKindCounts(fold.findingsLedger)}\n </span>\n </DataLine>\n )}\n </Section>\n );\n}\n\nfunction SinceBlock({\n since,\n showDiff,\n}: {\n since: SincePrevious;\n showDiff: boolean;\n}): React.ReactElement {\n return (\n <>\n <DataLine label={`${LABELS.from} · ${LABELS.to}`}>\n {since.fromEpoch} → {since.toEpoch}\n </DataLine>\n <DataLine label={LABELS.system} testId=\"served-since-system\">\n {since.system.changed ? LABELS.changed : LABELS.unchanged}\n {since.system.changed && (\n <span style={monoMutedStyle}>\n {' '}\n {LABELS.pieces} {LABELS.entered} {since.system.piecesEntered} · {LABELS.left}{' '}\n {since.system.piecesLeft}\n </span>\n )}\n </DataLine>\n <DataLine label={LABELS.messages} testId=\"served-since-messages\">\n {LABELS.entered} {since.messages.entered} · {LABELS.left} {since.messages.left}\n </DataLine>\n <DataLine label={LABELS.tools} testId=\"served-since-tools\">\n {LABELS.added}{' '}\n <span style={monoStyle} data-testid=\"served-since-tools-added\">\n {since.tools.added.join(', ') || '0'}\n </span>{' '}\n · {LABELS.removed}{' '}\n <span style={monoStyle} data-testid=\"served-since-tools-removed\">\n {since.tools.removed.join(', ') || '0'}\n </span>\n {since.tools.schemasComparable ? (\n <>\n {' '}\n · {LABELS.schemaChanged}{' '}\n <span style={monoStyle}>{since.tools.schemaChanged.join(', ') || '0'}</span>\n </>\n ) : (\n <> · {LABELS.schemasNotComparable}</>\n )}\n </DataLine>\n {!showDiff && since.system.changed && <Diff since={since} />}\n </>\n );\n}\n\n/** The system-text diff, or the fact that it was not computed (past the\n * lens's cell cap) — printed as a label, never as an empty diff. */\nfunction Diff({ since }: { since: SincePrevious }): React.ReactElement {\n if (since.system.diff === undefined) {\n return (\n <span style={mutedStyle} data-testid=\"served-diff-not-computed\">\n {LABELS.diffNotComputed}\n </span>\n );\n }\n return <WordDiff segments={since.system.diff} />;\n}\n\nfunction WordDiff({ segments }: { segments: readonly DiffSegment[] }): React.ReactElement {\n return (\n <pre style={preStyle} data-testid=\"served-word-diff\">\n {segments.map((s, i) => (\n <span\n key={i}\n data-diff={s.kind}\n style={\n s.kind === 'added'\n ? { background: `${T.success}33`, color: T.textPrimary }\n : s.kind === 'removed'\n ? { background: `${T.error}33`, color: T.textSecondary, textDecoration: 'line-through' }\n : undefined\n }\n >\n {s.text}\n </span>\n ))}\n </pre>\n );\n}\n\nfunction Mono({ children }: { children: React.ReactNode }): React.ReactElement {\n return <pre style={preStyle}>{children}</pre>;\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * The list ⇄ graph toggle. Two real buttons in a `tablist`, so the keyboard\n * reaches them and the focus ring is the platform's own — the focus outline is\n * never removed here.\n */\nfunction ViewToggle({\n mode,\n onMode,\n}: {\n mode: ServedViewMode;\n onMode: (mode: ServedViewMode) => void;\n}): React.ReactElement {\n const button = (value: ServedViewMode, label: string) => (\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={mode === value}\n data-testid={`served-view-${value}`}\n style={toggleButtonStyle(mode === value)}\n onClick={() => onMode(value)}\n >\n {label}\n </button>\n );\n return (\n <span\n role=\"tablist\"\n aria-label={LABELS.view}\n style={{ display: 'inline-flex', gap: 4 }}\n data-testid=\"served-view-toggle\"\n >\n {button('list', LABELS.list)}\n {button('graph', LABELS.graph)}\n </span>\n );\n}\n\n// ─── boundary ──────────────────────────────────────────────────────────\n\n/**\n * Catches a render throw inside the tab and prints it as data: the Damaged\n * badge and the thrown message. The rest of the Lens — its one cursor, its\n * other tab — is untouched. Resets when the cursor moves, so a record that is\n * damaged at one stop does not blank the tab at every other.\n */\nclass ServedTabBoundary extends React.Component<\n { readonly children: React.ReactNode; readonly resetKey: string },\n { readonly error: Error | null }\n> {\n state: { readonly error: Error | null } = { error: null };\n\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n componentDidUpdate(prev: { readonly resetKey: string }): void {\n if (prev.resetKey !== this.props.resetKey && this.state.error !== null) {\n this.setState({ error: null });\n }\n }\n\n render(): React.ReactNode {\n if (this.state.error !== null) {\n return (\n <div style={panelStyle} data-testid=\"served-tab\" data-served=\"error\">\n <div style={headerStyle}>\n <span style={headerTitleStyle}>{LABELS.tab}</span>\n <Badge check={{ status: 'damaged' }} />\n </div>\n <pre style={preStyle} data-testid=\"served-tab-error\">\n {this.state.error.message}\n </pre>\n </div>\n );\n }\n return this.props.children;\n }\n}\n\n// ─── styles ────────────────────────────────────────────────────────────\n\nconst panelStyle: React.CSSProperties = {\n flex: 1,\n minHeight: 0,\n overflow: 'auto',\n padding: 12,\n boxSizing: 'border-box',\n background: T.bgPrimary,\n color: T.textPrimary,\n fontFamily: T.fontSans,\n fontSize: 12,\n};\nconst headerStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: 8,\n marginBottom: 10,\n};\nconst headerTitleStyle: React.CSSProperties = {\n fontSize: 13,\n fontWeight: 700,\n letterSpacing: '0.04em',\n};\nconst noteStyle: React.CSSProperties = {\n fontSize: 11,\n color: T.warning,\n fontStyle: 'italic',\n};\nconst sectionTitleStyle: React.CSSProperties = {\n fontSize: 10,\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n color: T.textMuted,\n margin: '12px 0 6px',\n};\nconst sectionStyle: React.CSSProperties = {\n border: `1px solid ${T.border}`,\n borderRadius: 8,\n padding: '8px 10px',\n marginBottom: 8,\n background: T.bgSecondary,\n};\nconst sectionHeadStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 8,\n marginBottom: 6,\n};\nconst sectionHeadTitleStyle: React.CSSProperties = {\n fontSize: 11.5,\n fontWeight: 600,\n color: T.textSecondary,\n};\nconst gapChipsStyle: React.CSSProperties = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 4,\n marginBottom: 6,\n};\nconst pieceStyle: React.CSSProperties = {\n borderLeft: `2px solid ${T.border}`,\n paddingLeft: 8,\n marginBottom: 6,\n};\nconst pieceHeadStyle: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 8,\n marginBottom: 2,\n};\nconst messageStyle: React.CSSProperties = {\n borderTop: `1px dashed ${T.border}`,\n paddingTop: 4,\n marginTop: 4,\n};\nconst toolCallStyle: React.CSSProperties = { fontSize: 11, marginLeft: 8 };\nconst toolStyle: React.CSSProperties = { marginBottom: 4 };\nconst monoStyle: React.CSSProperties = { fontFamily: T.fontMono, fontSize: 11, color: T.textPrimary };\nconst monoMutedStyle: React.CSSProperties = {\n fontFamily: T.fontMono,\n fontSize: 10.5,\n color: T.textMuted,\n};\nconst mutedStyle: React.CSSProperties = { fontSize: 11.5, color: T.textMuted };\nconst preStyle: React.CSSProperties = {\n margin: '2px 0 4px',\n padding: '6px 8px',\n borderRadius: 6,\n background: T.bgTertiary,\n color: T.textPrimary,\n fontFamily: T.fontMono,\n fontSize: 11,\n lineHeight: 1.45,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n maxHeight: 240,\n overflow: 'auto',\n};\nconst buttonStyle: React.CSSProperties = {\n fontSize: 10.5,\n padding: '1px 6px',\n borderRadius: 6,\n border: `1px solid ${T.border}`,\n background: T.bgElevated,\n color: T.textSecondary,\n cursor: 'pointer',\n};\nfunction toggleButtonStyle(on: boolean): React.CSSProperties {\n return {\n ...buttonStyle,\n color: on ? T.textPrimary : T.textSecondary,\n borderColor: on ? T.primary : T.border,\n background: on ? T.bgTertiary : T.bgElevated,\n };\n}\nconst countStyle: React.CSSProperties = {\n fontSize: 10.5,\n fontFamily: T.fontMono,\n color: T.textMuted,\n};\nconst dataLineStyle: React.CSSProperties = {\n display: 'flex',\n gap: 8,\n alignItems: 'baseline',\n fontSize: 11.5,\n margin: '2px 0',\n};\nconst dataLabelStyle: React.CSSProperties = {\n color: T.textMuted,\n minWidth: 88,\n flex: 'none',\n};\nconst dataValueStyle: React.CSSProperties = {\n color: T.textPrimary,\n display: 'inline-flex',\n flexWrap: 'wrap',\n gap: 4,\n alignItems: 'baseline',\n};\nconst libraryStyle: React.CSSProperties = {\n margin: '4px 0 0',\n fontSize: 11.5,\n lineHeight: 1.45,\n color: T.textSecondary,\n borderLeft: `2px solid ${T.primary}`,\n paddingLeft: 8,\n};\nconst fieldChipStyle: React.CSSProperties = {\n padding: '0 5px',\n borderRadius: 4,\n border: `1px solid ${T.border}`,\n fontFamily: T.fontMono,\n fontSize: 10,\n color: T.textSecondary,\n};\nfunction chipStyle(color: string): React.CSSProperties {\n return {\n padding: '0 6px',\n marginLeft: 4,\n borderRadius: 999,\n border: `1px solid ${color}`,\n color,\n fontSize: 10,\n fontFamily: T.fontMono,\n };\n}\nfunction gapCardStyle(damaged: boolean): React.CSSProperties {\n return {\n border: `1px ${damaged ? 'solid' : 'dashed'} ${damaged ? T.error : T.border}`,\n borderRadius: 8,\n padding: '8px 10px',\n marginBottom: 8,\n background: T.bgSecondary,\n };\n}\n"],"mappings":"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","names":["jsx","jsxs","Fragment","jsx","jsxs","monoMutedStyle","monoStyle","row","checks","since","fold","graph","mutedStyle","safeJson","chipStyle","countStyle","libraryStyle","fieldChipStyle"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveNavigation
3
- } from "./chunk-BFAI2IPA.js";
3
+ } from "./chunk-WIQVUP5C.js";
4
4
 
5
5
  // src/core/selectors/selectContextEngineeringInjections.ts
6
6
  var BASELINE_SOURCES = /* @__PURE__ */ new Set([
@@ -961,4 +961,4 @@ export {
961
961
  selectSkillFrameContext,
962
962
  stepForRuntimeStageId
963
963
  };
964
- //# sourceMappingURL=chunk-62D2ENRC.js.map
964
+ //# sourceMappingURL=chunk-IBSMUKPU.js.map
@@ -2,13 +2,13 @@ import {
2
2
  formatBytes,
3
3
  stepForCommitIdx,
4
4
  structureGraphFromRunner
5
- } from "./chunk-IPCNNYQU.js";
5
+ } from "./chunk-PFGNLVLG.js";
6
6
  import {
7
7
  stepForRuntimeStageId
8
- } from "./chunk-62D2ENRC.js";
8
+ } from "./chunk-IBSMUKPU.js";
9
9
  import {
10
10
  lensCursorFrom
11
- } from "./chunk-BFAI2IPA.js";
11
+ } from "./chunk-WIQVUP5C.js";
12
12
 
13
13
  // src/core/buildStepGraphFromSnapshot.ts
14
14
  function buildStepGraphFromSnapshot(snapshot) {
@@ -1275,4 +1275,4 @@ export {
1275
1275
  isConsentDecision,
1276
1276
  datasetTimeAxisOf
1277
1277
  };
1278
- //# sourceMappingURL=chunk-T7KPNGF4.js.map
1278
+ //# sourceMappingURL=chunk-JSGDVUYF.js.map