Compare commits

...

2 Commits

Author SHA1 Message Date
john 96d8e119ed docs: register feature/seo-geo-universal branch disposition
Memind CI / Test, build, and release guards (push) Failing after 2m58s
记录 SEO/GEO 全量能力合并 main 与 103 发布 20260916-103611-8d475087。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 10:43:02 +08:00
john 8d475087d2 test(wechat): 隔离 sidecar 缩略图候选用例,避免 SEO 回填污染
Memind CI / Test, build, and release guards (push) Failing after 3m37s
改用临时目录 fixture,不再依赖本地 MindSpace 可被 backfill 改写的 HTML。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 10:35:34 +08:00
2 changed files with 42 additions and 6 deletions
+27
View File
@@ -1,5 +1,32 @@
# 历史分支处置登记
## `feature/seo-geo-universal`
**状态:禁止再次引用。改动已提交并进入 `main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
审计日期:2026-09-16
分支 HEAD`357e26ab`
`main` 对应提交:`8d475087`(含 `fix/wechat-draft-test-fixture` 发布阻断修复)
### 交付内容
- 落盘/交付自动补齐 `mindspace-geo`Finish sync、delivery writeBack、health-report
- 全页面 SEO/GEO 回填工具链、`storage publications` 扫描、143 生产回填脚本
- Plaza/平台静态页 SEO 注入与统一审计
### 验证摘要
- `npm run verify:seo-geo`46 项通过
- `npm run verify:mindspace-publish-guards`ok
- 143 存量回填:2683 页,0 错误 / 0 警告
- 103 快速发布:`20260916-103611-8d475087`Portal 8081 健康 200
### 最终处置
- 保留本地分支名仅用于审计追溯。
- 不要从该分支继续开发、merge、cherry-pick 或构建 runtime/artifact。
- 发布依据使用 `main` @ `8d475087`(或后续从 `main` 打出的 runtime manifest)。
## `feature/learn-standalone-pages`
**状态:禁止再次引用。改动已提交并进入 `main`,该分支保留仅用于只读追溯,不是待合并开发分支。**
+15 -6
View File
@@ -1,5 +1,6 @@
import assert from 'node:assert/strict';
import fs from 'node:fs';
import os from 'node:os';
import path from 'node:path';
import test from 'node:test';
import {
@@ -196,12 +197,20 @@ test('convertRichMindSpacePageHtmlToWechatArticle extracts blog and startup temp
});
test('collectPageImageCandidates adds sidecar thumbnail when hero image missing', () => {
const publishDir = path.join(process.cwd(), 'MindSpace', '1c99b83b-0454-474f-a5d2-129d34506a32');
const html = fs.readFileSync(path.join(publishDir, 'public/qiuting-xiaoxi.html'), 'utf8');
const candidates = mindspaceWechatPageDraftInternals.collectPageImageCandidates(html, {
publishDir,
htmlRelativePath: 'public/qiuting-xiaoxi.html',
});
const publishDir = fs.mkdtempSync(path.join(os.tmpdir(), 'mindspace-wechat-draft-'));
const htmlRelativePath = 'public/no-hero-page.html';
const htmlPath = path.join(publishDir, htmlRelativePath);
fs.mkdirSync(path.dirname(htmlPath), { recursive: true });
fs.writeFileSync(
htmlPath,
'<!doctype html><html><head><title>无封面页</title></head><body><h1>无封面页</h1><p>正文</p></body></html>',
'utf8',
);
fs.writeFileSync(htmlPath.replace(/\.html$/i, '.thumbnail.png'), Buffer.from('png'), 'utf8');
const candidates = mindspaceWechatPageDraftInternals.collectPageImageCandidates(
fs.readFileSync(htmlPath, 'utf8'),
{ publishDir, htmlRelativePath },
);
assert.ok(candidates.some((item) => /\.thumbnail\.(png|svg)$/i.test(item.ref ?? '')));
});