Implement deterministic website build engine

This commit is contained in:
2026-07-23 13:36:17 -07:00
parent 3af326a1fa
commit a27ec7bf0c
8 changed files with 847 additions and 128 deletions
+31 -7
View File
@@ -320,19 +320,43 @@ export const BuildEngineTab: React.FC<BuildEngineTabProps> = ({
{/* TAB CONTENT: VALIDATION */}
{activeTab === "validation" && (
<div className="space-y-3 text-xs">
<div className="p-4 bg-emerald-950/40 border border-emerald-500/20 rounded-sm text-emerald-300 space-y-1">
<div
className={`p-4 rounded-sm space-y-1 border ${
selectedBuild.validationReport.summary.passed
? "bg-emerald-950/40 border-emerald-500/20 text-emerald-300"
: "bg-rose-950/40 border-rose-500/20 text-rose-300"
}`}
>
<div className="flex items-center space-x-2 font-bold">
<CheckCircle2 className="w-4 h-4 text-emerald-400" />
{selectedBuild.validationReport.summary.passed ? (
<CheckCircle2 className="w-4 h-4 text-emerald-400" />
) : (
<XCircle className="w-4 h-4 text-rose-400" />
)}
<span>
Validation Passed: 0 Fatal Errors, 0 Route Collisions
Validation {selectedBuild.validationReport.summary.passed ? "Passed" : "Failed"}: {selectedBuild.validationReport.summary.totalErrors} Errors, {selectedBuild.validationReport.summary.totalWarnings} Warnings
</span>
</div>
<p className="text-emerald-400 text-[11px]">
All required metadata, Markdown dialect constraints,
YouTube embed IDs, and media namespace routes passed
verification.
<p className="text-[11px] opacity-80">
{selectedBuild.validationReport.routeCollisions.length} route collisions, {selectedBuild.validationReport.missingMedia.length} missing media references, and {selectedBuild.validationReport.htmlPolicyViolations.length} HTML policy violations.
</p>
</div>
{selectedBuild.validationReport.errors.map((error, index) => (
<div key={`error-${index}`} className="p-3 bg-rose-950/20 border border-rose-500/20 rounded-sm">
<div className="font-mono font-bold text-rose-400">{error.code}</div>
<div className="text-neutral-300 mt-1">{error.message}</div>
{error.file && <div className="font-mono text-neutral-500 mt-1">{error.file}</div>}
</div>
))}
{selectedBuild.validationReport.warnings.map((warning, index) => (
<div key={`warning-${index}`} className="p-3 bg-amber-950/20 border border-amber-500/20 rounded-sm">
<div className="font-mono font-bold text-amber-400">{warning.code}</div>
<div className="text-neutral-300 mt-1">{warning.message}</div>
{warning.file && <div className="font-mono text-neutral-500 mt-1">{warning.file}</div>}
</div>
))}
</div>
)}
</div>