docs(architecture): update impact map, data, troubleshooting, add mockups
Some checks failed
Security / deep-security-scan (push) Failing after 2m10s
DR Drill / dr-drill (push) Failing after 1m32s
CI / scheduled-backup (push) Failing after 31s
CI / backup-verify (push) Has been skipped
CI / weekly-dr-drill (push) Failing after 0s
CI / build-deploy (push) Has been cancelled
CI / security-scan (push) Has been cancelled

- Update 004_architecture_impact_map.md and 005_architecture_data.json

- Remove obsolete _update_004.cjs helper script

- Update troubleshooting/known-issues.md

- Add docs/mockups/ directory
This commit is contained in:
SpecialX
2026-07-04 23:02:14 +08:00
parent e962b67050
commit d1ad7a1f75
8 changed files with 3324 additions and 104 deletions

View File

@@ -2820,6 +2820,9 @@ src/auth.ts ──▶ import { ... } from "@/shared/lib/permissions"
> - **J4 架构图同步**004_architecture_impact_map.md 新增 V4 纸感重构章节005_architecture_data.json 更新 lesson_preparation 节点——description 改为 V4 描述、dependencies 移除 `@xyflow/react` 改为 `@tiptap/*` 包、files 数组移除 9 个废弃文件并新增 V4 组件、auditFixes 新增 V4-PAPER-1~8 + V4-PAPER-DOC 条目
> - **J5 known-issues V4 规则**`docs/troubleshooting/known-issues.md` 新增 V4 纸感重构规则表,记录 8 条规则——React Flow 弃用、Tiptap Mark 锚点替代字符串偏移、setState in effect 禁用、doc.version=4、editor-slice 移除画布相关方法、interaction block 注册、PrintView 按 order 排序、AnchorMigrationBanner 失效提示
> - **数据模型 v4**`types.ts` `LessonPlanDocument.version = 4``lib/document-migration.ts` `normalizeDocument` 兼容 v1/v2/v3/v4 链式迁移;`editor-slice.ts` 移除 `updateNodePosition`/`connect`/`setEdges`/`autoLayout` 画布相关方法;`hooks/expanded-slice.ts` 新增 `expandedNodeIds`/`toggleExpand`/`setExpanded` 状态(节点展开到正文流);`lib/anchor-mark.ts` 新增 Tiptap `AnchorMark` + `AnchorPoint` 扩展(替代 v3 字符串偏移锚点)
> - **V2-1 复制节点**`hooks/editor-slice.ts` 新增 `duplicateNode(id)` 方法(深拷贝 `BlockData` + 新 id + 标题加"副本" + order 置末interaction 节点的 turns 重新生成 id 避免冲突);`components/paper-editor/paper-context-menu.tsx` 的 `copyNode` 从 toast 占位改为调用 `duplicateNode` 并 toast 成功提示i18n 新增 `v4.contextMenu.copied`/`copyFailed` 键zh-CN + en
> - **V2-2 节点级 AI 协助 4 项**`lib/ai-node-assist.ts` 新增 4 个服务函数(`generateNodeContent`/`optimizeNodeExpression`/`suggestNodeDifferentiation`/`generateLayeredQuestions`全部纯服务端、Zod 校验、失败返回 null`actions-ai.ts` 新增 4 个 Server Action每个 action 校验 `LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT` 三个权限点;`hooks/use-node-ai-assist.ts` 新增客户端 hook`components/paper-editor/paper-editor.tsx` 注入 `onAiAction` 回调;`components/detail-panel/detail-panel.tsx` 的 4 个 `AiButton` 接入真实 actioni18n 新增 `v4.contextMenu.aiRunning`/`aiSuccess`/`aiFailed`/`aiComingSoon` 键zh-CN + en
> - **V4-I18N-1 i18n 完整审查与修复**:对 lesson-preparation 模块 i18n 配置进行全量审查并修复——P0 修复运行时 MISSING_MESSAGE`version.diff.*` 3 键title/summary/noChanges+ `schema.ts` 引用的 8 个 `error.*` 键labelTooLong/versionNoInvalid/nameRequired/nameTooLong/queryTooLong/blockIdRequired/commentTooLong/reviewerRequired+ `v4.contextMenu` 6 键copied/copyFailed/aiComingSoon/aiRunning/aiSuccess/aiFailedzh-CN + en 同步P1 修复 en locale 下大面积报错en `calendar` 节键名对齐 zh-CNweekView/monthView/loadFailed + prev/next/eventMeta/weekDays 子节en `analytics` 节补齐 totalPublished/totalSubmitted/totalStandardsLinked/loadFailedP2 修复 7 处硬编码中文detail-props.tsx 的 stageLabel/differentiationLabel、inline-node.tsx 的 exerciseCount、inline-qa-dialog.tsx 的 expectedAnswer、qa-editor.tsx 的 turnContentPlaceholder、curriculum-map-view.tsx 的 legendTitle/noData并新增对应 6 个 i18n 键(`v4.detail.stageLabel`/`differentiationLabel`/`exerciseCount`/`turnContentPlaceholder`、`v4.heatmap.legendTitle`/`noData`);清理 7 个 dead 节review/comment/formative/substitute/evaluation/standards/gradeHeadanalytics 因被 `app/(dashboard)/admin/curriculum-map` 引用而保留);`lib/i18n-errors.ts` 新增 `t.has(msg)` 运行时守卫,避免 `as` 断言绕过类型检查(键不存在时返回原消息而非抛出 MISSING_MESSAGEzh-CN 与 en 顶层键集一致性验证通过43 = 43005_architecture_data.json 同步追加 `V4-I18N-1` auditFixes 条目known-issues.md 追加 3 个 i18n 规则表(键缺失与中英文不同步 / dead 节清理规则 / 动态键翻译守卫)
---

View File

@@ -6713,7 +6713,11 @@
],
"uiDeps": [],
"uiDepsNote": "已通过 render prop 解耦TeacherTextbookReader 已移至 app 层src/app/(dashboard)/teacher/textbooks/[id]/_components/textbooks 模块不再直接 import questions 模块组件",
"npmDeps": ["@xyflow/react", "@dagrejs/dagre", "react-force-graph-2d"],
"npmDeps": [
"@xyflow/react",
"@dagrejs/dagre",
"react-force-graph-2d"
],
"npmDepsNote": "v4 新增 react-force-graph-2d基于 d3-force + Canvas实现 Obsidian 风格力导向图谱;通过 next/dynamic ssr:false 加载避免 SSR canvas/window 报错;@xyflow/react + @dagrejs/dagre 用于分层有向图布局",
"knownIssues": [
"v4 新增2026-07-03知识点图谱新增 Obsidian 风格力导向布局force 模式与原分层有向图hierarchical 模式)共存,工具栏可切换;新增组件 force-graph.tsx新增类型 GraphLayoutMode保留全部现有功能掌握度视图/搜索高亮/邻居高亮/前置依赖增删)",
@@ -20777,6 +20781,30 @@
"permission": "LESSON_PLAN_READ",
"file": "actions-ai.ts",
"purpose": "V5-21 A4 辅助新增:按 textbookId 获取知识点列表(仅 id+name供课标核对 Tab 按需加载"
},
{
"name": "generateNodeContentAction",
"permission": "LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT",
"file": "actions-ai.ts",
"purpose": "V4-N1 新增:节点级 AI 协助 - 根据节点 type 生成对应字段,返回 patch 由前端合并到 node.data"
},
{
"name": "optimizeNodeExpressionAction",
"permission": "LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT",
"file": "actions-ai.ts",
"purpose": "V4-N2 新增:节点级 AI 协助 - 优化节点现有表达,保留结构仅修改字段值"
},
{
"name": "suggestNodeDifferentiationAction",
"permission": "LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT",
"file": "actions-ai.ts",
"purpose": "V4-N3 新增:节点级 AI 协助 - 判定节点适合的差异化层次basic/intermediate/advanced前端据此设置 node.differentiation"
},
{
"name": "generateLayeredQuestionsAction",
"permission": "LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT",
"file": "actions-ai.ts",
"purpose": "V4-N4 新增:节点级 AI 协助 - 为 interaction 节点生成分层提问,返回 QATurn[] 由前端追加到 turns"
}
],
"schemas": [
@@ -20876,6 +20904,7 @@
"lib/document-migration.ts",
"lib/node-summary.ts",
"lib/anchor-mark.ts",
"lib/ai-node-assist.ts",
"lib/export.ts",
"lib/scope-check.ts",
"lib/document-diff.ts",
@@ -20903,6 +20932,7 @@
"hooks/version-slice.ts",
"hooks/history-slice.ts",
"hooks/expanded-slice.ts",
"hooks/use-node-ai-assist.ts",
"components/lesson-plan-list.tsx",
"components/lesson-plan-card.tsx",
"components/lesson-plan-filters.tsx",
@@ -21059,7 +21089,10 @@
"V4-PAPER-6": "J3 lint + tsc 零错误验证tsc --noEmit 0 错误lint 中 V4 引入的 react-hooks/set-state-in-effect 错误已通过 anchor-migration-banner.tsx 的 key-based remount + lazy initial state 模式修复;剩余 6 个 lint 错误为预存无关模块问题exams/use-exam-preview-tasks react-hooks/refs 3 个、template-picker V5-9 set-state-in-effect 1 个),按计划要求记录不修复",
"V4-PAPER-7": "J4 架构图同步004_architecture_impact_map.md 新增 V4 纸感重构章节005_architecture_data.json 更新 lesson_preparation 节点——description 改为 V4 描述、dependencies 移除 @xyflow/react 改为 @tiptap/* 包、files 数组移除 9 个废弃文件并新增 V4 组件paper-editor/structure-tree/detail-panel/interaction-block/anchor-migration-banner/print-view/schedule-dialog/consistency-check-dialog/ai-feedback-dialog/ai-differentiation-dialog/expanded-slice/history-slice/anchor-mark/export/scope-check/document-diff 等、auditFixes 新增 V4-PAPER-1~7 条目",
"V4-PAPER-8": "J5 known-issues V4 规则docs/troubleshooting/known-issues.md 新增 V4 纸感重构规则表,记录 8 条规则——React Flow 弃用、Tiptap Mark 锚点替代字符串偏移、setState in effect 禁用(用 key-based remount + lazy initial state 替代、doc.version=4、editor-slice 移除画布相关方法、interaction block 注册、PrintView 按 order 排序、AnchorMigrationBanner 失效提示",
"V4-PAPER-DOC": "documentVersion 升级为 4types.ts LessonPlanDocument.version = 4lib/document-migration.ts normalizeDocument 兼容 v1/v2/v3/v4 链式迁移editor-slice.ts 移除 updateNodePosition/connect/setEdges/autoLayout 画布相关方法hooks/expanded-slice.ts 新增 expandedNodeIds/toggleExpand/setExpanded 状态节点展开到正文流lib/anchor-mark.ts 新增 Tiptap AnchorMark + AnchorPoint 扩展(替代 v3 字符串偏移锚点)"
"V4-PAPER-DOC": "documentVersion 升级为 4types.ts LessonPlanDocument.version = 4lib/document-migration.ts normalizeDocument 兼容 v1/v2/v3/v4 链式迁移editor-slice.ts 移除 updateNodePosition/connect/setEdges/autoLayout 画布相关方法hooks/expanded-slice.ts 新增 expandedNodeIds/toggleExpand/setExpanded 状态节点展开到正文流lib/anchor-mark.ts 新增 Tiptap AnchorMark + AnchorPoint 扩展(替代 v3 字符串偏移锚点)",
"V4-PAPER-V2-1": "V2 复制节点功能完整实现hooks/editor-slice.ts 新增 duplicateNode(id) 方法(深拷贝 BlockData + 新 id + 标题加'副本' + order 置末interaction 节点的 turns 重新生成 id 避免冲突components/paper-editor/paper-context-menu.tsx 的 copyNode 从 toast 占位改为调用 duplicateNode 并 toast 成功提示i18n 新增 v4.contextMenu.copied/copyFailed 键zh-CN + en",
"V4-PAPER-V2-2": "V2 节点级 AI 协助 4 项完整实现lib/ai-node-assist.ts 新增 4 个服务函数generateNodeContent/optimizeNodeExpression/suggestNodeDifferentiation/generateLayeredQuestions全部纯服务端、Zod 校验、失败返回 nullactions-ai.ts 新增 4 个 Server Action每个 action 校验 LESSON_PLAN_READ + LESSON_PLAN_CREATE + AI_CHAT 三个权限点hooks/use-node-ai-assist.ts 新增客户端 hookcomponents/paper-editor/paper-editor.tsx 注入 onAiAction 回调components/detail-panel/detail-panel.tsx 的 4 个 AiButton 接入真实 actioni18n 新增 v4.contextMenu.aiRunning/aiSuccess/aiFailed/aiComingSoon 键",
"V4-I18N-1": "i18n 完整审查与修复P0 修复 version.diff.* 3 键 + schema.ts 8 个 error.* 键 + contextMenu 6 键zh-CN + en 同步P1 修复 en calendar 节键名对齐 zh-CNP2 修复 7 处硬编码中文 + 新增 6 个 i18n 键;清理 7 个 dead 节review/comment/formative/substitute/evaluation/standards/gradeHeadanalytics 因被 admin/curriculum-map 引用保留lib/i18n-errors.ts 新增 t.has() 守卫"
}
},
"error-book": {
@@ -26907,4 +26940,4 @@
}
}
}
}
}

