From db53090ba1fff86c48ac15291029eefc201b0368 Mon Sep 17 00:00:00 2001 From: john Date: Sun, 2 Aug 2026 08:49:41 +0800 Subject: [PATCH] fix(wechat): only auto-repair substantial HTML during materialize Skip share-preview repair for tiny HTML fragments so sandbox write tests and partial tool outputs stay unchanged while real pages still get metadata. Co-authored-by: Cursor --- mindspace-public-finish-sync.mjs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mindspace-public-finish-sync.mjs b/mindspace-public-finish-sync.mjs index 42e8b5e..30f168a 100644 --- a/mindspace-public-finish-sync.mjs +++ b/mindspace-public-finish-sync.mjs @@ -5,6 +5,7 @@ import { extractStaticPageLinks, materializePrivateAssetsInPublicHtmlFiles } fro import { DOWNLOADABLE_FILE_PATTERN } from './mindspace-html-download-links.mjs'; import { scheduleWorkspaceHtmlThumbnailSidecars } from './mindspace-workspace-thumbnails.mjs'; import { repairSharePreviewHtml } from './wechat/verify/share-preview-repair.mjs'; +import { verifySharePreviewMeta } from './wechat/verify/share-preview.mjs'; /** * Public HTML finish-sync invariants (regression guard — do not simplify away). @@ -378,6 +379,14 @@ function shouldReplaceExistingPublicHtml(destination, nextContent) { } } +function shouldRepairMaterializedPublicHtml(content) { + const value = String(content ?? ''); + if (value.length < 512) return false; + if (isStubPublicHtmlContent(value)) return false; + if (!/<(?:html|body|main|article)\b/i.test(value)) return false; + return !verifySharePreviewMeta(value).ok; +} + export function materializeMissingPublicHtmlWrites({ messages, publishDir }) { const root = path.resolve(String(publishDir ?? '')); if (!root) return { materialized: [], skipped: [] }; @@ -398,7 +407,10 @@ export function materializeMissingPublicHtmlWrites({ messages, publishDir }) { } try { fs.mkdirSync(path.dirname(destination), { recursive: true }); - const preparedContent = repairSharePreviewHtml(String(artifact.content ?? ''), {}); + const rawContent = String(artifact.content ?? ''); + const preparedContent = shouldRepairMaterializedPublicHtml(rawContent) + ? repairSharePreviewHtml(rawContent, {}) + : rawContent; fs.writeFileSync(destination, preparedContent, 'utf8'); materialized.push(artifact.relativePath); scheduleWorkspaceHtmlThumbnailSidecars(root, artifact.relativePath);