feat(health): add P0 health channel kernel and encrypted health zone.

Lock health recording behind confirm-only state machines, reject public publishes for the health category, and ship the 14-day experiment Page Data templates with tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
john
2026-09-02 09:35:55 +08:00
parent d2d463b1db
commit f96fdcb3b9
34 changed files with 3140 additions and 9 deletions
+4 -2
View File
@@ -73,6 +73,7 @@ const CATEGORY_DESCRIPTIONS: Record<MindSpaceCategory['code'], string> = {
oa: '上传文档、表格和资料,让 AI 生成报告与页面',
private: '已停用',
public: '管理可公开使用的页面、图片和静态资源',
health: '加密健康档案,仅本人或口令访问',
draft: '继续编辑尚未发布或等待安全检查的页面',
archive: '保存不再活跃但仍需要保留的内容',
};
@@ -80,6 +81,7 @@ const CATEGORY_DESCRIPTIONS: Record<MindSpaceCategory['code'], string> = {
const CATEGORY_ACTIONS: Partial<Record<MindSpaceCategory['code'], string>> = {
oa: '进入工作区',
public: '查看发布',
health: '查看健康档案',
draft: '继续创作',
};
@@ -1283,7 +1285,7 @@ export function MindSpaceView({
return;
}
setAssets(await listMindSpaceAssets(category.code));
if (['draft', 'oa', 'public'].includes(category.code)) {
if (['draft', 'oa', 'public', 'health'].includes(category.code)) {
const { items } = await listMindSpacePages({ categoryCode: category.code, limit: 100 });
setPages(items);
if (category.code === 'draft') {
@@ -3186,7 +3188,7 @@ export function MindSpaceView({
<div className="mindspace-category-layout">
<div className="mindspace-grid-zones">
{space.categories
.filter((category) => ['oa', 'public', 'archive'].includes(category.code))
.filter((category) => ['oa', 'public', 'health', 'archive'].includes(category.code))
.map((category) => (
<article
className={`mindspace-card mindspace-card-compact mindspace-card-${category.code}`}