@certrev/cert-block 2.0.2 → 2.1.1

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 (59) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +10 -6
  3. package/dist/builder/card-contract.d.ts +12 -4
  4. package/dist/builder/card-contract.d.ts.map +1 -1
  5. package/dist/builder/card-contract.js +13 -5
  6. package/dist/builder/card-contract.js.map +1 -1
  7. package/dist/builder/contract-card.d.ts +6 -5
  8. package/dist/builder/contract-card.d.ts.map +1 -1
  9. package/dist/builder/contract-card.js +6 -5
  10. package/dist/builder/contract-card.js.map +1 -1
  11. package/dist/builder/envelope-face.d.ts +2 -0
  12. package/dist/builder/envelope-face.d.ts.map +1 -1
  13. package/dist/builder/envelope-face.js +9 -1
  14. package/dist/builder/envelope-face.js.map +1 -1
  15. package/dist/builder/version.d.ts +1 -1
  16. package/dist/builder/version.js +1 -1
  17. package/dist/components/CertBadge.d.ts.map +1 -1
  18. package/dist/components/CertBadge.js +4 -2
  19. package/dist/components/CertBadge.js.map +1 -1
  20. package/dist/components/render-cert-block.d.ts +9 -1
  21. package/dist/components/render-cert-block.d.ts.map +1 -1
  22. package/dist/components/render-cert-block.js +4 -4
  23. package/dist/components/render-cert-block.js.map +1 -1
  24. package/dist/components/render-def.d.ts +18 -0
  25. package/dist/components/render-def.d.ts.map +1 -1
  26. package/dist/components/render-def.js +15 -0
  27. package/dist/components/render-def.js.map +1 -1
  28. package/dist/modal/cert-modal-view.d.ts +3 -0
  29. package/dist/modal/cert-modal-view.d.ts.map +1 -1
  30. package/dist/modal/cert-modal-view.js +4 -3
  31. package/dist/modal/cert-modal-view.js.map +1 -1
  32. package/dist/modal/certrev-cert.js +4 -4
  33. package/dist/modal/display-strings.d.ts +9 -0
  34. package/dist/modal/display-strings.d.ts.map +1 -1
  35. package/dist/modal/display-strings.js +12 -1
  36. package/dist/modal/display-strings.js.map +1 -1
  37. package/dist/modal/ftc-disclosure.d.ts +6 -0
  38. package/dist/modal/ftc-disclosure.d.ts.map +1 -1
  39. package/dist/modal/ftc-disclosure.js +6 -0
  40. package/dist/modal/ftc-disclosure.js.map +1 -1
  41. package/dist/reader/render.d.ts.map +1 -1
  42. package/dist/reader/render.js +5 -10
  43. package/dist/reader/render.js.map +1 -1
  44. package/dist/webcomponent/render-badge-html.d.ts.map +1 -1
  45. package/dist/webcomponent/render-badge-html.js +6 -3
  46. package/dist/webcomponent/render-badge-html.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/builder/card-contract.ts +13 -5
  49. package/src/builder/contract-card.tsx +6 -5
  50. package/src/builder/envelope-face.ts +16 -1
  51. package/src/builder/version.ts +1 -1
  52. package/src/components/CertBadge.tsx +6 -3
  53. package/src/components/render-cert-block.ts +13 -4
  54. package/src/components/render-def.ts +24 -0
  55. package/src/modal/cert-modal-view.ts +7 -3
  56. package/src/modal/display-strings.ts +14 -1
  57. package/src/modal/ftc-disclosure.ts +8 -0
  58. package/src/reader/render.ts +12 -11
  59. package/src/webcomponent/render-badge-html.ts +6 -3
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/reader/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/reader/render.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"render-badge-html.d.ts","sourceRoot":"","sources":["../../src/webcomponent/render-badge-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAGN,KAAK,aAAa,EAGlB,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAErE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CAClC;AAwCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,CA2G3F"}
1
+ {"version":3,"file":"render-badge-html.d.ts","sourceRoot":"","sources":["../../src/webcomponent/render-badge-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAWH,OAAO,EAEN,KAAK,aAAa,EAIlB,MAAM,6BAA6B,CAAA;AACpC,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAErE,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACxC;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAA;CAClC;AAwCD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,GAAE,kBAAuB,GAAG,MAAM,CA8G3F"}
@@ -14,7 +14,7 @@
14
14
  import { escapeAttribute, escapeHtml, safeCssColor, safeHttpUrl } from '../components/escape.js';
15
15
  import { credentialSuffix, dedupeCredential, expertNameWithCredentials, formatDate, resolveDisplay, } from '../components/format.js';
16
16
  import { CERTREV_LINK_REL } from '../components/rel.js';
17
- import { CERT_SCOPE_LINE, CERT_STRINGS_VERSION, resolveRenderTheme, themeCssVarDeclarations, } from '../components/render-def.js';
17
+ import { CERT_STRINGS_VERSION, certScopeLineFor, resolveRenderTheme, themeCssVarDeclarations, } from '../components/render-def.js';
18
18
  const C = 'certrev-badge';
19
19
  /**
20
20
  * The badge has exactly two faces, and this is the ONE place that decides which. Anything
@@ -37,6 +37,8 @@ function attr(name, value) {
37
37
  export function renderBadgeHtml(payload, opts = {}) {
38
38
  const content = payload?.content ?? {};
39
39
  const expert = content.expert ?? null;
40
+ // 2.1.0: the locked scope line the signed `expert.reviewScope` picks ('text' is the text-only line).
41
+ const scopeLine = certScopeLineFor(expert?.reviewScope);
40
42
  const display = resolveDisplay(content.display ?? undefined, opts.accentColor, opts.renderDef);
41
43
  const theme = resolveRenderTheme(opts.renderDef);
42
44
  const style = badgeFace(opts.badgeStyle ?? display.badgeStyle);
@@ -91,13 +93,14 @@ export function renderBadgeHtml(payload, opts = {}) {
91
93
  // regardless of a render-def, matching the Shopify/WordPress engine fix. The
92
94
  // cue's "expert" links to the reviewer profile; the whole cue tag-strips to the
93
95
  // byte-verbatim COMPENSATED_EXPERT_CUE. The scope line is byte-verbatim
94
- // CERT_SCOPE_LINE (its curly apostrophe U+2019 survives escapeHtml untouched).
96
+ // CERT_SCOPE_LINE (its curly apostrophe U+2019 survives escapeHtml untouched), or 2.1.0's CERT_SCOPE_LINE_TEXT_ONLY
97
+ // when the signed `expert.reviewScope` is 'text' (`certScopeLineFor`).
95
98
  const cueInner = profileUrl
96
99
  ? `Compensated <a class="${C}__cue-link" href="${escapeAttribute(profileUrl)}" rel="${CERTREV_LINK_REL}">expert</a>`
97
100
  : 'Compensated expert';
98
101
  const disclosure = `<div class="${C}__disclosure">` +
99
102
  `<span class="${C}__compensated-cue">${cueInner}</span>` +
100
- `<p class="${C}__ftc" data-ftc-disclosure><span data-ftc-line>${escapeHtml(CERT_SCOPE_LINE)}</span></p>` +
103
+ `<p class="${C}__ftc" data-ftc-disclosure><span data-ftc-line>${escapeHtml(scopeLine)}</span></p>` +
101
104
  `</div>`;
102
105
  const verify = verifyUrl
103
106
  ? `<a class="${C}__verify" href="${escapeAttribute(verifyUrl)}" rel="${CERTREV_LINK_REL}" aria-label="Verify this certification on CertREV">Verify on CertREV</a>`
@@ -1 +1 @@
1
- {"version":3,"file":"render-badge-html.js","sourceRoot":"","sources":["../../src/webcomponent/render-badge-html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render-badge-html.js","sourceRoot":"","sources":["../../src/webcomponent/render-badge-html.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@certrev/cert-block",
3
- "version": "2.0.2",
3
+ "version": "2.1.1",
4
4
  "description": "Headless render edge for the CertREV CertDeliveryEnvelope: SSR-safe React cert components, a framework-agnostic <certrev-badge> Web Component, a schema.org JSON-LD projector, and a fail-closed verify layer over the shared VerdictKernel.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -273,7 +273,10 @@ function escapeAttribute(value: string): string {
273
273
  return value.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
274
274
  }
275
275
 
276
- /** The runtime's tag, or '' when the document names none. */
276
+ /**
277
+ * The runtime's tag, or '' when the document names none. 2.1.1: the Builder card no longer prints it (`cardHtml`); the
278
+ * card loads the runtime from the browser (`injectCardRuntime`). Kept, unchanged, for any other caller.
279
+ */
277
280
  export function cardRuntimeTag(card: CardDocumentV1): string {
278
281
  const runtime = card.assets.runtime
279
282
  if (!runtime) return ''
@@ -322,15 +325,20 @@ export function cardGraphTag(card: CardDocumentV1): string {
322
325
 
323
326
  /**
324
327
  * Exactly what a block prints inside its wrapper: its parts in page order and, only in the block holding the document's
325
- * first part (`cardCarriesAssets`), the head fragment before them and both dialogs (expert, then certificate), the
326
- * runtime's tag and (2.0.1) the page's graph after. So a split banner (a header block and a memo block) prints the head, the dialogs and the runtime
328
+ * first part (`cardCarriesAssets`), the head fragment before them and both dialogs (expert, then certificate) and
329
+ * (2.0.1) the page's graph after. So a split banner (a header block and a memo block) prints the head and the dialogs
327
330
  * once, in the header block, with no coordination between the blocks and with JavaScript off; the runtime finds a
328
- * control's dialog anywhere on the page by its placement. Every byte but the runtime tag is the document's own.
331
+ * control's dialog anywhere on the page by its placement. Every byte is the document's own, but the graph's tag.
332
+ *
333
+ * 2.1.1: no runtime tag. A `<script src>` the HTML parser meets is blocked by a policy whose `script-src` is a nonce with
334
+ * `'strict-dynamic'` (it carries no nonce, and `'strict-dynamic'` ignores host sources), which logged one violation and
335
+ * one CSP report on every page view. The block holding the assets loads the runtime from the browser instead
336
+ * (`injectCardRuntime`, in `ContractCardFace`'s layout effect, as 2.0.x did beside the tag), which such a policy allows.
329
337
  */
330
338
  export function cardHtml(card: CardDocumentV1, names: readonly CardPartName[]): string {
331
339
  let parts = ''
332
340
  for (const name of names) parts += card.parts[name] ?? ''
333
341
  if (!cardCarriesAssets(card, names)) return parts
334
342
  const dialogs = (card.dialogs.expert ?? '') + (card.dialogs.certificate ?? '')
335
- return card.assets.head + parts + dialogs + cardRuntimeTag(card) + cardGraphTag(card)
343
+ return card.assets.head + parts + dialogs + cardGraphTag(card)
336
344
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * The block's wrapper holds, as its `dangerouslySetInnerHTML`, exactly `cardHtml(card, names)`: the block's part hosts
5
5
  * in page order and, in the block holding the document's first part, the head fragment, both CertREV dialog hosts and
6
- * the runtime's tag (`card-contract.ts`).
6
+ * the page's graph (`card-contract.ts`). 2.1.1: no runtime tag; the card loads the runtime itself (below).
7
7
  * Each host is a `<certrev-card>` with a declarative shadow root (`<template shadowrootmode="open">`), which the
8
8
  * browser's HTML parser attaches as it reads the server's page: the card is complete with JavaScript off, and no page
9
9
  * rule reaches inside it. React never reconciles the hosts (they are not React children), so the hosted runtime may
@@ -16,10 +16,11 @@
16
16
  * declarative shadow DOM at all) gets each root attached from its template (`attachShadow` with the template's mode
17
17
  * and options, then the template's content). A host that already has its root is left alone, so a hydrated card,
18
18
  * whose roots the parser attached, is not touched.
19
- * - LOAD THE RUNTIME a React-inserted `<script>` never runs: once per page, into `document.head`, with its SRI
20
- * integrity and `crossorigin="anonymous"`, unless the runtime is already running (its global guard) or already
21
- * injected. Only the block that prints the runtime's tag loads it (`cardCarriesAssets`). The server's HTML carries
22
- * the same tag in that block's wrapper, which the parser runs; the runtime's init is idempotent, so it starts once.
19
+ * - LOAD THE RUNTIME: once per page, into `document.head`, with its SRI integrity and `crossorigin="anonymous"`, unless
20
+ * the runtime is already running (its global guard) or already injected. Only the block that prints the page's
21
+ * assets loads it (`cardCarriesAssets`), on a client mount and on hydration of the server's page alike. 2.1.1: the
22
+ * server's HTML no longer carries the runtime's tag, so this is the one load: a script the page's own (nonced)
23
+ * bundle inserts is what a `'nonce-…' 'strict-dynamic'` policy allows, where a parser-inserted tag is blocked.
23
24
  * Both run in a layout effect, before the browser paints the inserted card, so a client-mounted card never shows an
24
25
  * empty frame; the roots are checked after every commit of the block, whatever React wrote. React writes the card only
25
26
  * when its HTML changes: the `dangerouslySetInnerHTML` object is kept per string, since React 19 rewrites `innerHTML`
@@ -15,6 +15,8 @@
15
15
  * only with the dated verification beside it; no date, no credential (the name-only face);
16
16
  * - the compensation cue's PRESENCE is the only thing read; the words are the locked constant,
17
17
  * and an absent or null cue is the pro-bono face with no cue;
18
+ * - the review scope (2.1.0) is the signed `expert.reviewScope`: `'text'` prints the text-only scope line, anything else
19
+ * the full one;
18
20
  * - the def's `hidden` set removes only what is hideable (`HIDEABLE_FIELDS`); a def cannot hide
19
21
  * the scope line, the credential verification or the certificate link.
20
22
  *
@@ -33,7 +35,13 @@ import {
33
35
  type RenderCertBlockInput,
34
36
  renderCertBlock,
35
37
  } from '../components/render-cert-block.js'
36
- import { accentFg, HIDEABLE_FIELDS, isOpaqueHexColor, type ResolvedBlockTheme } from '../components/render-def.js'
38
+ import {
39
+ accentFg,
40
+ type CertReviewScope,
41
+ HIDEABLE_FIELDS,
42
+ isOpaqueHexColor,
43
+ type ResolvedBlockTheme,
44
+ } from '../components/render-def.js'
37
45
  import type { CertContent } from '../contract/kernel.js'
38
46
  import { type ReaderLayout, renderReaderFace } from '../reader/render.js'
39
47
  import type { CertChromeRenderDef } from './cert-chrome-data.js'
@@ -63,6 +71,10 @@ function isMode(v: unknown): v is CertBlockMode {
63
71
  return typeof v === 'string' && (MODES as readonly string[]).includes(v)
64
72
  }
65
73
 
74
+ function isReviewScope(v: unknown): v is CertReviewScope {
75
+ return v === 'text' || v === 'text_and_sources'
76
+ }
77
+
66
78
  function text(v: unknown): string {
67
79
  return typeof v === 'string' ? v : ''
68
80
  }
@@ -174,6 +186,9 @@ export function envelopeCardInput(
174
186
  certificateUrl: verifyUrl,
175
187
  // Presence only: a cue string renders the locked constant; absent or null is pro-bono.
176
188
  compensationCue: optionalText(expert.compensationCue) ? undefined : null,
189
+ // 2.1.0: what the review covered, as signed. Only a value this version knows is carried; absent stays absent, so
190
+ // an envelope signed before the field existed maps to exactly the 2.0.2 input.
191
+ ...(isReviewScope(expert.reviewScope) ? { reviewScope: expert.reviewScope } : {}),
177
192
  },
178
193
  }
179
194
  }
@@ -1,2 +1,2 @@
1
1
  /** This package's version, as its beacon reports it (held to `package.json` by `version.test.ts`). */
2
- export const CERT_BLOCK_VERSION = '2.0.2'
2
+ export const CERT_BLOCK_VERSION = '2.1.1'
@@ -26,9 +26,9 @@ import { safeHttpUrl } from './escape.js'
26
26
  import { credentialSuffix, dedupeCredential, expertNameWithCredentials, formatDate, resolveDisplay } from './format.js'
27
27
  import { CERTREV_LINK_REL } from './rel.js'
28
28
  import {
29
- CERT_SCOPE_LINE,
30
29
  CERT_STRINGS_VERSION,
31
30
  type CertRenderDef,
31
+ certScopeLineFor,
32
32
  resolveRenderTheme,
33
33
  themeCssVarDeclarations,
34
34
  } from './render-def.js'
@@ -98,6 +98,8 @@ export function CertBadge(props: CertBadgeProps) {
98
98
  const style = props.badgeStyle ?? display.badgeStyle
99
99
  const verifyUrl = safeHttpUrl(content.verifyUrl)
100
100
  const profileUrl = safeHttpUrl(content.expert.profileUrl)
101
+ // 2.1.0: the locked scope line the signed `expert.reviewScope` picks ('text' is the text-only line).
102
+ const scopeLine = certScopeLineFor((content.expert as { readonly reviewScope?: unknown }).reviewScope)
101
103
  const certifiedLabel = formatDate(content.certifiedAt)
102
104
  const updatedLabel = formatDate(content.contentModifiedAt)
103
105
  // Composed name + suffix, so the suffix drops a credential the stored display name already
@@ -189,7 +191,8 @@ export function CertBadge(props: CertBadgeProps) {
189
191
  the compliance BASELINE — it lands regardless of a render-def, matching the
190
192
  Shopify/WordPress engine fix. The cue's "expert" links to the reviewer's
191
193
  CertREV profile (the whole cue tag-strips to the byte-verbatim
192
- COMPENSATED_EXPERT_CUE). The scope line is byte-verbatim CERT_SCOPE_LINE. */}
194
+ COMPENSATED_EXPERT_CUE). The scope line is byte-verbatim CERT_SCOPE_LINE, or
195
+ CERT_SCOPE_LINE_TEXT_ONLY for a signed reviewScope of 'text' (2.1.0). */}
193
196
  <div className={`${ROOT_CLASS}__disclosure`}>
194
197
  <span className={`${ROOT_CLASS}__compensated-cue`}>
195
198
  Compensated{' '}
@@ -202,7 +205,7 @@ export function CertBadge(props: CertBadgeProps) {
202
205
  )}
