@company-semantics/contracts 45.2.0 → 45.3.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 (31) hide show
  1. package/package.json +9 -2
  2. package/src/__tests__/resource-keys.test.ts +59 -0
  3. package/src/api/generated-spec-hash.ts +2 -2
  4. package/src/api/generated.ts +93 -2
  5. package/src/comments/README.md +115 -0
  6. package/src/comments/__tests__/README.md +49 -0
  7. package/src/comments/__tests__/anchor-corpus.test.ts +202 -0
  8. package/src/comments/__tests__/fixtures/README.md +58 -0
  9. package/src/comments/__tests__/fixtures/comment-anchors.json +94 -0
  10. package/src/comments/__tests__/fixtures/comment-anchors.provenance.json +9 -0
  11. package/src/comments/__tests__/schemas.test.ts +274 -0
  12. package/src/comments/anchor.ts +120 -0
  13. package/src/comments/index.ts +43 -0
  14. package/src/comments/schemas.ts +227 -0
  15. package/src/generated/openapi-routes.ts +1 -0
  16. package/src/index.ts +42 -0
  17. package/src/notifications/__tests__/__snapshots__/registry.test.ts.snap +4 -0
  18. package/src/notifications/__tests__/__snapshots__/render-snapshot.test.ts.snap +741 -0
  19. package/src/notifications/__tests__/definition.test.ts +4 -3
  20. package/src/notifications/__tests__/fixtures.ts +34 -0
  21. package/src/notifications/__tests__/kinds.test.ts +11 -4
  22. package/src/notifications/__tests__/registry.test.ts +7 -5
  23. package/src/notifications/__tests__/render-snapshot.test.ts +36 -0
  24. package/src/notifications/kinds/comment-mention.ts +82 -0
  25. package/src/notifications/kinds/comment-reply.ts +79 -0
  26. package/src/notifications/kinds/index.ts +2 -0
  27. package/src/notifications/kinds.ts +12 -3
  28. package/src/notifications/payloads.ts +49 -0
  29. package/src/notifications/registry.ts +6 -2
  30. package/src/resource-keys.ts +68 -0
  31. package/src/user-notifications/kinds.ts +13 -1
@@ -1436,6 +1436,747 @@ This share was sent via Company Semantics.
1436
1436
  If you weren't expecting this, no action is required.
1437
1437
 
1438
1438
 
