+
+
+
Truth Validation
+
Validate content against platform facts
+
+
+ Service Online
+ Port 41232
+
+
+
+ {/* Stats */}
+
+
+
+ {rulesLoading ? '...' : rulesData?.total ?? 0}
+
+
Active Rules
+
+
+
+ {rulesData?.rules.filter((r) => r.severity === 'critical').length ?? 0}
+
+
Critical Rules
+
+
+
+ {Object.keys(facts?.preferred_terms ?? {}).length}
+
+
Term Mappings
+
+
+
+ {Object.keys(facts?.economics ?? {}).length +
+ Object.keys(facts?.competitors ?? {}).length}
+
+
Platform Facts
+
+
+
+ {/* Validate Content */}
+
+
Validate Content
+
+
+
+
+
+
+
+
+
Try these examples:
+
+ {exampleTexts.map((text, i) => (
+
+ ))}
+
+
+ {validationResult && (
+
+
+
+ {validationResult.is_valid ? '✓ Valid' : '✗ Issues Found'}
+
+
+ {validationResult.critical_count > 0 && (
+ {validationResult.critical_count} Critical
+ )}
+ {validationResult.high_count > 0 && (
+ {validationResult.high_count} High
+ )}
+
+
+
+ {validationResult.issues.length > 0 && (
+
+ {validationResult.issues.map((issue, i) => (
+
+
+
+ {issue.severity.toUpperCase()}
+
+ {issue.rule_id}
+
+
{issue.message}
+ {issue.actual && (
+
Found: "{issue.actual}"
+ )}
+ {issue.correction && (
+
+ Suggestion: "{issue.correction}"
+
+ )}
+
+ ))}
+
+ )}
+
+ {validationResult.corrected_content && (
+
+
Corrected Content:
+
+ {validationResult.corrected_content}
+
+
+ )}
+
+ )}
+
+
+ {/* Platform Facts */}
+
+
+
Economic Facts
+ {factsLoading ? (
+
Loading...
+ ) : (
+
+ {Object.entries(facts?.economics ?? {}).map(([key, value]) => (
+
+ {key.replace(/_/g, ' ')}
+ {value}
+
+ ))}
+
+ )}
+
+
+
+
Competitor Facts
+ {factsLoading ? (
+
Loading...
+ ) : (
+
+ {Object.entries(facts?.competitors ?? {}).map(([key, value]) => (
+
+ {key.replace(/_/g, ' ')}
+ {value}
+
+ ))}
+
+ )}
+
+
+
+ {/* Preferred Terms */}
+
+
Preferred Terminology
+
+ Platform-appropriate language replacements
+
+
+ {Object.entries(facts?.preferred_terms ?? {}).map(([forbidden, preferred]) => (
+
+ {forbidden}
+ →
+ {preferred}
+
+ ))}
+
+
+
+ {/* Validation Rules */}
+
+
Active Validation Rules
+ {rulesLoading ? (
+
Loading rules...
+ ) : (
+
+ {rulesData?.rules.map((rule) => (
+
+
+
+
+ {rule.severity}
+
+ {rule.id}
+
+
{rule.category}
+
+
{rule.description}
+ {rule.pattern && (
+
{rule.pattern}
+ )}
+
+ ))}
+
+ )}
+
+
+ );
+}
diff --git a/features/platform-admin/frontend/src/pages/ml/index.ts b/features/platform-admin/frontend/src/pages/ml/index.ts
new file mode 100644
index 000000000..5c97be110
--- /dev/null
+++ b/features/platform-admin/frontend/src/pages/ml/index.ts
@@ -0,0 +1,3 @@
+export { SEOPage } from './SEOPage';
+export { TranslationsPage } from './TranslationsPage';
+export { TruthValidationPage } from './TruthValidationPage';