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}`}
+11
View File
@@ -67,6 +67,17 @@ export const PREVIEW_SPACE: MindSpace = {
sortOrder: 3,
itemCount: 3,
},
{
id: 'cat-health',
code: 'health',
name: '健康档案区',
visibilityPolicy: 'private',
aiAccessPolicy: 'explicit_asset_grant',
publishPolicy: 'password_required',
isSystem: true,
sortOrder: 30,
itemCount: 0,
},
{
id: 'cat-draft',
code: 'draft',
+1 -1
View File
@@ -424,7 +424,7 @@ export type MindSpaceQuota = {
export type MindSpaceCategory = {
id: string;
code: 'oa' | 'private' | 'public' | 'draft' | 'archive';
code: 'oa' | 'private' | 'public' | 'health' | 'draft' | 'archive';
name: string;
visibilityPolicy: string;
aiAccessPolicy: string;