diff --git a/public/js/admin/blog-curation.js b/public/js/admin/blog-curation.js index 324e71cc..9679327a 100644 --- a/public/js/admin/blog-curation.js +++ b/public/js/admin/blog-curation.js @@ -367,6 +367,35 @@ async function loadDraftQueue() { ` : ''} + + + ${item.data.moderation?.cultural_sensitivity ? ` +
+ + 🌍 Cultural Risk: ${item.data.moderation.cultural_sensitivity.risk_level} + ${item.data.moderation.cultural_sensitivity.risk_level === 'HIGH' ? ' ⚠️ Human review recommended' : ''} + + ${item.data.moderation.cultural_sensitivity.concerns?.length > 0 ? ` +
+ ${item.data.moderation.cultural_sensitivity.concerns.map(c => ` +
+ ${c.type.replace(/_/g, ' ')}: + ${c.detail} +
+ `).join('')} +
+ ` : ''} + ${item.data.moderation.cultural_sensitivity.suggestions?.length > 0 ? ` +
+ 💡 ${item.data.moderation.cultural_sensitivity.suggestions.length} adaptation(s) suggested +
+ ` : ''} +
+ ` : ''}
diff --git a/public/js/admin/media-triage.js b/public/js/admin/media-triage.js index 0e57fa6f..0feed5d4 100644 --- a/public/js/admin/media-triage.js +++ b/public/js/admin/media-triage.js @@ -432,6 +432,76 @@ async function showInquiryDetails(inquiryId) { `; } + // Cultural Sensitivity Check (Phase 1: inst_081 pluralism) + if (currentInquiry.response?.cultural_sensitivity) { + const cultural = currentInquiry.response.cultural_sensitivity; + const riskColors = { + 'LOW': { bg: 'green', text: 'green' }, + 'MEDIUM': { bg: 'yellow', text: 'yellow' }, + 'HIGH': { bg: 'red', text: 'red' } + }; + const colors = riskColors[cultural.risk_level] || riskColors['LOW']; + + html += ` + +
+

🌍 Cultural Sensitivity Analysis

+ + +
+

+ ${cultural.risk_level === 'HIGH' ? '⚠️ ' : cultural.risk_level === 'MEDIUM' ? '⚡ ' : '✓ '}Risk Level: ${cultural.risk_level} +

+

+ Recommended Action: ${cultural.recommended_action} +

+ ${cultural.risk_level === 'HIGH' ? ` +

+ 🚨 Human review recommended before sending (inst_081 pluralism) +

+ ` : ''} +
+ + ${cultural.concerns?.length > 0 ? ` + +
+

Cultural Concerns (${cultural.concerns.length}):

+
    + ${cultural.concerns.map(concern => ` +
  • + ${concern.type.replace(/_/g, ' ')}: ${escapeHtml(concern.detail)} + ${concern.audience_context ? `
    Context: ${escapeHtml(concern.audience_context)}` : ''} +
  • + `).join('')} +
+
+ ` : ''} + + ${cultural.suggestions?.length > 0 ? ` + +
+

Suggested Adaptations (${cultural.suggestions.length}):

+
    + ${cultural.suggestions.map(suggestion => ` +
  • ${escapeHtml(suggestion.suggestion || suggestion)}
  • + `).join('')} +
+
+ ` : ''} + +
+

+ Framework: PluralisticDeliberationOrchestrator (inst_081) | + Checked: ${new Date(cultural.checked_at).toLocaleString()} +

+

+ Note: AI flags cultural concerns but never blocks. Human decides final approach. +

+
+
+ `; + } + content.innerHTML = html; // Update modal buttons visibility