203
206
  </span>
204
207
  <p className={`${ROOT_CLASS}__ftc`} data-ftc-disclosure>
205
- <span data-ftc-line>{CERT_SCOPE_LINE}</span>
208
+ <span data-ftc-line>{scopeLine}</span>
206
209
  </p>
207
210
  </div>
208
211
 
@@ -77,10 +77,11 @@ import {
77
77
  } from './memo-toggle.js'
78
78
  import { CERTREV_LINK_REL } from './rel.js'
79
79
  import {
80
- CERT_SCOPE_LINE,
81
80
  CERT_STRINGS_VERSION,
81
+ type CertReviewScope,
82
82
  COMPENSATED_EXPERT_CUE,
83
83
  CREDENTIAL_VERIFIED_ATTRIBUTION,
84
+ certScopeLineFor,
84
85
  RENDER_BLOCK_FONT_STACKS,
85
86
  type ResolvedBlockTheme,
86
87
  resolveBlockTheme,
@@ -114,6 +115,8 @@ export interface CertBlockFace {
114
115
  * supply them and taking them as input made compliance copy rewritable from a CMS
115
116
  * field. `compensationCue` survives as an input for exactly ONE decision — whether the
116
117
  * reviewer was compensated at all — never for the wording.
118
+ * `reviewScope` (2.1.0) is the same kind of input: it picks WHICH locked scope line prints
119
+ * (`certScopeLineFor`), never its words.
117
120
  */
118
121
  export interface CertBlockFacts {
119
122
  /** The content author (the "Written by" column). */
@@ -150,6 +153,12 @@ export interface CertBlockFacts {
150
153
  * reviewer: it makes no compensation claim, so it is true for volunteers too.
151
154
  */
152
155
  readonly compensationCue?: string | null
156
+ /**
157
+ * 2.1.0: WHAT the review covered, never the wording (the portal's signed `content.expert.reviewScope`). `'text'` prints
158
+ * the locked `CERT_SCOPE_LINE_TEXT_ONLY`; absent, `'text_and_sources'` or any other value prints `CERT_SCOPE_LINE`,
159
+ * exactly as 2.0.2 did (`certScopeLineFor`).
160
+ */
161
+ readonly reviewScope?: CertReviewScope
153
162
  }
154
163
 
155
164
  /** The full input to `renderCertBlock`. */
@@ -623,7 +632,7 @@ function bannerMemoCard(facts: CertBlockFacts, placed: PlacedTest, responsive =
623
632
  ? certificateLink(facts.certificateUrl, 'Certificate', STAMP_LINK_STYLE)
624
633
  : ''
625
634
  const scope = placed('scopeLine')
626
- ? `<div style="font-size:13px;color:var(--navy-55);margin-top:8px;line-height:1.5;">${escapeHtml(CERT_SCOPE_LINE)}</div>`
635
+ ? `<div style="font-size:13px;color:var(--navy-55);margin-top:8px;line-height:1.5;">${escapeHtml(certScopeLineFor(facts.reviewScope))}</div>`
627
636
  : ''
628
637
  return (
629
638
  `<div style="border:1px solid var(--navy-10);border-radius:calc(var(--br,14px) * 0.7);padding:24px;font-family:var(--cr-bf);">` +
@@ -665,7 +674,7 @@ function sidebarCard(facts: CertBlockFacts, placed: PlacedTest, responsive = fal
665
674
  const cueEl = showsCompensationCue(facts, placed)
666
675
  ? `<span style="font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;">${escapeHtml(COMPENSATED_EXPERT_CUE)}</span>`
667
676
  : ''
668
- const scopeEl = placed('scopeLine') ? escapeHtml(CERT_SCOPE_LINE) : ''
677
+ const scopeEl = placed('scopeLine') ? escapeHtml(certScopeLineFor(facts.reviewScope)) : ''
669
678
  const disclosure =
670
679
  cueEl || scopeEl
671
680
  ? `<div style="font-size:12.5px;line-height:1.5;color:var(--navy-55);margin-top:16px;">${cueEl}${cueEl && scopeEl ? ' · ' : ''}${scopeEl}</div>`
@@ -806,7 +815,7 @@ function renderCustomFace(facts: CertBlockFacts, placed: PlacedTest, responsive
806
815
  const cueEl = showsCompensationCue(facts, placed)
807
816
  ? `<span style="font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;">${escapeHtml(COMPENSATED_EXPERT_CUE)}</span>`
808
817
  : ''
809
- const scopeEl = placed('scopeLine') ? escapeHtml(CERT_SCOPE_LINE) : ''
818
+ const scopeEl = placed('scopeLine') ? escapeHtml(certScopeLineFor(facts.reviewScope)) : ''
810
819
  if (cueEl || scopeEl) {
811
820
  parts.push(
812
821
  `<div style="font-size:12.5px;line-height:1.5;color:var(--navy-55);margin-top:16px;">${cueEl}${cueEl && scopeEl ? ' · ' : ''}${scopeEl}</div>`,
@@ -141,6 +141,30 @@ export const COMPENSATED_EXPERT_CUE = 'Compensated expert'
141
141
  export const CERT_SCOPE_LINE =
142
142
  'Independent editorial review of this article’s text and sources. Not a product endorsement, nor medical advice.'
143
143
 
144
+ /**
145
+ * 2.1.0: the scope line for an article whose review covered its TEXT only (no references or sources section). Byte-verbatim
146
+ * copy of the portal's `FTC_DISCLOSURE_LINE_TEXT_ONLY` (`src/lib/embed/ftc-disclosure.ts`; Owen, Console decision
147
+ * af5b0db5, 2026-10-30: the review line says what the expert actually reviewed). Same curly apostrophe, same contract
148
+ * status as `CERT_SCOPE_LINE`: never re-word here.
149
+ */
150
+ export const CERT_SCOPE_LINE_TEXT_ONLY =
151
+ 'Independent editorial review of this article’s text. Not a product endorsement, nor medical advice.'
152
+
153
+ /**
154
+ * 2.1.0: what the review covered, the portal's signed `content.expert.reviewScope`. ABSENT means `text_and_sources`: every
155
+ * envelope signed before the field existed prints exactly as 2.0.2 printed it.
156
+ */
157
+ export type CertReviewScope = 'text' | 'text_and_sources'
158
+
159
+ /**
160
+ * The scope line for a review scope, the ONE rule every face of this package prints by: only an exact `'text'` is the
161
+ * text-only line; anything else (absent, null, `'text_and_sources'`, a value this version has never heard of) is the full
162
+ * `CERT_SCOPE_LINE`. The portal's `scopeLineFor` decides the same way.
163
+ */
164
+ export function certScopeLineFor(reviewScope: unknown): typeof CERT_SCOPE_LINE | typeof CERT_SCOPE_LINE_TEXT_ONLY {
165
+ return reviewScope === 'text' ? CERT_SCOPE_LINE_TEXT_ONLY : CERT_SCOPE_LINE
166
+ }
167
+
144
168
  /**
145
169
  * The delivered display-string EDITION, stamped as `data-certrev-strings-version`
146
170
  * so the crawl monitor can assert which verbatim strings a live face should carry.
@@ -29,7 +29,7 @@
29
29
 
30
30
  import { asText, escapeHtml } from './escape.js'
31
31
  import { resizeAvatarUrl } from './avatar-resize.js'
32
- import { CERT_SCOPE_LINE, formatCertDisplayDate } from './display-strings.js'
32
+ import { formatCertDisplayDate, scopeLineForReview } from './display-strings.js'
33
33
  import { checkIcon, chevronMark, verifiedStamp } from './certrev-cert-modal.styles.js'
34
34
 
35
35
  export interface CertModalCredential {
@@ -48,6 +48,9 @@ export interface CertModalExpert {
48
48
  /** The pre-composed material-connection label ('Compensated expert') or null/absent for
49
49
  * a pro-bono reviewer. Present → the disclosure footer renders the label; null/absent → label omitted. */
50
50
  compensationCue?: string | null
51
+ /** 2.1.0: what the review covered (`'text'` | `'text_and_sources'`, absent = text and sources). Picks the locked
52
+ * scope line the footer prints, never its words. */
53
+ reviewScope?: string | null
51
54
  }
52
55
 
53
56
  /** The subset of the signed `payload.content` the modals read (structural). */
@@ -171,12 +174,13 @@ function certifiedChip(cls: string): string {
171
174
  * (`expert.compensationCue`, a FINISHED string off the signed envelope) leads ONLY when the reviewer
172
175
  * was compensated; a pro-bono reviewer (null/absent cue) drops the label but keeps the scope line —
173
176
  * which makes no compensation claim, so it is true for volunteers too and renders unconditionally.
174
- * The scope line is the verbatim FTC copy (`CERT_SCOPE_LINE`), never re-assembled here.
177
+ * The scope line is the verbatim FTC copy (`CERT_SCOPE_LINE`, or 2.1.0's `CERT_SCOPE_LINE_TEXT_ONLY` when the signed
178
+ * `expert.reviewScope` is `'text'`), never re-assembled here.
175
179
  */
176
180
  function disclosureFooter(expert: CertModalExpert | null | undefined): string {
177
181
  const cue = asText(expert?.compensationCue).trim()
178
182
  const cueHtml = cue ? `<span class="crm-disclosure__cue">${escapeHtml(cue)}</span> ` : ''
179
- return `<div class="crm-disclosure">${cueHtml}${escapeHtml(CERT_SCOPE_LINE)}</div>`
183
+ return `<div class="crm-disclosure">${cueHtml}${escapeHtml(scopeLineForReview(expert?.reviewScope))}</div>`
180
184
  }
181
185
 
182
186
  /**
@@ -14,7 +14,7 @@
14
14
  * never legitimately carry renders nothing (see `formatCertDisplayDate`).
15
15
  */
16
16
 
17
- import { FTC_DISCLOSURE_LINE } from "./ftc-disclosure.js";
17
+ import { FTC_DISCLOSURE_LINE, FTC_DISCLOSURE_LINE_TEXT_ONLY } from "./ftc-disclosure.js";
18
18
 
19
19
  /** The compensation cue (guide "line A"), byte-verbatim from portal `COMPENSATED_EXPERT_CUE`. */
20
20
  export const COMPENSATED_EXPERT_CUE = "Compensated expert";
@@ -22,6 +22,19 @@ export const COMPENSATED_EXPERT_CUE = "Compensated expert";
22
22
  /** The FTC scope disclaimer, re-exported from the FTC SoT (portal `CERT_SCOPE_LINE = FTC_DISCLOSURE_LINE`). */
23
23
  export const CERT_SCOPE_LINE = FTC_DISCLOSURE_LINE;
24
24
 
25
+ /** 2.1.0: the text-only scope line (portal `FTC_DISCLOSURE_LINE_TEXT_ONLY`), for a review that covered the text only. */
26
+ export const CERT_SCOPE_LINE_TEXT_ONLY = FTC_DISCLOSURE_LINE_TEXT_ONLY;
27
+
28
+ /**
29
+ * 2.1.0: the scope line for the signed `content.expert.reviewScope`. Only an exact `"text"` is the text-only line; absent,
30
+ * null, `"text_and_sources"` or any other value is `CERT_SCOPE_LINE`, as 2.0.2 printed it. The same rule as
31
+ * `certScopeLineFor` in `../components/render-def.ts`, repeated because `src/modal/` imports nothing from `src/components/`
32
+ * (it is bundled standalone into `certrev-cert.js`).
33
+ */
34
+ export function scopeLineForReview(reviewScope: unknown): typeof CERT_SCOPE_LINE | typeof CERT_SCOPE_LINE_TEXT_ONLY {
35
+ return reviewScope === "text" ? CERT_SCOPE_LINE_TEXT_ONLY : CERT_SCOPE_LINE;
36
+ }
37
+
25
38
  /**
26
39
  * Format a timestamp the way every cert byline renders dates ("Jun 14, 2026", en-US short month,
27
40
  * UTC-pinned). Null for an unparseable input — callers treat that as "no date, no byline".
@@ -15,3 +15,11 @@
15
15
 
16
16
  export const FTC_DISCLOSURE_LINE =
17
17
  "Independent editorial review of this article’s text and sources. Not a product endorsement, nor medical advice." as const;
18
+
19
+ /**
20
+ * 2.1.0: the line for an article whose review covered its TEXT only (no references or sources section): a byte-faithful
21
+ * copy of the portal's `FTC_DISCLOSURE_LINE_TEXT_ONLY` (Owen, Console decision af5b0db5). Same contract status and curly
22
+ * apostrophe as `FTC_DISCLOSURE_LINE`.
23
+ */
24
+ export const FTC_DISCLOSURE_LINE_TEXT_ONLY =
25
+ "Independent editorial review of this article’s text. Not a product endorsement, nor medical advice." as const;
@@ -49,7 +49,7 @@
49
49
  */
50
50
  import { asText } from '../components/escape.js'
51
51
  import { CERTREV_LINK_REL } from '../components/rel.js'
52
- import { CERT_SCOPE_LINE, CERT_STRINGS_VERSION, COMPENSATED_EXPERT_CUE } from '../components/render-def.js'
52
+ import { CERT_STRINGS_VERSION, COMPENSATED_EXPERT_CUE, certScopeLineFor } from '../components/render-def.js'
53
53
  import type { CertContent } from '../contract/kernel.js'
54
54
  import { readerFace } from './face.js'
55
55
  import {
@@ -115,6 +115,13 @@ interface Facts {
115
115
  /** The joined credential labels, '' when there are none or the rung shows none (named, minimal). */
116
116
  readonly creds: string
117
117
  readonly hasCue: boolean
118
+ /**
119
+ * The scope sentence, by the signed `expert.reviewScope` (2.1.0, `certScopeLineFor`: `'text'` is the text-only line,
120
+ * anything else the full one). It is DIRECT text of the scope element (the demo's `<span class="dg-scope">`), which
121
+ * carries the `data-ftc-line` marker itself: no inner span, so the element's `.certrev-r-scope em` cue and the sentence
122
+ * are leaves of one element, as the demo paints them. The marker is on exactly one element per render, as before.
123
+ */
124
+ readonly scope: string
118
125
  readonly illus: boolean
119
126
  /** Whether the memo is printed: there is one, and the rung is the memo rung. */
120
127
  readonly hasMemo: boolean
@@ -161,6 +168,7 @@ function readFacts(input: ReaderFaceInput): Facts {
161
168
  showPhoto,
162
169
  creds: rung === 'named' || minimal ? '' : labels.join(', '),
163
170
  hasCue,
171
+ scope: certScopeLineFor(expert.reviewScope),
164
172
  illus: input.illustrative === true && !hasCue,
165
173
  hasMemo: !isBlank(content.memo) && rung === 'memo',
166
174
  toned: isTonedStyle(style),
@@ -209,13 +217,6 @@ function scopeLead(f: Facts): string {
209
217
  return ''
210
218
  }
211
219
 
212
- /**
213
- * The scope sentence is DIRECT text of the scope element (the demo's `<span class="dg-scope">`), which carries the
214
- * `data-ftc-line` marker itself: no inner span, so the element's `.certrev-r-scope em` cue and the sentence are leaves of
215
- * one element, as the demo paints them. The marker is on exactly one element per render, as before.
216
- */
217
- const SCOPE = CERT_SCOPE_LINE
218
-
219
220
  /**
220
221
  * The muted credential line, empty when the reviewer has no displayed credential (so no "verified" claim prints).
221
222
  *
@@ -296,7 +297,7 @@ function bannerCard(f: Facts): string {
296
297
  }
297
298
 
298
299
  // POR-9317: the memo card carries the scope line when there is a memo; with none this card is the sole claim face.
299
- const scope = scopeOn ? `<div class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${SCOPE}</div>` : ''
300
+ const scope = scopeOn ? `<div class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${f.scope}</div>` : ''
300
301
 
301
302
  return (
302
303
  `${sectionOpen(f, true, f.minimal ? 'Expert reviewed' : credentialAria(f))}\n <div class="certrev-r-card">\n` +
@@ -324,7 +325,7 @@ function bannerMemo(f: Facts): string {
324
325
  ` <blockquote>${esc(f.content.memo)}</blockquote>${links}</div>\n </div>\n` +
325
326
  ' <div class="certrev-r-rule"></div>\n <div class="certrev-r-vfoot">\n' +
326
327
  ` <span class="certrev-r-verified">${readerLogo('mono', 17, '')}Verified by <b>CertREV</b></span>\n` +
327
- ` <span class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${scopeLead(f)}${SCOPE}</span>\n </div>\n </div>\n</section>`
328
+ ` <span class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${scopeLead(f)}${f.scope}</span>\n </div>\n </div>\n</section>`
328
329
  )
329
330
  }
330
331
 
@@ -364,7 +365,7 @@ function sidebar(f: Facts): string {
364
365
  `${open}<div class="certrev-r-side-body">\n <div class="certrev-r-by">${avatar}<div>\n` +
365
366
  ` <b>${esc(f.ename)}${f.creds !== '' ? `<!-- -->, <!-- -->${esc(f.creds)}` : ''}</b>${verifiedLine(f, false)}</div>\n </div>` +
366
367
  `${fold}${more}` +
367
- `<div class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${scopeLead(f)}${SCOPE}</div>\n </div>` +
368
+ `<div class="certrev-r-scope" data-ftc-disclosure data-ftc-line>${scopeLead(f)}${f.scope}</div>\n </div>` +
368
369
  `${links}</div>\n</section>`
369
370
  )
370
371
  }
@@ -22,9 +22,9 @@ import {
22
22
  } from '../components/format.js'
23
23
  import { CERTREV_LINK_REL } from '../components/rel.js'
24
24
  import {
25
- CERT_SCOPE_LINE,
26
25
  CERT_STRINGS_VERSION,
27
26
  type CertRenderDef,
27
+ certScopeLineFor,
28
28
  resolveRenderTheme,
29
29
  themeCssVarDeclarations,
30
30
  } from '../components/render-def.js'
@@ -88,6 +88,8 @@ function attr(name: string, value: string | null | undefined): string {
88
88
  export function renderBadgeHtml(payload: CertPayload, opts: RenderBadgeOptions = {}): string {
89
89
  const content: LooseContent = payload?.content ?? {}
90
90
  const expert = content.expert ?? null
91
+ // 2.1.0: the locked scope line the signed `expert.reviewScope` picks ('text' is the text-only line).
92
+ const scopeLine = certScopeLineFor((expert as { readonly reviewScope?: unknown } | null)?.reviewScope)
91
93
  const display = resolveDisplay(content.display ?? undefined, opts.accentColor, opts.renderDef)
92
94
  const theme = resolveRenderTheme(opts.renderDef)
93
95
  const style = badgeFace(opts.badgeStyle ?? display.badgeStyle)
@@ -155,14 +157,15 @@ export function renderBadgeHtml(payload: CertPayload, opts: RenderBadgeOptions =
155
157
  // regardless of a render-def, matching the Shopify/WordPress engine fix. The
156
158
  // cue's "expert" links to the reviewer profile; the whole cue tag-strips to the
157
159
  // byte-verbatim COMPENSATED_EXPERT_CUE. The scope line is byte-verbatim
158
- // CERT_SCOPE_LINE (its curly apostrophe U+2019 survives escapeHtml untouched).
160
+ // CERT_SCOPE_LINE (its curly apostrophe U+2019 survives escapeHtml untouched), or 2.1.0's CERT_SCOPE_LINE_TEXT_ONLY
161
+ // when the signed `expert.reviewScope` is 'text' (`certScopeLineFor`).
159
162
  const cueInner = profileUrl
160
163
  ? `Compensated <a class="${C}__cue-link" href="${escapeAttribute(profileUrl)}" rel="${CERTREV_LINK_REL}">expert</a>`
161
164
  : 'Compensated expert'
162
165
  const disclosure =
163
166
  `<div class="${C}__disclosure">` +
164
167
  `<span class="${C}__compensated-cue">${cueInner}</span>` +
165
- `<p class="${C}__ftc" data-ftc-disclosure><span data-ftc-line>${escapeHtml(CERT_SCOPE_LINE)}</span></p>` +
168
+ `<p class="${C}__ftc" data-ftc-disclosure><span data-ftc-line>${escapeHtml(scopeLine)}</span></p>` +
166
169
  `</div>`
167
170
 
168
171
  const verify = verifyUrl