fix(marketing): A-2.7a — comparatif consistency + SOC 2 hedge + cross-platform emoji

- Reword comparatif row 1 to make Teams ✗ for non-Loi-25-compliant US transfer
  (was ⚠ — too soft; territoriality is binary)
- Reword row 2 to positive: 'Souveraineté hors Cloud Act US' (was inverted —
  ✓ used for bad outcomes, breaking visual scan convention)
- Reword row 4 criterion to match deliverable: 'Diarisation jusqu'à 8 locuteurs'
  (was '8+', mismatched DictIA's '✓ Jusqu'à 8' cell)
- Reword row 5 to 'Coût mensuel par utilisateur' (was 'utilisateur/mois' —
  awkward French + missing NBSP per OQLF)
- Hedge SOC 2 Type II claim about OVH Beauharnois — third-party certification
  scope-dependent; reword to 'conformité documentée selon les services
  (ISO 27001, SOC 2 selon le périmètre)' to avoid LPC art. 219 risk
- Replace 🇨🇦 regional indicator pair with 🍁 maple leaf — renders reliably
  on Windows + Firefox Linux without color-emoji fonts
- Update existing test for renamed criteria keywords
- Add regression test for ✓-means-good convention + SOC 2 hedge guard

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Allison
2026-04-27 19:36:01 -04:00
parent 0d69fcd034
commit 31fada46d4
2 changed files with 38 additions and 18 deletions

View File

@@ -314,16 +314,16 @@
{
'critere': 'Conforme Loi&nbsp;25 sans transfert hors-Québec',
'dictia': '✓ Hébergement OVH Beauharnois',
'teams': ' Soumis Cloud Act (US)',
'teams': ' Soumis Cloud Act (US)',
'otter': '✗ Hébergement US',
'whisper': '✓ Aucun transfert (local)'
},
{
'critere': 'Exposé au Cloud Act US',
'dictia': ' Aucune exposition',
'teams': ' Microsoft = entité US',
'otter': ' Otter.ai Inc. = US',
'whisper': ' Local'
'critere': 'Souveraineté hors Cloud Act US',
'dictia': ' Aucune exposition',
'teams': ' Microsoft = entité US',
'otter': ' Otter.ai Inc. = US',
'whisper': ' Local'
},
{
'critere': 'WhisperX Large-v3 fine-tuné FR-CA',
@@ -333,14 +333,14 @@
'whisper': '⚠ FR générique de base'
},
{
'critere': 'Diarisation 8&nbsp;+ locuteurs (pyannote)',
'dictia': '✓ Jusqu\'à 8',
'critere': 'Diarisation jusqu\'à 8 locuteurs (pyannote)',
'dictia': '✓ Inclus par défaut',
'teams': '⚠ Limité ~6 (Premium)',
'otter': ' Variable',
'otter': ' Variable selon le forfait',
'whisper': '✗ Non incluse'
},
{
'critere': 'Coût par utilisateur/mois',
'critere': 'Coût mensuel par utilisateur',
'dictia': '0&nbsp;$ (forfait fixe)',
'teams': '~14&nbsp;$ CAD (Premium)',
'otter': '~20&nbsp;$ US (Business)',
@@ -395,9 +395,9 @@
<div class="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
{% for card in [
{
'icon': '🇨🇦',
'icon': '🍁',
'title': 'Hébergement OVH Beauharnois',
'desc': 'Centre de données SOC&nbsp;2 Type&nbsp;II en territoire québécois. Aucune sortie de juridiction sans consentement explicite et tracé.'
'desc': 'Centre de données opéré par OVHcloud Canada en territoire québécois. Conformité documentée selon les services (ISO&nbsp;27001, SOC&nbsp;2 selon le périmètre). Détails sur demande.'
},
{
'icon': '⚖️',

View File

@@ -523,12 +523,12 @@ def test_comparatif_table_has_4_competitors_and_6_criteria():
assert col in body, f"Comparatif missing column: {col}"
# 6 criteria (extract by their distinctive phrasing)
criteria_keywords = [
'Conforme Loi', # row 1
'Cloud Act', # row 2
'Large-v3 fine-tun', # row 3 (escaped or raw)
'Diarisation', # row 4
'utilisateur/mois', # row 5
'Audit trail' # row 6
'Conforme Loi', # row 1
'Souveraineté hors Cloud Act', # row 2 (renamed)
'Large-v3 fine-tun', # row 3
'Diarisation jusqu', # row 4 (renamed)
'mensuel par utilisateur', # row 5 (renamed)
'Audit trail' # row 6
]
for kw in criteria_keywords:
assert kw in body, f"Comparatif missing criterion containing: {kw}"
@@ -573,6 +573,11 @@ def test_conformite_4_pillars():
assert 'Mapp' in body, "Must use 'Mappé' (not 'Certifié')"
# Citation/contact for verification
assert 'info@dictia.ca' in body
# SOC 2 claim must be hedged ('selon le périmètre') not absolute
assert 'selon le périmètre' in body or 'selon le p&eacute;rim&egrave;tre' in body, \
"SOC 2 claim must be hedged — see code-review I-3"
# ISO 27001 reference is OK (verifiable from OVH compliance page)
assert 'ISO' in body and '27001' in body, "Reference to ISO 27001 expected"
def test_conformite_uses_wcag_safe_text_on_dark():
@@ -601,3 +606,18 @@ def test_no_unverifiable_competitor_claims():
]
for phrase in forbidden_phrases:
assert phrase not in body, f"Forbidden competitive claim: {phrase}"
def test_comparatif_check_marks_consistently_mean_good():
"""Each ✓ in the table should mark a 'good' outcome for that column.
Regression guard against the inverted-Cloud-Act-row bug.
Specifically: DictIA cell of every row must contain ✓ (DictIA wins on every criterion).
"""
client = app.test_client()
body = client.get('/').data.decode('utf-8')
# The 'Souveraineté hors Cloud Act' row must have ✓ for DictIA (after rename)
assert 'Souveraineté hors Cloud Act' in body
# And must NOT have the legacy inverted form
assert 'Exposé au Cloud Act' not in body, "Row 2 must be reworded to positive convention"
# Specifically check Teams gets ✗ for the territoriality criterion (was ⚠ before)
assert '✗ Soumis Cloud Act' in body, "Teams must show ✗ for non-Loi-25-compliant transfer"