View File

@@ -1,101 +0,0 @@
// 临时脚本:更新 004_architecture_impact_map.md
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, '004_architecture_impact_map.md');
const content = fs.readFileSync(filePath, 'utf8');
const oldString = [
'| `components/blocks/reflection-block.tsx` | 反思 BlockV3 续select onChange 使用 `isReflectionAspect` 类型守卫替代 `as` 断言) |',
'',
'---',
'',
'## 2.28 error-book错题本模块'
].join('\r\n');
const newLines = [
'| `components/blocks/reflection-block.tsx` | 反思 BlockV3 续select onChange 使用 `isReflectionAspect` 类型守卫替代 `as` 断言) |',
'| `components/calendar-view.tsx` | **M9 日历视图组件2026-07-01 新增)**:客户端组件,支持周历/月历切换6 种事件类型颜色映射 |',
'| `components/curriculum-map-view.tsx` | **M4 课程地图热力图组件2026-07-01 新增)**:学科×年级矩阵表格,颜色编码覆盖率 |',
'| `data-access-calendar.ts` | **M9 日历事件数据访问层2026-07-01 新增)** |',
'| `data-access-review.ts` | **M3 审核工作流数据访问层2026-07-01 新增)** |',
'| `data-access-comments.ts` | **M2 协同备课评论数据访问层2026-07-01 新增)** |',
'| `data-access-formative.ts` | **M5 形成性评价数据访问层2026-07-01 新增)** |',
'| `data-access-attachments.ts` | **M6 资源附件库数据访问层2026-07-01 新增)** |',
'| `data-access-substitutes.ts` | **M12 代课教师数据访问层2026-07-01 新增)** |',
'| `data-access-ai-evaluation.ts` | **M8 AI 评估数据访问层2026-07-01 新增)** |',
'| `data-access-analytics.ts` | **M10 备课分析仪表盘数据访问层2026-07-01 新增)** |',
'| `actions-calendar.ts` | **M9 日历 Server Actions2026-07-01 新增)** |',
'| `actions-review.ts` | **M3 审核工作流 Server Actions2026-07-01 新增)** |',
'| `actions-comments.ts` | **M2 评论 Server Actions2026-07-01 新增)** |',
'| `actions-formative.ts` | **M5 形成性评价 Server Actions2026-07-01 新增)** |',
'| `actions-attachments.ts` | **M6 附件库 Server Actions2026-07-01 新增)** |',
'| `actions-substitutes.ts` | **M12 代课教师 Server Actions2026-07-01 新增)** |',
'| `actions-ai-evaluation.ts` | **M8 AI 评估 Server Actions2026-07-01 新增)** |',
'| `actions-analytics.ts` | **M10 分析仪表盘 Server Actions2026-07-01 新增)** |',
'',
'> 架构变更2026-07-01M1-M12 中长期计划完整实施):',
'> - **M1 课标对标体系**:新增 modules/standards/ 模块;新增 3 个 STANDARD_* 权限点;新增路由 /admin/curriculum-map',
'> - **M2 协同备课评论**:新增 data-access-comments.ts + actions-comments.ts支持 Block 级评论、resolved 状态',
'> - **M3 审核工作流**:新增 data-access-review.ts + actions-review.ts状态机 draft → submitted → approved/rejected → published',
'> - **M4 课程地图**:新增 admin/curriculum-map 路由 + curriculum-map-view.tsx 热力图组件',
'> - **M5 形成性评价闭环**:新增 data-access-formative.ts + actions-formative.ts4 种互动类型',
'> - **M6 资源附件库**:新增 data-access-attachments.ts + actions-attachments.ts',
'> - **M7 移动端 PWA**:见 1.1.1 章节',
'> - **M8 AI 差异化生成 + 评估**:新增 data-access-ai-evaluation.ts + actions-ai-evaluation.ts',
'> - **M9 日历视图**:新增 data-access-calendar.ts + actions-calendar.ts + calendar-view.tsx + teacher/lesson-plans/calendar 路由',
'> - **M10 备课分析仪表盘**:新增 data-access-analytics.ts + actions-analytics.ts3 个分析维度',
'> - **M11 版本 diff 预览**data-access-versions.ts 的 getVersionContent 支持读取历史版本内容',
'> - **M12 代课教师**:新增 data-access-substitutes.ts + actions-substitutes.ts',
'> - **权限扩展**:新增 STANDARD_READ/MANAGE/LINK + LESSON_PLAN_SUBMIT/REVIEW/ANALYTICS_READ/SUBSTITUTE_MANAGE',
'> - **i18n 扩展**zh-CN 新增 9 个命名空间status 扩展为 6 状态',
'> - **数据库表**:新增 6 张表lessonPlanComments/lessonPlanReviewRecords/lessonPlanFormativeItems/lessonPlanAttachments/lessonPlanAiEvaluations/lessonPlanSubstituteAssignments',
'',
'---',
'',
'## 2.27b standards课标模块2026-07-01 新增)',
'',
'**职责**K12 课标管理,支持课标树、按学科+年级筛选、课案与课标多对多关联。',
'',
'**导出函数**',
'- Data-accessgetStandards / getStandardsTree / getStandardById / createStandard / updateStandard / deactivateStandard / searchStandards / getStandardsByPlanId / linkPlanToStandard / unlinkPlanFromStandard',
'- Actions10 个 Server Actions全部使用 requirePermission() + ActionState<T>',
'- SchemacreateStandardSchema / updateStandardSchema / getStandardsParamsSchema / linkPlanToStandardSchema',
'- TypesStandard / StandardTreeNode / LessonPlanStandardLink',
'',
'**权限点**',
'- STANDARD_READstandard:read',
'- STANDARD_MANAGEstandard:manage',
'- STANDARD_LINKstandard:link',
'',
'**依赖关系**',
'- 依赖shared/*、modules/lesson-preparation/lib/i18n-errors',
'- 被依赖modules/lesson-preparation、app/(dashboard)/admin/curriculum-map',
'',
'**文件清单**',
'| 文件 | 职责 |',
'|------|------|',
'| types.ts | 类型定义 |',
'| schema.ts | Zod 验证 |',
'| data-access.ts | 课标 CRUD + 树形查询 + 课案关联 |',
'| actions.ts | 10 个 Server Actions |',
'',
'---',
'',
'## 2.28 error-book错题本模块'
];
const newString = newLines.join('\r\n');
if (!content.includes(oldString)) {
console.error('ERROR: old string not found');
process.exit(1);
}
const occurrences = content.split(oldString).length - 1;
if (occurrences !== 1) {
console.error('ERROR: appears ' + occurrences + ' times');
process.exit(1);
}
const newContent = content.replace(oldString, newString);
fs.writeFileSync(filePath, newContent, 'utf8');
console.log('SUCCESS 004 updated, before=' + content.length + ' after=' + newContent.length);