1439
+ /* EOM */
1440
+ ⓒ 2026 • Company Semantics
1441
+ https://companysemantics.ai
1442
+ ",
1443
+ }
1444
+ `;
1445
+
1446
+ exports[`email render > comment.mention · Document-level 1`] = `
1447
+ {
1448
+ "amp": "<!DOCTYPE html>
1449
+ <html amp4email data-css-strict lang="en">
1450
+ <head><meta charset="utf-8">
1451
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
1452
+ <style amp4email-boilerplate>body{visibility:hidden}</style>
1453
+ <style amp-custom>.csr-body { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0; }
1454
+ .csr-frame { max-width: 520px; margin: 0 auto; }
1455
+ .csr-p-normal { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0; }
1456
+ .csr-p-tight { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0; }
1457
+ .csr-p-none { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0; }
1458
+ .csr-eom { color: #bbb; }
1459
+ .csr-signature-link { color: #0047FF; text-decoration: none; }
1460
+ .csr-warning { color: #e7000b; }
1461
+ .csr-hr-normal { border: none; border-top: 1px solid #bbb; margin: 0 0 20px 0; }
1462
+ .csr-hr-tight { border: none; border-top: 1px solid #bbb; margin: 0 0 4px 0; }
1463
+ .csr-hr-none { border: none; border-top: 1px solid #bbb; margin: 0; }
1464
+ .csr-hero-normal { max-width: 100%; margin: 0 0 20px 0; }
1465
+ .csr-hero-tight { max-width: 100%; margin: 0 0 4px 0; }
1466
+ .csr-hero-none { max-width: 100%; margin: 0; }
1467
+ .csr-cta-box-normal { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 20px 0; max-width: 220px; }
1468
+ .csr-cta-box-tight { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 4px 0; max-width: 220px; }
1469
+ .csr-cta-box-none { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px; }
1470
+ .csr-cta-cell-linked { text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1471
+ .csr-cta-cell-code { padding: 16px 24px; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1472
+ .csr-cta-label { text-decoration: underline; }
1473
+ .csr-cta-anchor { display: block; padding: 16px 24px; color: #0047FF; text-decoration: none; }
1474
+ .csr-cta-code { color: #0047FF; }
1475
+ .csr-chat-rule-top { border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0; }
1476
+ .csr-chat-rule-bottom { border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0; }
1477
+ .csr-chat-row-24 { margin: 0 0 24px 0; }
1478
+ .csr-chat-row-16 { margin: 0 0 16px 0; }
1479
+ .csr-chat-attribution { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch; }
1480
+ .csr-chat-avatar-left { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; white-space: nowrap; }
1481
+ .csr-chat-avatar-left-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1482
+ .csr-chat-avatar-right { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap; }
1483
+ .csr-chat-avatar-right-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1484
+ .csr-chat-channel-left { width: 100%; text-align: left; }
1485
+ .csr-chat-channel-right { width: 100%; text-align: right; }
1486
+ .csr-chat-bubble-wrap { display: inline-block; max-width: 100%; vertical-align: bottom; }
1487
+ .csr-bubble-user { border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1488
+ .csr-bubble-assistant { border-radius: 8px 8px 8px 0; padding: 10px 14px; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1489
+ .csr-dots-over-cta { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; text-align: center; margin: 0 0 16px 0; }
1490
+ .csr-dots-cell { width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; }
1491
+ .csr-cta-stack { display: inline-block; text-align: left; }
1492
+ .cs-cta-hover:hover { background-color: #d1ffff; }</style></head>
1493
+ <body class="csr-body">
1494
+ <div class="csr-frame">
1495
+ <p class="csr-p-normal">Hi there,</p>
1496
+ <p class="csr-p-normal">Jordan Lee mentioned you in a comment on &quot;Engineering Handbook&quot;.</p>
1497
+ <hr class="cs-faint csr-chat-rule-top">
1498
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
1499
+ <tr>
1500
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1501
+ <td class="csr-chat-channel-right"><table cellpadding="0" cellspacing="0" border="0" class="csr-chat-bubble-wrap">
1502
+ <tr><td class="cs-bubble csr-bubble-user">Adding @Sam Chen — this whole doc needs a pass before Friday.</td></tr>
1503
+ </table></td>
1504
+ <td class="csr-chat-avatar-right">(•̀_ರ╮)</td>
1505
+ </tr>
1506
+ <tr>
1507
+ <td></td>
1508
+ <td class="cs-meta csr-chat-attribution">Jordan Lee</td>
1509
+ <td></td>
1510
+ </tr>
1511
+ </table>
1512
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-24">
1513
+ <tr>
1514
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1515
+ <td class="csr-chat-channel-right"><div class="csr-cta-stack"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover csr-cta-box-none">
1516
+ <tr><td class="csr-cta-cell-linked">
1517
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_456" class="cs-link csr-cta-anchor">&gt;&gt; <span class="csr-cta-label">VIEW COMMENT</span> &lt;&lt;</a>
1518
+ </td></tr>
1519
+ </table></div></td>
1520
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
1521
+ </tr>
1522
+ </table>
1523
+ <hr class="cs-faint csr-chat-rule-bottom">
1524
+ <p class="csr-p-tight">From: Jordan Lee</p>
1525
+ <p class="csr-p-normal">On: &quot;Engineering Handbook&quot;</p>
1526
+ <p class="csr-p-none">This notification was sent via Company Semantics.<br>You were named in this comment.</p>
1527
+ <p class="csr-p-none"><br><br><span class="cs-faint csr-eom">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link csr-signature-link">https://companysemantics.ai</a></p>
1528
+ </div>
1529
+ </body>
1530
+ </html>",
1531
+ "html": "<!DOCTYPE html>
1532
+ <html lang="en">
1533
+ <head><meta charset="UTF-8">
1534
+ <meta name="color-scheme" content="light dark">
1535
+ <meta name="supported-color-schemes" content="light dark">
1536
+ <style>.cs-cta-hover:hover { background-color: #d1ffff !important; }
1537
+ @media (prefers-color-scheme: dark) {
1538
+ body { background-color: #1a1a1a !important; color: #e8e8e8 !important; }
1539
+ .cs-faint { color: #666 !important; border-top-color: #666 !important; }
1540
+ .cs-meta { color: #8a8a8a !important; }
1541
+ .cs-cta { border-color: #00ffff !important; }
1542
+ .cs-cta-hover:hover { background-color: #154848 !important; }
1543
+ .cs-bubble { background: #154848 !important; color: #ffffff !important; }
1544
+ .cs-dots { color: #8a8a8a !important; }
1545
+ .cs-link { color: #00ffff !important; }
1546
+ .cs-destructive { color: #ff6b6b !important; }
1547
+ }</style>
1548
+ <!--[if mso]><style>.cs-cta td { padding: 16px 24px !important; }
1549
+ .cs-cta a { padding: 0 !important; }</style><![endif]--></head>
1550
+ <body style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0;">
1551
+ <div style="max-width: 520px; margin: 0 auto;">
1552
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Hi there,</p>
1553
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Jordan Lee mentioned you in a comment on &quot;Engineering Handbook&quot;.</p>
1554
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0;">
1555
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
1556
+ <tr>
1557
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1558
+ <td style="width: 100%; text-align: right;"><table cellpadding="0" cellspacing="0" border="0" style="display: inline-block; max-width: 100%; vertical-align: bottom;">
1559
+ <tr><td class="cs-bubble" style="border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666;">Adding @Sam Chen — this whole doc needs a pass before Friday.</td></tr>
1560
+ </table></td>
1561
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap;">(•̀_ರ╮)</td>
1562
+ </tr>
1563
+ <tr>
1564
+ <td></td>
1565
+ <td class="cs-meta" style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch;">Jordan Lee</td>
1566
+ <td></td>
1567
+ </tr>
1568
+ </table>
1569
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 24px 0;">
1570
+ <tr>
1571
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1572
+ <td style="width: 100%; text-align: right;"><div style="display: inline-block; text-align: left;"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover" style="display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px;">
1573
+ <tr><td style="text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px;">
1574
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_456" class="cs-link" style="display: block; padding: 16px 24px; color: #0047FF; text-decoration: none;">&gt;&gt; <span style="text-decoration: underline;">VIEW COMMENT</span> &lt;&lt;</a>
1575
+ </td></tr>
1576
+ </table></div></td>
1577
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
1578
+ </tr>
1579
+ </table>
1580
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0;">
1581
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">From: Jordan Lee</p>
1582
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">On: &quot;Engineering Handbook&quot;</p>
1583
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;">This notification was sent via Company Semantics.<br>You were named in this comment.</p>
1584
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;"><br><br><span class="cs-faint" style="color: #bbb;">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link" style="color: #0047FF; text-decoration: none;">https://companysemantics.ai</a></p>
1585
+ </div>
1586
+ </body>
1587
+ </html>",
1588
+ "subject": "Jordan Lee mentioned you in a comment",
1589
+ "text": "Hi there,
1590
+
1591
+ Jordan Lee mentioned you in a comment on "Engineering Handbook".
1592
+
1593
+ __________________________________________________________
1594
+
1595
+ ┌──────────────────────────────────────┐
1596
+ │ Adding @Sam Chen — this whole doc │
1597
+ │ needs a pass before Friday. │ (•̀_ರ╮)
1598
+ └──────────────────────────────────────┘
1599
+ Jordan Lee
1600
+
1601
+ *------------------------*
1602
+ | >> VIEW COMMENT << |
1603
+ *------------------------*
1604
+
1605
+ https://app.companysemantics.ai/doc/handbook?thread=th_456
1606
+ __________________________________________________________
1607
+
1608
+ From: Jordan Lee
1609
+ On: "Engineering Handbook"
1610
+
1611
+ This notification was sent via Company Semantics.
1612
+ You were named in this comment.
1613
+
1614
+
1615
+ /* EOM */
1616
+ ⓒ 2026 • Company Semantics
1617
+ https://companysemantics.ai
1618
+ ",
1619
+ }
1620
+ `;
1621
+
1622
+ exports[`email render > comment.mention · Text-anchored 1`] = `
1623
+ {
1624
+ "amp": "<!DOCTYPE html>
1625
+ <html amp4email data-css-strict lang="en">
1626
+ <head><meta charset="utf-8">
1627
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
1628
+ <style amp4email-boilerplate>body{visibility:hidden}</style>
1629
+ <style amp-custom>.csr-body { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0; }
1630
+ .csr-frame { max-width: 520px; margin: 0 auto; }
1631
+ .csr-p-normal { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0; }
1632
+ .csr-p-tight { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0; }
1633
+ .csr-p-none { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0; }
1634
+ .csr-eom { color: #bbb; }
1635
+ .csr-signature-link { color: #0047FF; text-decoration: none; }
1636
+ .csr-warning { color: #e7000b; }
1637
+ .csr-hr-normal { border: none; border-top: 1px solid #bbb; margin: 0 0 20px 0; }
1638
+ .csr-hr-tight { border: none; border-top: 1px solid #bbb; margin: 0 0 4px 0; }
1639
+ .csr-hr-none { border: none; border-top: 1px solid #bbb; margin: 0; }
1640
+ .csr-hero-normal { max-width: 100%; margin: 0 0 20px 0; }
1641
+ .csr-hero-tight { max-width: 100%; margin: 0 0 4px 0; }
1642
+ .csr-hero-none { max-width: 100%; margin: 0; }
1643
+ .csr-cta-box-normal { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 20px 0; max-width: 220px; }
1644
+ .csr-cta-box-tight { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 4px 0; max-width: 220px; }
1645
+ .csr-cta-box-none { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px; }
1646
+ .csr-cta-cell-linked { text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1647
+ .csr-cta-cell-code { padding: 16px 24px; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1648
+ .csr-cta-label { text-decoration: underline; }
1649
+ .csr-cta-anchor { display: block; padding: 16px 24px; color: #0047FF; text-decoration: none; }
1650
+ .csr-cta-code { color: #0047FF; }
1651
+ .csr-chat-rule-top { border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0; }
1652
+ .csr-chat-rule-bottom { border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0; }
1653
+ .csr-chat-row-24 { margin: 0 0 24px 0; }
1654
+ .csr-chat-row-16 { margin: 0 0 16px 0; }
1655
+ .csr-chat-attribution { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch; }
1656
+ .csr-chat-avatar-left { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; white-space: nowrap; }
1657
+ .csr-chat-avatar-left-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1658
+ .csr-chat-avatar-right { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap; }
1659
+ .csr-chat-avatar-right-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1660
+ .csr-chat-channel-left { width: 100%; text-align: left; }
1661
+ .csr-chat-channel-right { width: 100%; text-align: right; }
1662
+ .csr-chat-bubble-wrap { display: inline-block; max-width: 100%; vertical-align: bottom; }
1663
+ .csr-bubble-user { border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1664
+ .csr-bubble-assistant { border-radius: 8px 8px 8px 0; padding: 10px 14px; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1665
+ .csr-dots-over-cta { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; text-align: center; margin: 0 0 16px 0; }
1666
+ .csr-dots-cell { width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; }
1667
+ .csr-cta-stack { display: inline-block; text-align: left; }
1668
+ .cs-cta-hover:hover { background-color: #d1ffff; }</style></head>
1669
+ <body class="csr-body">
1670
+ <div class="csr-frame">
1671
+ <p class="csr-p-normal">Hi Sam Chen,</p>
1672
+ <p class="csr-p-normal">Jordan Lee mentioned you in a comment on &quot;Engineering Handbook&quot;.</p>
1673
+ <hr class="cs-faint csr-chat-rule-top">
1674
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
1675
+ <tr>
1676
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1677
+ <td class="csr-chat-channel-right"><table cellpadding="0" cellspacing="0" border="0" class="csr-chat-bubble-wrap">
1678
+ <tr><td class="cs-bubble csr-bubble-user">Should this say Q3 or Q4? @Sam Chen you owned this last time.</td></tr>
1679
+ </table></td>
1680
+ <td class="csr-chat-avatar-right">(•̀_ರ╮)</td>
1681
+ </tr>
1682
+ <tr>
1683
+ <td></td>
1684
+ <td class="cs-meta csr-chat-attribution">Jordan Lee</td>
1685
+ <td></td>
1686
+ </tr>
1687
+ </table>
1688
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-24">
1689
+ <tr>
1690
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1691
+ <td class="csr-chat-channel-right"><div class="csr-cta-stack"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover csr-cta-box-none">
1692
+ <tr><td class="csr-cta-cell-linked">
1693
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_123" class="cs-link csr-cta-anchor">&gt;&gt; <span class="csr-cta-label">VIEW COMMENT</span> &lt;&lt;</a>
1694
+ </td></tr>
1695
+ </table></div></td>
1696
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
1697
+ </tr>
1698
+ </table>
1699
+ <hr class="cs-faint csr-chat-rule-bottom">
1700
+ <p class="csr-p-tight">From: Jordan Lee</p>
1701
+ <p class="csr-p-tight">On: &quot;Engineering Handbook&quot;</p>
1702
+ <p class="csr-p-normal">Passage: &quot;ship the quarterly goals&quot;</p>
1703
+ <p class="csr-p-none">This notification was sent via Company Semantics.<br>You were named in this comment.</p>
1704
+ <p class="csr-p-none"><br><br><span class="cs-faint csr-eom">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link csr-signature-link">https://companysemantics.ai</a></p>
1705
+ </div>
1706
+ </body>
1707
+ </html>",
1708
+ "html": "<!DOCTYPE html>
1709
+ <html lang="en">
1710
+ <head><meta charset="UTF-8">
1711
+ <meta name="color-scheme" content="light dark">
1712
+ <meta name="supported-color-schemes" content="light dark">
1713
+ <style>.cs-cta-hover:hover { background-color: #d1ffff !important; }
1714
+ @media (prefers-color-scheme: dark) {
1715
+ body { background-color: #1a1a1a !important; color: #e8e8e8 !important; }
1716
+ .cs-faint { color: #666 !important; border-top-color: #666 !important; }
1717
+ .cs-meta { color: #8a8a8a !important; }
1718
+ .cs-cta { border-color: #00ffff !important; }
1719
+ .cs-cta-hover:hover { background-color: #154848 !important; }
1720
+ .cs-bubble { background: #154848 !important; color: #ffffff !important; }
1721
+ .cs-dots { color: #8a8a8a !important; }
1722
+ .cs-link { color: #00ffff !important; }
1723
+ .cs-destructive { color: #ff6b6b !important; }
1724
+ }</style>
1725
+ <!--[if mso]><style>.cs-cta td { padding: 16px 24px !important; }
1726
+ .cs-cta a { padding: 0 !important; }</style><![endif]--></head>
1727
+ <body style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0;">
1728
+ <div style="max-width: 520px; margin: 0 auto;">
1729
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Hi Sam Chen,</p>
1730
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Jordan Lee mentioned you in a comment on &quot;Engineering Handbook&quot;.</p>
1731
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0;">
1732
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
1733
+ <tr>
1734
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1735
+ <td style="width: 100%; text-align: right;"><table cellpadding="0" cellspacing="0" border="0" style="display: inline-block; max-width: 100%; vertical-align: bottom;">
1736
+ <tr><td class="cs-bubble" style="border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666;">Should this say Q3 or Q4? @Sam Chen you owned this last time.</td></tr>
1737
+ </table></td>
1738
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap;">(•̀_ರ╮)</td>
1739
+ </tr>
1740
+ <tr>
1741
+ <td></td>
1742
+ <td class="cs-meta" style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch;">Jordan Lee</td>
1743
+ <td></td>
1744
+ </tr>
1745
+ </table>
1746
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 24px 0;">
1747
+ <tr>
1748
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1749
+ <td style="width: 100%; text-align: right;"><div style="display: inline-block; text-align: left;"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover" style="display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px;">
1750
+ <tr><td style="text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px;">
1751
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_123" class="cs-link" style="display: block; padding: 16px 24px; color: #0047FF; text-decoration: none;">&gt;&gt; <span style="text-decoration: underline;">VIEW COMMENT</span> &lt;&lt;</a>
1752
+ </td></tr>
1753
+ </table></div></td>
1754
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
1755
+ </tr>
1756
+ </table>
1757
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0;">
1758
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">From: Jordan Lee</p>
1759
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">On: &quot;Engineering Handbook&quot;</p>
1760
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Passage: &quot;ship the quarterly goals&quot;</p>
1761
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;">This notification was sent via Company Semantics.<br>You were named in this comment.</p>
1762
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;"><br><br><span class="cs-faint" style="color: #bbb;">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link" style="color: #0047FF; text-decoration: none;">https://companysemantics.ai</a></p>
1763
+ </div>
1764
+ </body>
1765
+ </html>",
1766
+ "subject": "Jordan Lee mentioned you in a comment",
1767
+ "text": "Hi Sam Chen,
1768
+
1769
+ Jordan Lee mentioned you in a comment on "Engineering Handbook".
1770
+
1771
+ __________________________________________________________
1772
+
1773
+ ┌──────────────────────────────────────┐
1774
+ │ Should this say Q3 or Q4? @Sam Chen │
1775
+ │ you owned this last time. │ (•̀_ರ╮)
1776
+ └──────────────────────────────────────┘
1777
+ Jordan Lee
1778
+
1779
+ *------------------------*
1780
+ | >> VIEW COMMENT << |
1781
+ *------------------------*
1782
+
1783
+ https://app.companysemantics.ai/doc/handbook?thread=th_123
1784
+ __________________________________________________________
1785
+
1786
+ From: Jordan Lee
1787
+ On: "Engineering Handbook"
1788
+ Passage: "ship the quarterly goals"
1789
+
1790
+ This notification was sent via Company Semantics.
1791
+ You were named in this comment.
1792
+
1793
+
1794
+ /* EOM */
1795
+ ⓒ 2026 • Company Semantics
1796
+ https://companysemantics.ai
1797
+ ",
1798
+ }
1799
+ `;
1800
+
1801
+ exports[`email render > comment.reply · Document-level 1`] = `
1802
+ {
1803
+ "amp": "<!DOCTYPE html>
1804
+ <html amp4email data-css-strict lang="en">
1805
+ <head><meta charset="utf-8">
1806
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
1807
+ <style amp4email-boilerplate>body{visibility:hidden}</style>
1808
+ <style amp-custom>.csr-body { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0; }
1809
+ .csr-frame { max-width: 520px; margin: 0 auto; }
1810
+ .csr-p-normal { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0; }
1811
+ .csr-p-tight { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0; }
1812
+ .csr-p-none { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0; }
1813
+ .csr-eom { color: #bbb; }
1814
+ .csr-signature-link { color: #0047FF; text-decoration: none; }
1815
+ .csr-warning { color: #e7000b; }
1816
+ .csr-hr-normal { border: none; border-top: 1px solid #bbb; margin: 0 0 20px 0; }
1817
+ .csr-hr-tight { border: none; border-top: 1px solid #bbb; margin: 0 0 4px 0; }
1818
+ .csr-hr-none { border: none; border-top: 1px solid #bbb; margin: 0; }
1819
+ .csr-hero-normal { max-width: 100%; margin: 0 0 20px 0; }
1820
+ .csr-hero-tight { max-width: 100%; margin: 0 0 4px 0; }
1821
+ .csr-hero-none { max-width: 100%; margin: 0; }
1822
+ .csr-cta-box-normal { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 20px 0; max-width: 220px; }
1823
+ .csr-cta-box-tight { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 4px 0; max-width: 220px; }
1824
+ .csr-cta-box-none { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px; }
1825
+ .csr-cta-cell-linked { text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1826
+ .csr-cta-cell-code { padding: 16px 24px; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
1827
+ .csr-cta-label { text-decoration: underline; }
1828
+ .csr-cta-anchor { display: block; padding: 16px 24px; color: #0047FF; text-decoration: none; }
1829
+ .csr-cta-code { color: #0047FF; }
1830
+ .csr-chat-rule-top { border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0; }
1831
+ .csr-chat-rule-bottom { border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0; }
1832
+ .csr-chat-row-24 { margin: 0 0 24px 0; }
1833
+ .csr-chat-row-16 { margin: 0 0 16px 0; }
1834
+ .csr-chat-attribution { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch; }
1835
+ .csr-chat-avatar-left { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; white-space: nowrap; }
1836
+ .csr-chat-avatar-left-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1837
+ .csr-chat-avatar-right { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap; }
1838
+ .csr-chat-avatar-right-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
1839
+ .csr-chat-channel-left { width: 100%; text-align: left; }
1840
+ .csr-chat-channel-right { width: 100%; text-align: right; }
1841
+ .csr-chat-bubble-wrap { display: inline-block; max-width: 100%; vertical-align: bottom; }
1842
+ .csr-bubble-user { border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1843
+ .csr-bubble-assistant { border-radius: 8px 8px 8px 0; padding: 10px 14px; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
1844
+ .csr-dots-over-cta { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; text-align: center; margin: 0 0 16px 0; }
1845
+ .csr-dots-cell { width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; }
1846
+ .csr-cta-stack { display: inline-block; text-align: left; }
1847
+ .cs-cta-hover:hover { background-color: #d1ffff; }</style></head>
1848
+ <body class="csr-body">
1849
+ <div class="csr-frame">
1850
+ <p class="csr-p-normal">Hi there,</p>
1851
+ <p class="csr-p-normal">Alex Rivera replied in a comment thread on &quot;Engineering Handbook&quot;.</p>
1852
+ <hr class="cs-faint csr-chat-rule-top">
1853
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
1854
+ <tr>
1855
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1856
+ <td class="cs-dots csr-dots-cell">⋮</td>
1857
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
1858
+ </tr>
1859
+ </table>
1860
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
1861
+ <tr>
1862
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1863
+ <td class="csr-chat-channel-right"><table cellpadding="0" cellspacing="0" border="0" class="csr-chat-bubble-wrap">
1864
+ <tr><td class="cs-bubble csr-bubble-user">Started on the onboarding section.</td></tr>
1865
+ </table></td>
1866
+ <td class="csr-chat-avatar-right">(•̀_ರ╮)</td>
1867
+ </tr>
1868
+ <tr>
1869
+ <td></td>
1870
+ <td class="cs-meta csr-chat-attribution">Alex Rivera</td>
1871
+ <td></td>
1872
+ </tr>
1873
+ </table>
1874
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-24">
1875
+ <tr>
1876
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
1877
+ <td class="csr-chat-channel-right"><div class="csr-cta-stack"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover csr-cta-box-none">
1878
+ <tr><td class="csr-cta-cell-linked">
1879
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_456" class="cs-link csr-cta-anchor">&gt;&gt; <span class="csr-cta-label">VIEW THREAD</span> &lt;&lt;</a>
1880
+ </td></tr>
1881
+ </table></div></td>
1882
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
1883
+ </tr>
1884
+ </table>
1885
+ <hr class="cs-faint csr-chat-rule-bottom">
1886
+ <p class="csr-p-tight">From: Alex Rivera</p>
1887
+ <p class="csr-p-normal">On: &quot;Engineering Handbook&quot;</p>
1888
+ <p class="csr-p-none">This notification was sent via Company Semantics.<br>You are part of this thread.</p>
1889
+ <p class="csr-p-none"><br><br><span class="cs-faint csr-eom">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link csr-signature-link">https://companysemantics.ai</a></p>
1890
+ </div>
1891
+ </body>
1892
+ </html>",
1893
+ "html": "<!DOCTYPE html>
1894
+ <html lang="en">
1895
+ <head><meta charset="UTF-8">
1896
+ <meta name="color-scheme" content="light dark">
1897
+ <meta name="supported-color-schemes" content="light dark">
1898
+ <style>.cs-cta-hover:hover { background-color: #d1ffff !important; }
1899
+ @media (prefers-color-scheme: dark) {
1900
+ body { background-color: #1a1a1a !important; color: #e8e8e8 !important; }
1901
+ .cs-faint { color: #666 !important; border-top-color: #666 !important; }
1902
+ .cs-meta { color: #8a8a8a !important; }
1903
+ .cs-cta { border-color: #00ffff !important; }
1904
+ .cs-cta-hover:hover { background-color: #154848 !important; }
1905
+ .cs-bubble { background: #154848 !important; color: #ffffff !important; }
1906
+ .cs-dots { color: #8a8a8a !important; }
1907
+ .cs-link { color: #00ffff !important; }
1908
+ .cs-destructive { color: #ff6b6b !important; }
1909
+ }</style>
1910
+ <!--[if mso]><style>.cs-cta td { padding: 16px 24px !important; }
1911
+ .cs-cta a { padding: 0 !important; }</style><![endif]--></head>
1912
+ <body style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0;">
1913
+ <div style="max-width: 520px; margin: 0 auto;">
1914
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Hi there,</p>
1915
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Alex Rivera replied in a comment thread on &quot;Engineering Handbook&quot;.</p>
1916
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0;">
1917
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
1918
+ <tr>
1919
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1920
+ <td class="cs-dots" style="width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666;">⋮</td>
1921
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
1922
+ </tr>
1923
+ </table>
1924
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
1925
+ <tr>
1926
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1927
+ <td style="width: 100%; text-align: right;"><table cellpadding="0" cellspacing="0" border="0" style="display: inline-block; max-width: 100%; vertical-align: bottom;">
1928
+ <tr><td class="cs-bubble" style="border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666;">Started on the onboarding section.</td></tr>
1929
+ </table></td>
1930
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap;">(•̀_ರ╮)</td>
1931
+ </tr>
1932
+ <tr>
1933
+ <td></td>
1934
+ <td class="cs-meta" style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch;">Alex Rivera</td>
1935
+ <td></td>
1936
+ </tr>
1937
+ </table>
1938
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 24px 0;">
1939
+ <tr>
1940
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
1941
+ <td style="width: 100%; text-align: right;"><div style="display: inline-block; text-align: left;"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover" style="display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px;">
1942
+ <tr><td style="text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px;">
1943
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_456" class="cs-link" style="display: block; padding: 16px 24px; color: #0047FF; text-decoration: none;">&gt;&gt; <span style="text-decoration: underline;">VIEW THREAD</span> &lt;&lt;</a>
1944
+ </td></tr>
1945
+ </table></div></td>
1946
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
1947
+ </tr>
1948
+ </table>
1949
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0;">
1950
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">From: Alex Rivera</p>
1951
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">On: &quot;Engineering Handbook&quot;</p>
1952
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;">This notification was sent via Company Semantics.<br>You are part of this thread.</p>
1953
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;"><br><br><span class="cs-faint" style="color: #bbb;">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link" style="color: #0047FF; text-decoration: none;">https://companysemantics.ai</a></p>
1954
+ </div>
1955
+ </body>
1956
+ </html>",
1957
+ "subject": "Alex Rivera replied in a thread you are part of",
1958
+ "text": "Hi there,
1959
+
1960
+ Alex Rivera replied in a comment thread on "Engineering Handbook".
1961
+
1962
+ __________________________________________________________
1963
+
1964
+
1965
+
1966
+ ┌──────────────────────────────────────┐
1967
+ │ Started on the onboarding section. │ (•̀_ರ╮)
1968
+ └──────────────────────────────────────┘
1969
+ Alex Rivera
1970
+
1971
+ *-----------------------*
1972
+ | >> VIEW THREAD << |
1973
+ *-----------------------*
1974
+
1975
+ https://app.companysemantics.ai/doc/handbook?thread=th_456
1976
+ __________________________________________________________
1977
+
1978
+ From: Alex Rivera
1979
+ On: "Engineering Handbook"
1980
+
1981
+ This notification was sent via Company Semantics.
1982
+ You are part of this thread.
1983
+
1984
+
1985
+ /* EOM */
1986
+ ⓒ 2026 • Company Semantics
1987
+ https://companysemantics.ai
1988
+ ",
1989
+ }
1990
+ `;
1991
+
1992
+ exports[`email render > comment.reply · Text-anchored 1`] = `
1993
+ {
1994
+ "amp": "<!DOCTYPE html>
1995
+ <html amp4email data-css-strict lang="en">
1996
+ <head><meta charset="utf-8">
1997
+ <script async src="https://cdn.ampproject.org/v0.js"></script>
1998
+ <style amp4email-boilerplate>body{visibility:hidden}</style>
1999
+ <style amp-custom>.csr-body { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0; }
2000
+ .csr-frame { max-width: 520px; margin: 0 auto; }
2001
+ .csr-p-normal { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0; }
2002
+ .csr-p-tight { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0; }
2003
+ .csr-p-none { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0; }
2004
+ .csr-eom { color: #bbb; }
2005
+ .csr-signature-link { color: #0047FF; text-decoration: none; }
2006
+ .csr-warning { color: #e7000b; }
2007
+ .csr-hr-normal { border: none; border-top: 1px solid #bbb; margin: 0 0 20px 0; }
2008
+ .csr-hr-tight { border: none; border-top: 1px solid #bbb; margin: 0 0 4px 0; }
2009
+ .csr-hr-none { border: none; border-top: 1px solid #bbb; margin: 0; }
2010
+ .csr-hero-normal { max-width: 100%; margin: 0 0 20px 0; }
2011
+ .csr-hero-tight { max-width: 100%; margin: 0 0 4px 0; }
2012
+ .csr-hero-none { max-width: 100%; margin: 0; }
2013
+ .csr-cta-box-normal { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 20px 0; max-width: 220px; }
2014
+ .csr-cta-box-tight { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0 0 4px 0; max-width: 220px; }
2015
+ .csr-cta-box-none { display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px; }
2016
+ .csr-cta-cell-linked { text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
2017
+ .csr-cta-cell-code { padding: 16px 24px; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; }
2018
+ .csr-cta-label { text-decoration: underline; }
2019
+ .csr-cta-anchor { display: block; padding: 16px 24px; color: #0047FF; text-decoration: none; }
2020
+ .csr-cta-code { color: #0047FF; }
2021
+ .csr-chat-rule-top { border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0; }
2022
+ .csr-chat-rule-bottom { border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0; }
2023
+ .csr-chat-row-24 { margin: 0 0 24px 0; }
2024
+ .csr-chat-row-16 { margin: 0 0 16px 0; }
2025
+ .csr-chat-attribution { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch; }
2026
+ .csr-chat-avatar-left { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; white-space: nowrap; }
2027
+ .csr-chat-avatar-left-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
2028
+ .csr-chat-avatar-right { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap; }
2029
+ .csr-chat-avatar-right-hidden { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap; }
2030
+ .csr-chat-channel-left { width: 100%; text-align: left; }
2031
+ .csr-chat-channel-right { width: 100%; text-align: right; }
2032
+ .csr-chat-bubble-wrap { display: inline-block; max-width: 100%; vertical-align: bottom; }
2033
+ .csr-bubble-user { border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
2034
+ .csr-bubble-assistant { border-radius: 8px 8px 8px 0; padding: 10px 14px; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666; }
2035
+ .csr-dots-over-cta { font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; text-align: center; margin: 0 0 16px 0; }
2036
+ .csr-dots-cell { width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666; }
2037
+ .csr-cta-stack { display: inline-block; text-align: left; }
2038
+ .cs-cta-hover:hover { background-color: #d1ffff; }</style></head>
2039
+ <body class="csr-body">
2040
+ <div class="csr-frame">
2041
+ <p class="csr-p-normal">Hi Sam Chen,</p>
2042
+ <p class="csr-p-normal">Alex Rivera replied in a comment thread on &quot;Engineering Handbook&quot;.</p>
2043
+ <hr class="cs-faint csr-chat-rule-top">
2044
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
2045
+ <tr>
2046
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
2047
+ <td class="cs-dots csr-dots-cell">⋮</td>
2048
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
2049
+ </tr>
2050
+ </table>
2051
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-16">
2052
+ <tr>
2053
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
2054
+ <td class="csr-chat-channel-right"><table cellpadding="0" cellspacing="0" border="0" class="csr-chat-bubble-wrap">
2055
+ <tr><td class="cs-bubble csr-bubble-user">Q4 — we moved it at the last planning session.</td></tr>
2056
+ </table></td>
2057
+ <td class="csr-chat-avatar-right">(•̀_ರ╮)</td>
2058
+ </tr>
2059
+ <tr>
2060
+ <td></td>
2061
+ <td class="cs-meta csr-chat-attribution">Alex Rivera</td>
2062
+ <td></td>
2063
+ </tr>
2064
+ </table>
2065
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" class="csr-chat-row-24">
2066
+ <tr>
2067
+ <td class="csr-chat-avatar-left-hidden">[c_S]</td>
2068
+ <td class="csr-chat-channel-right"><div class="csr-cta-stack"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover csr-cta-box-none">
2069
+ <tr><td class="csr-cta-cell-linked">
2070
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_123" class="cs-link csr-cta-anchor">&gt;&gt; <span class="csr-cta-label">VIEW THREAD</span> &lt;&lt;</a>
2071
+ </td></tr>
2072
+ </table></div></td>
2073
+ <td class="csr-chat-avatar-right-hidden">(•̀_ರ╮)</td>
2074
+ </tr>
2075
+ </table>
2076
+ <hr class="cs-faint csr-chat-rule-bottom">
2077
+ <p class="csr-p-tight">From: Alex Rivera</p>
2078
+ <p class="csr-p-tight">On: &quot;Engineering Handbook&quot;</p>
2079
+ <p class="csr-p-normal">Passage: &quot;ship the quarterly goals&quot;</p>
2080
+ <p class="csr-p-none">This notification was sent via Company Semantics.<br>You are part of this thread.</p>
2081
+ <p class="csr-p-none"><br><br><span class="cs-faint csr-eom">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link csr-signature-link">https://companysemantics.ai</a></p>
2082
+ </div>
2083
+ </body>
2084
+ </html>",
2085
+ "html": "<!DOCTYPE html>
2086
+ <html lang="en">
2087
+ <head><meta charset="UTF-8">
2088
+ <meta name="color-scheme" content="light dark">
2089
+ <meta name="supported-color-schemes" content="light dark">
2090
+ <style>.cs-cta-hover:hover { background-color: #d1ffff !important; }
2091
+ @media (prefers-color-scheme: dark) {
2092
+ body { background-color: #1a1a1a !important; color: #e8e8e8 !important; }
2093
+ .cs-faint { color: #666 !important; border-top-color: #666 !important; }
2094
+ .cs-meta { color: #8a8a8a !important; }
2095
+ .cs-cta { border-color: #00ffff !important; }
2096
+ .cs-cta-hover:hover { background-color: #154848 !important; }
2097
+ .cs-bubble { background: #154848 !important; color: #ffffff !important; }
2098
+ .cs-dots { color: #8a8a8a !important; }
2099
+ .cs-link { color: #00ffff !important; }
2100
+ .cs-destructive { color: #ff6b6b !important; }
2101
+ }</style>
2102
+ <!--[if mso]><style>.cs-cta td { padding: 16px 24px !important; }
2103
+ .cs-cta a { padding: 0 !important; }</style><![endif]--></head>
2104
+ <body style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; color: #1a1a1a; background-color: #ffffff; margin: 0; padding: 0;">
2105
+ <div style="max-width: 520px; margin: 0 auto;">
2106
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Hi Sam Chen,</p>
2107
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Alex Rivera replied in a comment thread on &quot;Engineering Handbook&quot;.</p>
2108
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 12px 0 24px 0;">
2109
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
2110
+ <tr>
2111
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
2112
+ <td class="cs-dots" style="width: 100%; text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 20px; font-weight: bold; color: #666;">⋮</td>
2113
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
2114
+ </tr>
2115
+ </table>
2116
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 16px 0;">
2117
+ <tr>
2118
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
2119
+ <td style="width: 100%; text-align: right;"><table cellpadding="0" cellspacing="0" border="0" style="display: inline-block; max-width: 100%; vertical-align: bottom;">
2120
+ <tr><td class="cs-bubble" style="border-radius: 8px 8px 0 8px; padding: 10px 14px; text-align: right; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #ffffff; background: #666;">Q4 — we moved it at the last planning session.</td></tr>
2121
+ </table></td>
2122
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; white-space: nowrap;">(•̀_ರ╮)</td>
2123
+ </tr>
2124
+ <tr>
2125
+ <td></td>
2126
+ <td class="cs-meta" style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; color: #666; text-align: right; padding-top: 6px; padding-right: 1ch;">Alex Rivera</td>
2127
+ <td></td>
2128
+ </tr>
2129
+ </table>
2130
+ <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin: 0 0 24px 0;">
2131
+ <tr>
2132
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-right: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">[c_S]</td>
2133
+ <td style="width: 100%; text-align: right;"><div style="display: inline-block; text-align: left;"><table cellpadding="0" cellspacing="0" border="0" class="cs-cta cs-cta-hover" style="display: inline-block; border: 1px solid #0047FF; border-radius: 2px; margin: 0; max-width: 220px;">
2134
+ <tr><td style="text-align: center; font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px;">
2135
+ <a href="https://app.companysemantics.ai/doc/handbook?thread=th_123" class="cs-link" style="display: block; padding: 16px 24px; color: #0047FF; text-decoration: none;">&gt;&gt; <span style="text-decoration: underline;">VIEW THREAD</span> &lt;&lt;</a>
2136
+ </td></tr>
2137
+ </table></div></td>
2138
+ <td style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; padding-left: 8px; vertical-align: bottom; visibility: hidden; white-space: nowrap;">(•̀_ರ╮)</td>
2139
+ </tr>
2140
+ </table>
2141
+ <hr class="cs-faint" style="border: none; border-top: 1px solid #bbb; margin: 24px 0 12px 0;">
2142
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">From: Alex Rivera</p>
2143
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 4px 0;">On: &quot;Engineering Handbook&quot;</p>
2144
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0 0 20px 0;">Passage: &quot;ship the quarterly goals&quot;</p>
2145
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;">This notification was sent via Company Semantics.<br>You are part of this thread.</p>
2146
+ <p style="font-family: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; font-size: 13px; margin: 0;"><br><br><span class="cs-faint" style="color: #bbb;">/* EOM */</span><br>ⓒ 2026 • Company Semantics<br><a href="https://companysemantics.ai" target="_blank" rel="noopener noreferrer" class="cs-link" style="color: #0047FF; text-decoration: none;">https://companysemantics.ai</a></p>
2147
+ </div>
2148
+ </body>
2149
+ </html>",
2150
+ "subject": "Alex Rivera replied in a thread you are part of",
2151
+ "text": "Hi Sam Chen,
2152
+
2153
+ Alex Rivera replied in a comment thread on "Engineering Handbook".
2154
+
2155
+ __________________________________________________________
2156
+
2157
+
2158
+
2159
+ ┌──────────────────────────────────────┐
2160
+ │ Q4 — we moved it at the last │
2161
+ │ planning session. │ (•̀_ರ╮)
2162
+ └──────────────────────────────────────┘
2163
+ Alex Rivera
2164
+
2165
+ *-----------------------*
2166
+ | >> VIEW THREAD << |
2167
+ *-----------------------*
2168
+
2169
+ https://app.companysemantics.ai/doc/handbook?thread=th_123
2170
+ __________________________________________________________
2171
+
2172
+ From: Alex Rivera
2173
+ On: "Engineering Handbook"
2174
+ Passage: "ship the quarterly goals"
2175
+
2176
+ This notification was sent via Company Semantics.
2177
+ You are part of this thread.
2178
+
2179
+
1439
2180
  /* EOM */
1440
2181
  ⓒ 2026 • Company Semantics
1441
2182
  https://companysemantics.ai