@clien-ai/mcp 0.10.0 → 0.10.2

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.
@@ -637,7 +637,17 @@ export const TOOLS = [
637
637
  '(5) the anti-sycophancy readout — explicit rejection count, `lowDiscrimination` broken-persona ' +
638
638
  'flags, and per-hypothesis disagreement splits. ' +
639
639
  '(6) hypothesis robustness — when a verdict FLIPPED under rephrasing the digest names the ' +
640
- 'downgraded verdict to act on instead of the reported one. ' +
640
+ 'downgraded verdict to act on instead of the reported one. Each row also quotes the ' +
641
+ // FUL-614. `scopeCaveat` is worth an advert line where the other two are not: it reaches
642
+ // NO other agent-visible text — the report markdown prints the statement and the evidence
643
+ // reading, and has never printed this — so an agent that is not told to look for it has
644
+ // no way to learn the marker exists. The wording is the digest's own label, minus the
645
+ // emoji, for the reason `ATTESTED_LABEL` records: an advert that names a marker
646
+ // differently from the text it describes sends an agent looking for nothing.
647
+ 'hypothesis STATEMENT, so a verdict is readable without resolving its id against the prose ' +
648
+ 'above, and — when the run set one — a "scope caveat" marking a verdict whose persona ' +
649
+ 'support came from OUTSIDE that persona\'s credibility domain: treat that support as ' +
650
+ 'directional, never as grounded. ' +
641
651
  STRUCTURED_OPEN_QUESTIONS_ADVERT +
642
652
  STRUCTURED_VERDICT_RATIONALE_ADVERT +
643
653
  'When a section is missing the digest SAYS SO ("NOT PRESENT on this run") — absent is not ' +
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,55 @@ const CLAIM_RENDER_CAP = 40;
59
59
  const CLAIM_TEXT_MAX = 140;
60
60
  /** Max personas / hypotheses / disagreements listed before capping. */
61
61
  const LIST_RENDER_CAP = 25;
62
+ /**
63
+ * Max chars of a hypothesis STATEMENT on a robustness row's first continuation
64
+ * line (FUL-614).
65
+ *
66
+ * This is the one of the three that drives the budget: `statement` is required by
67
+ * `HypothesisResultSchema` and was present on 371/371 hypothesis rows across the 49
68
+ * production jobs that carry any, so it renders on every row the section shows, and it
69
+ * is the only one of the three whose length nothing upstream bounds.
70
+ *
71
+ * Worst case is `LIST_RENDER_CAP` rows x (160 + ~20 for the label, indent, quotes and
72
+ * newline) ~= 4.5KB of statement lines on a saturated digest. ⚠️ THAT IS NOT THE WHOLE
73
+ * SECTION'S BUDGET: `evidenceReading` renders on nearly every row too (see
74
+ * {@link renderRobustness} for why its measured 3.8% is a fact about the stored corpus
75
+ * rather than about the field), adding 25 x (~85 for the composed sentence + ~15 of
76
+ * label and indent) ~= 2.5KB, so ~7KB together. A typical run has 5-8 hypotheses, so
77
+ * ~1.5-2KB. `scopeCaveat` stays off the budget at a real 7%.
78
+ */
79
+ const HYPOTHESIS_STATEMENT_MAX = 160;
80
+ /**
81
+ * Max chars of a `scopeCaveat` / `evidenceReading` continuation line (FUL-614).
82
+ *
83
+ * Both are specified as ONE LINE by their producers — the synthesiser prompt asks
84
+ * for "a one-line note naming the mismatch", and `evidenceReading` is composed from
85
+ * a fixed template in `agent/src/hypothesis-reading.ts` — so this is a defensive
86
+ * ceiling on values that should already be well under it, in the same spirit as
87
+ * {@link VERDICT_SUMMARY_MAX}, not a routine trim.
88
+ *
89
+ * It can be looser than {@link HYPOTHESIS_STATEMENT_MAX} because both fields are BOUNDED
90
+ * BY THEIR PRODUCERS in a way `statement` is not — the longest sentence
91
+ * `deriveEvidenceReading`'s template can compose runs ~96 chars, and the caveat is
92
+ * prompted as one line — NOT because either is rare. `statement` is free model prose the
93
+ * synthesiser echoes from the plan under no length instruction at all, so 160 there is a
94
+ * real trim rather than a backstop.
95
+ */
96
+ const HYPOTHESIS_NOTE_MAX = 200;
97
+ /**
98
+ * Max persona NAMES listed inside one group of a disagreement row (FUL-616).
99
+ *
100
+ * A separate cap from `LIST_RENDER_CAP` because it multiplies against it rather
101
+ * than sitting beside it: the split rows are already capped at 25, and each row
102
+ * now carries three name groups. Ten is comfortably above the personas a real run
103
+ * interviews, so this is a runaway backstop on a drifted payload and not a routine
104
+ * trim — the same posture `CLAIM_RENDER_CAP` takes.
105
+ *
106
+ * The overflow is STATED inline (`, +3 more`) rather than silently cut, for the
107
+ * reason the module header gives: a silent truncation reads as "that was all of
108
+ * them", and in this section that would read as "nobody else pushed back".
109
+ */
110
+ const SPLIT_NAME_CAP = 10;
62
111
  /**
63
112
  * The MODEL-ATTESTED tier's user-facing word, lower-cased for inline prose (FUL-363).
64
113
  *
@@ -77,6 +126,25 @@ const LIST_RENDER_CAP = 25;
77
126
  * than two. Do not cut a release between the two.
78
127
  */
79
128
  const ATTESTED_LABEL = 'cited';
129
+ /**
130
+ * The label on the continuation line that carries an attested claim's window (FUL-615).
131
+ *
132
+ * ⚠️ THE LABEL IS THE GUARD, not decoration. Before this line existed, the arrow shape
133
+ * (`cited →` versus the bare `←` a receipt gets) was the WHOLE visual difference between
134
+ * an attested row and a grounded one — the word itself stopped separating them when
135
+ * FUL-416 merged the two under "Cited". Adding an indented quoted excerpt takes the
136
+ * second difference away: `\n "…"` is EXACTLY the shape `renderReceiptPools` gives a
137
+ * verified persona receipt, so an agent skimming for indented quoted text below a claim
138
+ * would read the two as the same kind of evidence. The label restores the separation
139
+ * structurally, and it says what the excerpt is NOT rather than only what it is: this
140
+ * text is the page window a judge read, never a span verified against the claim.
141
+ *
142
+ * Pinned by `attested-window.test.ts`, which plants ONE identical quote on a persona
143
+ * receipt and on an attestation and asserts the two rendered lines stay distinguishable.
144
+ * An assertion that the quote renders is not enough — dropping the label leaves a line
145
+ * that still contains the quote.
146
+ */
147
+ const ATTESTED_WINDOW_LABEL = 'cited window (NOT a verified span)';
80
148
  /**
81
149
  * The FLOOR tier's word, mirrored from the app's `CLAIM_STATE_DISPLAY_LABELS.NO_RECEIPT`
82
150
  * (FUL-416 review, cross-model finding).
@@ -90,6 +158,31 @@ const ATTESTED_LABEL = 'cited';
90
158
  * carries the meaning the shared word no longer can.
91
159
  */
92
160
  const UNSOURCED_LABEL = 'unsourced';
161
+ /**
162
+ * The three labels on a robustness row's continuation lines (FUL-614).
163
+ *
164
+ * ⚠️ THE LABEL IS THE GUARD, for the same reason `ATTESTED_WINDOW_LABEL`'s doc gives:
165
+ * `\n "…"` is EXACTLY the shape `renderReceiptPools` gives a verified persona
166
+ * receipt, so an unlabelled indented quote under a verdict row would read as evidence
167
+ * that something was checked. A hypothesis statement is the opposite — it is the
168
+ * assertion under test, not support for it.
169
+ *
170
+ * ⚠️ THE QUOTING IS ALSO LOAD-BEARING, and it is the prose/proof line this file's header
171
+ * states (FUL-510). `statement` and `scopeCaveat` are MODEL-WRITTEN, so they render as
172
+ * QUOTED, labelled values — attributed to the run, exactly as `renderPersonaClaim`
173
+ * already carries a claim's model-written `text` below the `---`. `evidenceReading` is
174
+ * CODE-COMPOSED (`deriveEvidenceReading` in `agent/src/hypothesis-reading.ts` is its sole
175
+ * writer and STRIPS any model-supplied value on the rows it does not cover), so the digest
176
+ * states it unquoted, in its own voice. What never crosses is a model-written JUDGEMENT
177
+ * about the run — that is `verdictSummary`, and it renders above the separator.
178
+ *
179
+ * `EVIDENCE_READING_LABEL` deliberately echoes the report markdown's own `- **Rests on**:`
180
+ * (`agent/src/report-generator.ts`). One field, one word for it, on both surfaces — the
181
+ * lesson `ATTESTED_LABEL` above records the hard way.
182
+ */
183
+ const HYPOTHESIS_LABEL = 'hypothesis';
184
+ const SCOPE_CAVEAT_LABEL = '⚠️ scope caveat — persona support from OUTSIDE its credibility domain; directional, NOT grounded';
185
+ const EVIDENCE_READING_LABEL = 'rests on';
93
186
  // ---------------------------------------------------------------------------
94
187
  // Defensive accessors — every one of these answers "or nothing" rather than throwing
95
188
  // ---------------------------------------------------------------------------
@@ -269,8 +362,25 @@ function renderPersonaClaim(raw) {
269
362
  * Neither reading is grounding. The attestation's `sourceId` is printed under an
270
363
  * explicit `cited →` label rather than the bare `←` used for real receipts, so
271
364
  * the two can never be skim-read as the same thing. That distinction matters MORE now
272
- * that the word itself is shared with a span-verified receipt: the arrow shape and the
273
- * absence of a quote are what separate them in the rendered text.
365
+ * that the word itself is shared with a span-verified receipt.
366
+ *
367
+ * FUL-615: an attested claim now also carries the WINDOW the judge read, clipped to
368
+ * `RECEIPT_QUOTE_MAX` on a labelled continuation line. `cited` was the one provenance
369
+ * tier on this surface whose supporting text reached no agent-visible channel at all —
370
+ * a GROUNDED claim's span is readable as the `RCP-` excerpt it steers, but an attested
371
+ * claim's pointer resolves into `reportEvidence`, whose rows deliberately carry no quote
372
+ * (FUL-560). So the tier a reader is asked to weigh ("stronger than recall, still NOT a
373
+ * receipt") was the one tier they could not see for themselves.
374
+ *
375
+ * ⚠️ THE ABSENCE OF A QUOTE USED TO BE HALF THE SEPARATION, and this change spends it.
376
+ * What replaces it is `ATTESTED_WINDOW_LABEL` — see its doc for why a bare indented
377
+ * quote would have made an attested row read as a grounded one.
378
+ *
379
+ * DIGEST COST, in the idiom `RECEIPT_QUOTE_MAX`'s own doc sets, because a digest an
380
+ * agent truncates is a digest it does not read. Bounded by construction: this spine
381
+ * renders at most `CLAIM_RENDER_CAP` (40) rows and only attested ones get a window, so
382
+ * the worst case is 40 × (200 + ~40 for the label, indent, quotes and newline) ≈ 9.6 KB.
383
+ * Today it is 0 on every prod report — the A2 grantor writes no attestations yet.
274
384
  */
275
385
  function renderReportClaim(raw) {
276
386
  const claim = asRecord(raw);
@@ -310,7 +420,38 @@ function renderReportClaim(raw) {
310
420
  }
311
421
  const where = section ? ` (${section})` : '';
312
422
  const body = text ? ` — "${text}"` : '';
313
- return `- [${state}] ${id}${where}${provenance}${body}`;
423
+ return `- [${state}] ${id}${where}${provenance}${body}${attestedWindow(rawState, attestedSourceId, attestation?.quote)}`;
424
+ }
425
+ /**
426
+ * The attested claim's window: the captured snapshot text an independent judge read
427
+ * (FUL-615), on its own labelled continuation line or nothing at all.
428
+ *
429
+ * ⚠️ GATED ON THE SAME CONDITION AS THE `cited →` POINTER, not on the quote alone. A
430
+ * window under a row this renderer did NOT mark `cited` is an excerpt with nothing
431
+ * saying what it is — it would sit beneath a bare `unsourced` row and read as evidence
432
+ * for a claim written from model knowledge, which is the opposite of what the floor
433
+ * tier means. Both halves of the marker render together or neither does; `getReport`
434
+ * hands the RAW payload through when Zod rejects it, so `{ state: 'SPECULATION',
435
+ * attestation: { quote } }` genuinely reaches this code.
436
+ *
437
+ * `clipReceiptQuote` with NO spans, deliberately. The function windows an excerpt
438
+ * around the spans a claim was verified against, and an attested claim HAS none — that
439
+ * is the definition of the tier. Passing an empty list takes the head clip, which is
440
+ * the honest answer; inventing a window would be inventing the evidence. It also
441
+ * collapses whitespace, which is FUL-247's forgery guard doing its usual job here: this
442
+ * spine is a list of `- [STATE] …` rows and a newline in the quote would forge one.
443
+ *
444
+ * Spends the same `RECEIPT_QUOTE_MAX` budget as both receipt surfaces rather than a
445
+ * budget of its own, for the reason that constant's doc gives: an agent reading the
446
+ * same source text clipped two different ways has to wonder which is the real wording.
447
+ */
448
+ function attestedWindow(rawState, attestedSourceId, rawQuote) {
449
+ if (rawState !== 'NO_RECEIPT' || !attestedSourceId)
450
+ return '';
451
+ const quote = collapseWhitespace(str(rawQuote) ?? '');
452
+ if (!quote)
453
+ return '';
454
+ return `\n ${ATTESTED_WINDOW_LABEL}: "${clipReceiptQuote(quote, [], RECEIPT_QUOTE_MAX)}"`;
314
455
  }
315
456
  function renderPersonaSpine(reportData, channel) {
316
457
  const claims = asArray(reportData.claims);
@@ -354,7 +495,9 @@ function renderReportSpine(reportData, channel) {
354
495
  'independent finding). A GROUNDED claim\'s `RRCP-s{n}` ' +
355
496
  `indexes \`reportEvidence[n]\`. A NO_RECEIPT claim marked \`${ATTESTED_LABEL}\` means Claude read a ` +
356
497
  'supporting page an independent check vouched for, but no exact span was pinned — stronger than ' +
357
- 'recall, still NOT a receipt. Unmarked NO_RECEIPT is recalled model knowledge, unverified. ' +
498
+ `recall, still NOT a receipt. The \`${ATTESTED_WINDOW_LABEL}\` line beneath such a row is that page's ` +
499
+ 'text as we captured it: read it as the context the judge weighed, never as a span checked against ' +
500
+ 'the claim. Unmarked NO_RECEIPT is recalled model knowledge, unverified. ' +
358
501
  'Key on the state, never on whether a source id is present.\n' +
359
502
  `${lines.join('\n')}` +
360
503
  capNote(shown.length, claims.length, channel, 'report_data.reportClaims'));
@@ -598,6 +741,24 @@ function renderPersonas(reportData, channel) {
598
741
  * The anti-sycophancy readout — deterministically computed from the interviews,
599
742
  * not model-opined, which is exactly why it belongs in the text: it is the one
600
743
  * signal that says whether the personas actually pushed back or just agreed.
744
+ *
745
+ * FUL-616 gave the section its own evidence. It used to render six of the sixteen
746
+ * fields its four schemas declare, and the ten it withheld were the substance behind
747
+ * the six it printed: a headline claim about the rejection COUNT with no rejection
748
+ * behind it, and a split rendered as three integers when WHICH persona pushed back is
749
+ * usually the whole finding — "the buyer said no, the user said yes" is a different
750
+ * result from "1 of 3 disagreed". Names and rejections now render; the discrimination
751
+ * ratio and the tradeoff rows deliberately do not (see the allowlist reasons in
752
+ * `render-coverage.test.ts` — tradeoffs are the largest of the four shapes and the
753
+ * furthest from the question this section answers, so they stay the first thing to cut).
754
+ *
755
+ * ⚠️ THE COUNTS STAY BESIDE THE NAMES ON A SPLIT ROW, and that is a trust decision
756
+ * rather than a formatting one. A count is `array.length` — nothing a value can forge.
757
+ * A name is untrusted text: personas are user- or model-named, so a persona called
758
+ * `Ada, Marcus` renders as two supporters inside its group's parentheses. Keeping the
759
+ * integer in front means such a row disagrees with itself visibly (`1 supportive (Ada,
760
+ * Marcus)`) instead of quietly overstating who agreed with the idea — in the one
761
+ * section a reader consults precisely to find out whether the agreement was real.
601
762
  */
602
763
  function renderSycophancy(reportData, channel) {
603
764
  const signals = asRecord(reportData.sycophancySignals);
@@ -612,6 +773,12 @@ function renderSycophancy(reportData, channel) {
612
773
  const disagreements = asArray(signals.disagreements);
613
774
  const lines = [];
614
775
  // A healthy run has ≥1 explicit rejection; zero is itself the warning.
776
+ //
777
+ // ⚠️ THIS LINE IS THE SECTION'S HEADLINE AND IT IS UNCHANGED BY FUL-616. The
778
+ // zero case is the case the section exists for — a run where nobody said no is
779
+ // the classic sycophancy signature — and it renders with no evidence block below
780
+ // it because there is no evidence, which is the finding. A change to this readout
781
+ // that only looks right on a run WITH rejections has broken exactly that case.
615
782
  if (totalRejections !== null) {
616
783
  lines.push(totalRejections === 0
617
784
  ? '⚠️ 0 explicit rejections across all personas — nobody said no to anything. A run with no ' +
@@ -624,10 +791,13 @@ function renderSycophancy(reportData, channel) {
624
791
  // FUL-253: joined into one warning line, so a newline in a name would end
625
792
  // the warning early and leave the rest of the flagged personas rendering
626
793
  // as ordinary text below it.
627
- .map((raw) => safeInline(asRecord(raw)?.personaName, 100) ?? '(unnamed)');
794
+ .map((raw) => personaLabel(raw));
628
795
  lines.push(`⚠️ ${lowDiscriminationCount} persona(s) flagged \`lowDiscrimination\` (uniformly supportive AND ` +
629
796
  `rejected nothing — their answers carry little signal): ${names.join(', ')}`);
630
797
  }
798
+ const rejections = renderRejections(personaSignals, channel);
799
+ if (rejections)
800
+ lines.push(rejections);
631
801
  if (disagreements.length > 0) {
632
802
  const shown = disagreements.slice(0, LIST_RENDER_CAP);
633
803
  lines.push(`Hypotheses the personas SPLIT on (disagreement is signal, not noise):\n` +
@@ -635,10 +805,9 @@ function renderSycophancy(reportData, channel) {
635
805
  .map((raw) => {
636
806
  const d = asRecord(raw);
637
807
  const id = renderId(d?.hypothesisId);
638
- const supportive = asArray(d?.supportive).length;
639
- const negative = asArray(d?.negative).length;
640
- const neutral = asArray(d?.neutral).length;
641
- return ` - ${id}: ${supportive} supportive / ${neutral} neutral / ${negative} pushed back`;
808
+ return (` - ${id}: ${splitGroup(d?.supportive, 'supportive')}` +
809
+ ` / ${splitGroup(d?.neutral, 'neutral')}` +
810
+ ` / ${splitGroup(d?.negative, 'pushed back')}`);
642
811
  })
643
812
  .join('\n') +
644
813
  capNote(shown.length, disagreements.length, channel, 'report_data.sycophancySignals.disagreements'));
@@ -648,6 +817,149 @@ function renderSycophancy(reportData, channel) {
648
817
  }
649
818
  return `### Anti-sycophancy\n${lines.join('\n')}`;
650
819
  }
820
+ /**
821
+ * The continuation lines under one robustness row (FUL-614).
822
+ *
823
+ * Returns '' when the row has nothing to add. A field that is absent, empty or
824
+ * whitespace-only emits NO LINE — never a label with nothing after it, which would
825
+ * read as "the run recorded a scope caveat and we cannot show it" on the 93% of rows
826
+ * that simply have none. That is `safeInline`'s own `null` contract, and here it is
827
+ * the whole difference between a qualification and a false alarm.
828
+ *
829
+ * ⚠️ EVERY VALUE GOES THROUGH `safeInline`, and the reason is the one `renderRobustness`
830
+ * already states for `status` / `downgradedStatus`: these rows are `- ` entries whose
831
+ * point is the ⚠️ FLIPPED warning, and `statement` / `scopeCaveat` are MODEL-WRITTEN —
832
+ * the first untrusted prose to reach this section. A newline in either ends the line
833
+ * early and lets the remainder pose as a sibling row for the same hypothesis WITHOUT the
834
+ * warning, which is precisely the reading a forgery would want to drop (FUL-253).
835
+ * `render-forgery.test.ts` has planted poisoned values on these three fields since
836
+ * FUL-263 — before anything rendered them, which is that file's whole premise — so its
837
+ * assertions bit on this change with no fixture edit.
838
+ */
839
+ function hypothesisDetail(result) {
840
+ const statement = safeInline(result?.statement, HYPOTHESIS_STATEMENT_MAX);
841
+ const scopeCaveat = safeInline(result?.scopeCaveat, HYPOTHESIS_NOTE_MAX);
842
+ const evidenceReading = safeInline(result?.evidenceReading, HYPOTHESIS_NOTE_MAX);
843
+ return ((statement ? `\n ${HYPOTHESIS_LABEL}: "${statement}"` : '') +
844
+ (scopeCaveat ? `\n ${SCOPE_CAVEAT_LABEL}: "${scopeCaveat}"` : '') +
845
+ (evidenceReading ? `\n ${EVIDENCE_READING_LABEL}: ${evidenceReading}` : ''));
846
+ }
847
+ /**
848
+ * What a persona name that arrived unreadable renders as (FUL-616).
849
+ *
850
+ * One bare word carrying no punctuation of its own, so each caller decides the
851
+ * shape around it: `personaLabel` parenthesises it because it stands in for a
852
+ * whole label, and `splitGroup` prints it bare because the group already supplies
853
+ * the parentheses. Parenthesising it in both places produced
854
+ * `1 pushed back ((unnamed))` — doubled brackets that read as a formatting bug on
855
+ * exactly the drift path where a reader has least evidence to tell a bug from the
856
+ * data it is describing.
857
+ */
858
+ const UNNAMED_PERSONA = 'unnamed';
859
+ /**
860
+ * How a persona is named wherever the anti-sycophancy section names one (FUL-616).
861
+ *
862
+ * The role is here because the name alone was ambiguous in the only place this
863
+ * section ever printed one — the flagged list — and FUL-616 adds a second place
864
+ * (the rejection rows), which would have reproduced the same ambiguity in new
865
+ * text. Two personas can easily share a first name in one run; "Dana (VP
866
+ * Engineering)" and "Dana (Founder)" are two different findings about who
867
+ * rubber-stamped the idea, and telling them apart is the point of naming anyone.
868
+ *
869
+ * Both halves go through `safeInline` at the budget `renderPersonaSpine` already
870
+ * spends on the same two fields, so the same persona is clipped identically
871
+ * wherever the digest names it.
872
+ */
873
+ function personaLabel(raw) {
874
+ const persona = asRecord(raw);
875
+ const name = safeInline(persona?.personaName, 100) ?? `(${UNNAMED_PERSONA})`;
876
+ const role = safeInline(persona?.personaRole, 100);
877
+ return role ? `${name} (${role})` : name;
878
+ }
879
+ /**
880
+ * One stance group of a disagreement row: the count, then who (FUL-616).
881
+ *
882
+ * COUNT FIRST, deliberately — see the forgery note on `renderSycophancy`. The
883
+ * integer is derived from the array and cannot be influenced by what is in it, so
884
+ * it stays the authoritative half of the group and the names are the detail it
885
+ * carries. An empty group renders as the bare count (`0 neutral`) rather than as
886
+ * an empty pair of parentheses, matching `safeInline`'s rule that "nothing to say"
887
+ * gets a caller-chosen wording instead of empty punctuation.
888
+ *
889
+ * COST — this is the one cap here that MULTIPLIES, so its ceiling is stated rather
890
+ * than left to be derived. Worst case is `LIST_RENDER_CAP` split rows × 3 groups ×
891
+ * `SPLIT_NAME_CAP` names × the 100-char `safeInline` budget ≈ 76 KB, an order above
892
+ * anything else the digest renders. That number is a DRIFTED-PAYLOAD CEILING, not a
893
+ * run cost, and the two bounds it multiplies are not independent in a real run: a
894
+ * disagreement row exists per hypothesis and its groups partition the persona pool,
895
+ * so five hypotheses across five personas is 5 × 3 groups × ≤5 short names. MEASURED
896
+ * on the 5-persona, 3-split, 4-rejection run {@link renderRejections} also cites: all
897
+ * three split rows together are ~330 bytes of the section's ~1,100 — every persona in
898
+ * every row, the densest a run of that size gets. Even all 25 rows at that density is
899
+ * under 3 KB; reaching a tenth of the ceiling takes a `report_data` no
900
+ * synthesis run can produce — which is what a backstop is for, the posture
901
+ * `CLAIM_RENDER_CAP` already takes.
902
+ */
903
+ function splitGroup(raw, label) {
904
+ const names = asArray(raw).map((n) => safeInline(n, 100) ?? UNNAMED_PERSONA);
905
+ const shown = names.slice(0, SPLIT_NAME_CAP);
906
+ const dropped = names.length - shown.length;
907
+ const who = shown.length > 0 ? ` (${shown.join(', ')}${dropped > 0 ? `, +${dropped} more` : ''})` : '';
908
+ return `${names.length} ${label}${who}`;
909
+ }
910
+ /**
911
+ * The rejection rows — the evidence behind the section's own headline (FUL-616).
912
+ *
913
+ * ⚠️ THE INTRO LINE SAYS WHAT THIS TEXT IS NOT, and that is a guard rather than a
914
+ * caveat. These reasons are indented quoted prose, which is the exact shape
915
+ * `renderReceiptPools` gives a verified persona receipt and the shape FUL-615 had to
916
+ * put a label in front of for the same reason. A synthetic persona's reason for
917
+ * saying no is not a source quote and must never be cited as one; the section's own
918
+ * value depends on that line staying honest, because a reader who mistook these for
919
+ * retrieved quotes would be trusting the sycophancy readout MORE than the report it
920
+ * is a check on.
921
+ *
922
+ * ⚠️ ROWS ARE NOT FILTERED FOR SUBSTANCE, on purpose. `computeSycophancySignals`
923
+ * already drops hollow `{ option: '', reason: '' }` rejections before storing — that
924
+ * filter is what makes `totalRejections` a real count rather than a presence tally —
925
+ * so a row reaching here with nothing in it is DRIFT, and the honest render is a row
926
+ * saying so. Dropping it silently would make this block disagree with the headline
927
+ * count above it and give a reader no way to see which number was wrong.
928
+ *
929
+ * Clipping reuses this file's existing budgets rather than minting one: `CLAIM_TEXT_MAX`
930
+ * for the reason (the cap the digest already spends on model-written claim prose, which
931
+ * is what this is) and the 100 `renderPersonaSpine` spends on a short persona field for
932
+ * the option label.
933
+ *
934
+ * DIGEST COST, in the idiom `RECEIPT_QUOTE_MAX`'s doc sets, because a digest an agent
935
+ * truncates is a digest it does not read. Bounded by construction at `LIST_RENDER_CAP`
936
+ * (25) rows × (140 + 100 + ~40 for the label, indent and separators) ≈ 7 KB worst case.
937
+ * MEASURED on a 5-persona, 4-rejection, 3-split run: the whole section is ~1,100 bytes,
938
+ * of which this block is ~320 — against the +8,360 FUL-247 spent on the receipt quotes.
939
+ * A run with ZERO rejections — the case this section exists for — adds nothing at all.
940
+ */
941
+ function renderRejections(personaSignals, channel) {
942
+ const rows = [];
943
+ let total = 0;
944
+ for (const raw of personaSignals) {
945
+ const label = personaLabel(raw);
946
+ for (const rejectionRaw of asArray(asRecord(raw)?.rejections)) {
947
+ total += 1;
948
+ if (rows.length >= LIST_RENDER_CAP)
949
+ continue;
950
+ const rejection = asRecord(rejectionRaw);
951
+ const option = safeInline(rejection?.option, 100) ?? '(option not recorded)';
952
+ const reason = safeInline(rejection?.reason, CLAIM_TEXT_MAX);
953
+ rows.push(` - ${label} ✕ ${option}${reason ? ` — "${reason}"` : ''}`);
954
+ }
955
+ }
956
+ if (rows.length === 0)
957
+ return '';
958
+ return ('What the personas explicitly rejected (the evidence behind the count above — the wording is a ' +
959
+ 'SYNTHETIC persona\'s own, never a retrieved source quote, and must not be cited as one):\n' +
960
+ rows.join('\n') +
961
+ capNote(rows.length, total, channel, 'report_data.sycophancySignals.personaSignals'));
962
+ }
651
963
  /**
652
964
  * Hypothesis verdict robustness.
653
965
  *
@@ -655,6 +967,37 @@ function renderSycophancy(reportData, channel) {
655
967
  * report's top-level `status` is NOT the verdict to act on — `downgradedStatus`
656
968
  * is. That inversion is precisely the kind of thing an agent gets wrong when it
657
969
  * reads only the prose, so it is stated per-hypothesis rather than as a footnote.
970
+ *
971
+ * FUL-614: a row used to identify its hypothesis BY ID ALONE, so the sharpest line in
972
+ * this digest named something a reader could only resolve by grepping the prose above
973
+ * for `H3`. It now carries the statement, and — where the run set them — the FUL-102
974
+ * scope caveat and the FUL-396 evidence reading, on labelled continuation lines. See
975
+ * {@link hypothesisDetail}.
976
+ *
977
+ * ⚠️ WHAT MAKES A FIELD THE ACTUAL GAP IS HOW OFTEN IT IS THERE — and a coverage rate
978
+ * says that only once it is DATED AGAINST THE PRODUCER THAT WRITES IT. Measured
979
+ * 2026-08-24 over the 49 stored production jobs carrying `hypothesisResults` (371 rows):
980
+ * `statement` 371/371, `scopeCaveat` 7%, `evidenceReading` 14/371 (3.8%). The first two
981
+ * are properties of the fields. The third is NOT. `withEvidenceReadings` — its sole
982
+ * writer, and the reason the line is code-composed rather than opined — landed
983
+ * 2026-08-17 (FUL-396), one week before that measurement, and
984
+ * `agent/src/hypothesis-reading.ts` documents 357/357 production hypotheses carrying at
985
+ * least one evidence item. So 3.8% is the age of the stored corpus, not the rarity of
986
+ * the field: it fires on essentially every row written since, and the 14 rows that carry
987
+ * it are consistent with being exactly that post-landing slice. `scopeCaveat`'s 7%
988
+ * survives the same check — its prompt has shipped since 2026-07-12 (FUL-102).
989
+ *
990
+ * So `statement` is what makes every row self-describing, `evidenceReading` joins it on
991
+ * nearly every row from here on, and `scopeCaveat` is the one field of the three that
992
+ * reaches NO other agent-visible text at all:
993
+ * `generateReportMarkdown` prints the statement as a heading, the evidence reading as
994
+ * `- **Rests on**:` and every robustness variant as its own bullet, but it has never
995
+ * printed the scope caveat. A verdict whose persona support came from outside that
996
+ * persona's credibility domain reached an agent with nothing marking it.
997
+ *
998
+ * The variants block and the evidence arrays stay out, decided with Alex on the same
999
+ * measurement: the markdown above the separator already prints every re-ask and every
1000
+ * evidence summary, and they are the largest per-row cost this section could take.
658
1001
  */
659
1002
  function renderRobustness(reportData, channel) {
660
1003
  const results = asArray(reportData.hypothesisResults);
@@ -681,16 +1024,21 @@ function renderRobustness(reportData, channel) {
681
1024
  const flipped = tribool(robustness?.flipped);
682
1025
  const downgraded = safeInline(robustness?.downgradedStatus, 40);
683
1026
  const count = survived !== null && total !== null ? `held ${survived}/${total} framings` : 'survival count unavailable';
1027
+ // Appended to EVERY branch, not just the flipped one. A held verdict is the row a
1028
+ // reader is most likely to act on unexamined, so it is the last one that should be
1029
+ // identified by an id alone.
1030
+ const detail = hypothesisDetail(result);
684
1031
  if (flipped === true) {
685
1032
  return (`- ${id}: reported \`${status}\` — ⚠️ FLIPPED under rephrasing (${count}). ` +
686
- `The verdict to act on is \`${downgraded ?? 'weaker than reported — downgrade unavailable'}\`, NOT \`${status}\`.`);
1033
+ `The verdict to act on is \`${downgraded ?? 'weaker than reported — downgrade unavailable'}\`, NOT \`${status}\`.` +
1034
+ detail);
687
1035
  }
688
1036
  // An unreadable `flipped` is NOT "held" — say so rather than printing the
689
1037
  // verdict as if it had survived re-asking.
690
1038
  if (flipped === null) {
691
- return `- ${id}: reported \`${status}\` — ⚠️ flip status UNREADABLE (${count}); treat this verdict as un-retested.`;
1039
+ return `- ${id}: reported \`${status}\` — ⚠️ flip status UNREADABLE (${count}); treat this verdict as un-retested.${detail}`;
692
1040
  }
693
- return `- ${id}: \`${status}\` — ${count}`;
1041
+ return `- ${id}: \`${status}\` — ${count}${detail}`;
694
1042
  });
695
1043
  const flippedCount = withRobustness.filter((raw) => bool(asRecord(asRecord(raw)?.robustness)?.flipped)).length;
696
1044
  const unreadableFlips = withRobustness.filter((raw) => tribool(asRecord(asRecord(raw)?.robustness)?.flipped) === null).length;