# Work Log

## 2026-06-17

### 解耦路线图执行（P0 全部 + P1 大部分 + P2-2）

#### 问题背景
按 `docs/architecture/audit/01_decoupling_roadmap.md` 解耦路线图，修复全部扫描出的过耦合问题。

#### 完成工作

##### 第一批：P0 严重问题修复（commit 220061d + 62be0b9）

1. **P0-3 循环依赖修复**：`shared/lib/audit-logger.ts`、`change-logger.ts`、`auth-guard.ts` 将 `import { auth } from "@/auth"` 改为动态 import，消除 shared → auth 反向依赖
2. **P0-5 messaging 改用 dispatcher**：`messaging/actions.ts` 将 `createNotification` 替换为 `sendNotification`（来自 notifications/dispatcher），支持用户通知偏好和多渠道
3. **P0-6 统一 classSchedule 写入口**：`scheduling/data-access.ts` 新增 4 个统一写函数（insertClassScheduleItem/updateClassScheduleItemById/deleteClassScheduleItemById/replaceClassSchedule），classes 和 scheduling/actions 改为调用这些函数
4. **P0-2 homework/data-access.ts 拆分**：1038→596 行，新增 `stats-service.ts`（346 行）承载统计业务逻辑
5. **P0-4 dashboard 解耦**：204→47 行，`getAdminDashboardData` 改用 `Promise.all` 调用 6 个模块的 `get[Module]DashboardStats()` 函数
6. **P0-1 classes/data-access.ts 拆分**：2090→656 行，拆分为 4 个新文件（data-access-stats/schedule/students/admin.ts），通过 re-export 保持向后兼容

##### 第二批：P1 较严重问题修复（commit 2c8e229）

7. **P1-6 notifications 反向依赖修复**：`notifications/channels/in-app-channel.ts` 将静态 import messaging 改为动态 import
8. **P1-3 auth.ts 拆分**：293→208 行，拆分出 4 个 shared/lib 文件（role-utils.ts/bcrypt-utils.ts/http-utils.ts/password-security-service.ts）
9. **P1-4 users/import-export.ts 拆分**：拆分出 `user-service.ts`（用户创建+密码哈希）和 `class-registration.ts`（班级注册委托 classes/data-access）

##### 第三批：P1-2 actions 层 DB 操作下沉（commit 84d6636）

10. **exams/actions.ts**：移除所有 db 直接操作，新增 7 个 data-access 函数（getExamCreatorId/updateExamWithQuestions/deleteExamById/duplicateExam/getExamPreview/getExamSubjects/getExamGrades）。actions.ts 831→766 行
11. **homework/actions.ts**：新建 `data-access-write.ts`（285 行）含 10 个函数，actions.ts 387→239 行
12. **questions/actions.ts**：新增 4 个 data-access 函数（createQuestionWithRelations/updateQuestionById/deleteQuestionByIdRecursive/getKnowledgePointOptions），actions.ts 294→177 行
13. **announcements/actions.ts**：新增 5 个 data-access 函数（insertAnnouncement/updateAnnouncementById/deleteAnnouncementById/publishAnnouncementById/archiveAnnouncementById），actions.ts 242→231 行

##### 第四批：P2-2 ai.ts 拆分（commit 6588f74）

14. **shared/lib/ai.ts 拆分**：247 行拆分为 `shared/lib/ai/` 目录 6 个文件（payload-parser/api-key-crypto/provider-config/client/errors/index），原 ai.ts 保留为向后兼容重导出

##### 第五批：架构文档同步 + 全文档合规检查（commit 0423b2b + 4d659ad）

15. 同步更新 004/005/007/audit 文档反映所有解耦变更
16. 全项目 32 个文档合规检查与修正：
    - 修正编码规范 Prettier 配置不一致（semi: false, singleQuote: false）
    - 修正代码示例中的 any→unknown、缺少返回类型、未用 import type、as 断言
    - 修正 36 处过时文件路径（c:/Users/xiner/ → e:/Desktop/CICD/）
    - 修正行数不准确、函数名错误（dispatchNotification→sendNotification 等）
    - 同步已修复问题状态标记

#### 未修复项
- **P1-1**：跨模块直接 DB 查询（影响范围大，需逐步替换）
- **P1-5**：proctoring 死代码（用户决定保留）
- **P2-1**：schema.ts 按业务域拆分（需全面回归测试）

#### 验证
- `npx tsc --noEmit`：0 错误
- `npm run lint`：0 错误
- 所有文件均在行数限制内

---

### 编码规范适配与配置完善

#### 问题背景
用户提供了一份通用 Next.js 企业级编码规范，需要结合当前项目实际情况进行适配。

#### 完成工作

##### 1. 创建适配后的编码规范文档
- 新增 `docs/standards/coding-standards.md`（16 章节，全面适配当前项目）
- 适配要点：
  - 项目结构：保留单应用 + 模块化架构（非 Monorepo）
  - 数据获取层：保留 `modules/[module]/data-access.ts`（非 `services/`）
  - 中间件：使用 `proxy.ts`（Next.js 16 重命名，非 `middleware.ts`）
  - 行数限制：保留企业级规范（组件 500/800，Actions 800/1000）
  - Tailwind：保留 v4 CSS 变量设计令牌方式
  - ActionState：保留现有 `ActionState<T>` 类型（非 `ActionResult` 联合类型）
  - 环境变量：保留 `@t3-oss/env-nextjs` + Zod（已实现）
- 新增"与原规范的差异说明"附录，列出 10 项差异及原因

##### 2. 更新项目规则
- 更新 `.trae/rules/project_rules.md`：
  - 新增"编码规范"章节，引用 `docs/standards/coding-standards.md`
  - 新增架构分层规则、模块标准结构、TypeScript 规则、命名规范、组件规范、Server Action 规范、Tailwind 规范、安全规范、提交规范
  - 架构文档清单新增解耦路线图
  - 行数规范新增工具函数 ≤40 行、自定义 Hook ≤80 行

##### 3. 补充缺失的配置文件
- 新增 `.prettierrc`（匹配现有代码风格：双引号、无分号、2 空格、printWidth 100）
- 配置 `prettier-plugin-tailwindcss` 插件（已在 devDependencies 中）

##### 4. 更新文档索引
- `docs/README.md` 新增"编码规范"章节，登记 coding-standards.md 和 project_rules.md

#### 验证
- 待验证 lint + tsc

---

### 架构全面审查与文档重构

#### 问题背景
用户反馈:架构文档阅读后仍无法理解各模块、函数关系,说明文档质量不足或代码耦合度过高。006/007 及其他文档长期未更新。

#### 完成工作

##### 1. 全项目逐文件审查(4 份审查报告)
- `docs/architecture/audit/shared-audit.md` - shared 基础设施层(69 文件,15 问题)
- `docs/architecture/audit/core-business-audit.md` - 核心业务模块(exams/homework/questions/textbooks/grades)
- `docs/architecture/audit/management-modules-audit.md` - 管理模块(school/classes/scheduling/attendance/users/audit/course-plans/announcements)
- `docs/architecture/audit/new-and-other-modules-audit.md` - 新增模块和其他模块(elective/proctoring/diagnostic/notifications/dashboard/messaging/parent/settings/files/auth/layout/student)
- `docs/architecture/audit/00_summary.md` - 汇总报告

##### 2. 发现的关键问题
**P0 严重问题(6 项)**:
1. `classes/data-access.ts` 2104 行,超硬上限 2.1 倍,混入 homework/scheduling/grades 逻辑
2. `homework/data-access.ts` 1038 行,超硬上限,混入排名计算
3. `shared/lib` ↔ `auth` 循环依赖
4. `dashboard/data-access.ts` 直查 11 张跨模块表
5. `messaging` 绕过 `notifications` 直接写通知
6. `classSchedule` 表三处写入口(数据完整性风险)

**P1 较严重问题(6 项)**:
- 跨模块直接 DB 查询普遍存在(classes 被 8+ 处直接查询)
- actions 层混入数据访问逻辑
- auth.ts 混合 5 类职责
- users/import-export.ts 四重职责
- proctoring/exam-mode-config.tsx 死代码
- notifications 反向依赖 messaging

##### 3. 重写架构文档(5 份)
- **004 架构影响地图**:从"罗列函数签名"重构为"图优先 + 结构化",含分层架构图、模块依赖关系图(标注合理/违规/循环依赖)、数据流向图、核心调用链路、26 个模块清单、P0/P1/P2 问题分级与解耦建议
- **005 架构数据 JSON**:新增 architectureOverview、moduleDependencyGraph(25 节点 37 边)、knownIssues(12 问题)、dbTables(54 表按业务域分组)节点;补全 permissions(52→54)、apiRoutes(10→11)
- **006 功能清单**:添加"当前实现状态"列,143 个功能项标注 ✅/⚠️/❌,P0 覆盖率 80%→92%
- **007 差距审计报告**:v2→v3,总体完成度 P0 69%→84%,P2 路线图 8/14=57%,新增架构技术债章节
- **001 项目概览**:更新为 6 角色/54 权限/26 模块/54 表,新增架构原则和项目状态章节

##### 4. 文档治理
- 创建 `docs/README.md` 文档索引(架构/审查/专题/归档分类)
- 11 个过时文档添加"已归档"标注(002×2/003/设计文档×8)
- 所有文档保持活跃维护与归档分离

#### 验证
- tsc --noEmit: 0 errors
- npm run lint: 0 errors 0 warnings
- git commit: f8dfd1d

---

### 解耦路线图输出

#### 完成工作
- 创建 `docs/architecture/audit/01_decoupling_roadmap.md` 解耦路线图文档
  - 解耦原则：单一职责 / 模块封装 / 分层单向依赖
  - 过耦合问题清单：6 项 P0 + 6 项 P1 + 2 项 P2，每项含问题/影响/解耦方案/迁移步骤
  - 解耦执行优先级：三阶段（P0 1-2 周 / P1 2-4 周 / P2 4-8 周）
  - 验收标准：文件行数 / 模块封装 / 职责单一 / 架构文档可读性
  - 预期效果：开发效率 / 文档质量 / 项目可维护性三方面提升
- 更新 `docs/README.md` 索引加入解耦路线图

#### 关键解耦项摘要
- P0-1: classes/data-access.ts 2104 行 → 按职责拆 4 个文件
- P0-2: homework/data-access.ts 1038 行 → 分离排名逻辑到 ranking-service.ts
- P0-3: shared/lib ↔ auth 循环依赖 → 依赖注入或抽取 session.ts
- P0-4: dashboard 直查 11 张表 → 各模块添加 getDashboardStats() 函数
- P0-5: messaging 绕过 notifications → 改用 dispatchNotification
- P0-6: classSchedule 三处写入口 → 统一到 scheduling/data-access

---

### P2 质量保障类实现（5 项全部完成）

#### 1. 屏幕阅读器兼容性增强（a11y）
- 新增无障碍工具库：`src/shared/lib/a11y.ts`（useA11yId/mergeA11yProps/describeInput/loadingAria）
- 新增 Hook：`src/shared/hooks/use-aria-live.ts`（aria-live 区域管理）
- 新增组件：`src/shared/components/a11y/`（skip-link/visually-hidden/focus-trap/aria-status）
- 增强 UI 组件：table.tsx 添加系统性 ARIA role，dialog.tsx 添加 aria-modal
- 审计文档：`docs/accessibility/a11y-audit.md`（含 WCAG 2.1 AA 合规清单）

#### 2. 视觉回归测试（Visual Regression）
- 配置：`tests/visual/visual.config.ts`（3 视口 × 2 主题）
- 测试套件：homepage/admin-dashboard/teacher-dashboard/student-dashboard
- 辅助函数：auth.ts（登录态管理）、visual-helpers.ts（视口/主题/遮罩）
- 更新 playwright.config.ts：新增 visual-chromium 项目，maxDiffPixelRatio 0.01
- 文档：`docs/testing/visual-regression.md`

#### 3. 短信/微信推送渠道集成（notifications）
- 新增模块：`src/modules/notifications/`
- 渠道实现：SMS（阿里云/腾讯云/Mock）、WeChat（公众号模板消息）、Email（Nodemailer SMTP）、In-App
- 分发器：按用户通知偏好并行多渠道发送
- Server Actions：sendNotificationAction、sendClassNotificationAction
- 外部 SDK 动态 import，Mock 模式开发环境可用
- 配置：`.env.example`，文档：`docs/notifications/channels.md`

#### 4. 漏洞扫描 CI 集成（security）
- 增强 CI：security-scan job（npm audit + Snyk + Trivy FS + OWASP ZAP）
- 独立工作流：`.gitea/workflows/security.yml`（每周一深度扫描，含容器镜像扫描）
- 配置：`.gitea/suppressions.json`（Snyk 抑制）、`.trivyignore`（Trivy CVE 忽略）
- 本地脚本：`scripts/security-scan.sh` + `scripts/security-scan.ps1`
- 文档：`docs/security/scanning.md`（含 SLA：critical 24h/high 7d/medium 30d/low 90d）

#### 5. 灾备方案（DR）
- 脚本：backup-verify.sh（完整性校验）、backup-offsite-sync.sh（S3/OSS/NFS 异地同步）、dr-drill.sh/ps1（灾备演练）、failover.sh（故障切换）、health-check.sh（健康检查）
- CI 增强：scheduled-backup 添加校验+异地同步，新增 weekly-dr-drill job
- 独立工作流：`.gitea/workflows/dr-drill.yml`（每周一凌晨 4 点自动演练）
- 文档：`docs/dr/dr-plan.md`（RTO 4h/RPO 24h）、`docs/dr/dr-runbook.md`（6 大故障场景操作手册）
- 配置：`.env.example` 灾备环境变量

#### 验证
- `npx tsc --noEmit`：0 错误
- `npm run lint`：0 错误 0 警告

---

### P2 功能扩展类实现（功能扩展 + 质量保障首批）

#### 1. 选课管理模块（elective）
- 新增 schema 表：`electiveCourses`（选修课程）、`courseSelections`（选课记录）
- 新增权限：`ELECTIVE_MANAGE`、`ELECTIVE_READ`、`ELECTIVE_SELECT`
- 模块文件：`src/modules/elective/`（types/schema/data-access×3/actions/components×3）
- 路由：admin/teacher/student 三端 elective 页面
- 支持：先到先得 + 抽签两种选课模式，容量控制，退选

#### 2. 考试监考模块（proctoring）
- 新增 schema：`exams` 表扩展 examMode/durationMinutes/antiCheatEnabled 等字段；新增 `examProctoringEvents` 表
- 新增权限：`EXAM_PROCTOR`、`EXAM_PROCTOR_READ`
- 模块文件：`src/modules/proctoring/`（types/data-access/actions/components×3）
- API 路由：`/api/proctoring/event` 接收学生端上报
- 页面：教师监考面板 + 学生端防作弊监控（tab切换/复制粘贴/右键/开发者工具/全屏退出/空闲超时检测）

#### 3. 学情诊断报告模块（diagnostic）
- 新增 schema：`knowledgePointMastery`（知识点掌握度）、`learningDiagnosticReports`（诊断报告）
- 新增权限：`DIAGNOSTIC_MANAGE`、`DIAGNOSTIC_READ`
- 模块文件：`src/modules/diagnostic/`（types/data-access×2/actions/components×4）
- 功能：基于提交答案自动计算知识点掌握度，生成个人/班级诊断报告（强项/弱项/建议），雷达图可视化
- 页面：teacher 诊断管理 + 学生查看自己报告

#### 4. 项目规则更新
- `.trae/rules/project_rules.md` 单文件行数限制从 300 行调整为企业级规范：
  - React 组件 ≤ 500 行（复杂场景可放宽至 800）
  - Server Actions / Data Access ≤ 800 行
  - 硬性上限 1000 行

#### 5. 种子脚本 lint 修复
- `scripts/seed.ts` 消除全部 `any` 类型（17 个 error → 0）
- 定义内部类型：SeedQuestion/SeedQuestionBank/SeedGradeRecord/SeedAttendanceRecord
- 移除未使用参数，函数签名精简

#### 6. 架构文档同步
- `docs/architecture/004_architecture_impact_map.md` 新增 elective/proctoring/diagnostic 三个模块章节
- `docs/architecture/005_architecture_data.json` 同步权限点、角色映射、dbTables、modules、dependencyMatrix、routes

#### 验证
- `npx tsc --noEmit`：0 错误
- `npm run lint`：0 错误 0 警告

---

### 前序工作（同日早些时候）

### 1. Next.js 16 Proxy 修复
- `src/proxy.ts` 导出函数从 `middleware` 重命名为 `proxy`（Next.js 16 要求）
- 修复 `getToken()` 在 edge 运行时缺少 `secret` 导致的 `MissingSecret` 错误
- 显式传入 `secret: process.env.NEXTAUTH_SECRET`
- 主要修改：[proxy.ts](file:///e:/Desktop/CICD/src/proxy.ts)

### 2. MySQL 端口切换 + 数据库创建脚本
- `.env` 中 MySQL 端口从 13002 改为 14013
- 新增 `scripts/create-db.ts`：连接 MySQL（不指定库）后执行 `CREATE DATABASE IF NOT EXISTS next_edu`，字符集 utf8mb4_unicode_ci
- 主要修改：[.env](file:///e:/Desktop/CICD/.env)、[create-db.ts](file:///e:/Desktop/CICD/scripts/create-db.ts)

### 3. 种子脚本完全重写（小学场景）
- 完全重写 `scripts/seed.ts`，实现小学完整场景初始化
- 数据规模：
  - 1 所学校（实验小学）、2 个年级（一/二年级）、每年级 2 个班级
  - 8 名教师（每班 2 名：1 班主任 + 1 科任，跨班覆盖语数外 3 科）
  - 24 名学生（每班 6 名）+ 24 名家长
  - 3 科教材（语数外各 1 本）+ 章节 + 知识点
  - 15 道题目（每科 5 道：单选/文本/判断）
  - 2 套试卷（语文/数学）+ 24 份提交 + 120 个答案
  - 2 套作业 + 6 份提交 + 30 个答案
  - 课表、成绩、考勤、课程计划、公告等完整数据
  - 6 个角色 + 47 个权限点的 RBAC 映射（149 条记录）
- 17 个顺序步骤，耗时约 127s
- 主要修改：[seed.ts](file:///e:/Desktop/CICD/scripts/seed.ts)

### 4. 迁移脚本系统重构
- **问题**：旧迁移系统存在多个缺陷
  - `0011_ai_providers.sql` 未在 `_journal.json` 中注册，导致 `drizzle-kit migrate` 失败
  - 缺少多数 snapshot 文件（仅存 0008、0009）
  - 迁移 SQL 使用复杂 PREPARE/EXECUTE 条件模式，维护困难
- **修复**：清理全部旧迁移文件与 meta 目录，使用 `drizzle-kit generate` 从 schema 重新生成
  - 生成单一迁移文件 `0000_perfect_pestilence.sql`，包含全部 49 张表
  - journal 重置为单条记录，snapshot 完整
- **新增 npm 脚本**（package.json）：
  - `db:create`：创建数据库
  - `db:push`：直接同步 schema（开发用）
  - `db:setup`：一键 create → migrate → seed
- 主要修改：[package.json](file:///e:/Desktop/CICD/package.json)、drizzle/ 目录

### 5. 验证
- 干净数据库全流程测试：`db:create` → `db:migrate` → `db:seed` 全部通过
- 49 张表成功创建，种子数据完整写入
- 测试账号（密码均为 123456）：
  - 管理员: admin@xiaoxue.edu.cn
  - 语文老师/一年级1班班主任: t_chinese_1@xiaoxue.edu.cn
  - 数学老师: t_math_1@xiaoxue.edu.cn
  - 英语老师: t_english_1@xiaoxue.edu.cn
  - 学生: student_g1c1_1@xiaoxue.edu.cn
  - 家长: parent_g1c1_1@xiaoxue.edu.cn

## 2026-03-19

### 1. 作业与权限测试覆盖补齐（第二阶段）
- 新增角色路由与代理守卫集成测试：
  - `tests/integration/dashboard-routing.test.ts`
  - `tests/integration/proxy-guard.test.ts`
- 扩展 onboarding 完成接口集成测试，覆盖班级-学科映射与教师分配逻辑：
  - `tests/integration/api-onboarding-complete.route.test.ts`
- 新增认证业务流 E2E（注册 -> 登录 -> 受保护区域）：
  - `tests/e2e/auth-business-flow.spec.ts`
- 新增并补齐作业流程集成测试，覆盖创建、开始作答、提交、批改、保存答案：
  - `tests/integration/homework-create-assignment.test.ts`
  - `tests/integration/homework-actions.test.ts`
- `saveHomeworkAnswerAction` 增加关键分支用例：
  - started 状态首次保存答案（insert）
  - started 状态更新已有答案（update）

### 2. 验证
- `npm run test:integration`：通过（7 文件，38 用例）
- `npm run lint`：通过
- `npm run typecheck`：通过
- `npm run test:e2e`：通过（40 通过，1 跳过）
- 语言诊断：无错误

## 2026-03-18

### 1. 企业级测试体系落地（第一阶段）
- 新增集成测试与 E2E 基础设施：
  - `vitest.config.ts`
  - `playwright.config.ts`
  - `tests/setup/integration.setup.ts`
- 新增接口集成测试：
  - `tests/integration/api-ai-chat.route.test.ts`
  - `tests/integration/api-onboarding-status.route.test.ts`
  - `tests/integration/api-onboarding-complete.route.test.ts`
- 新增认证冒烟 E2E：
  - `tests/e2e/smoke-auth.spec.ts`
- 新增全路由回归 E2E：
  - `tests/e2e/full-route-regression.spec.ts`
- 新增工程脚本：
  - `test`、`test:ci`、`test:integration`、`test:e2e`、`test:e2e:smoke`、`test:e2e:full-routes`
- 更新 CI 质量门禁：
  - 增加 Playwright Chromium 安装
  - 增加集成测试执行
  - 增加 E2E 全量回归测试执行

### 2. 验证
- `npm run lint`：通过
- `npm run typecheck`：通过
- `npm run test:integration`：通过（3 文件，10 用例）
- `npm run build`：通过
- `npm run test:e2e:smoke`：通过（本地使用系统 Chrome 通道，2 用例通过）
- `npm run test:e2e:full-routes`：通过（38 用例通过）

## 2026-03-03

### 1. 教师加入班级学科分配逻辑修复
- 修复教师已在班级中但选择学科加入时被直接返回成功的问题。
- 班级未创建该学科映射时，先补齐映射再分配。
- 学科已被其他老师占用时，返回明确提示。
- 主要修改：
  - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts)

### 2. 验证
- 质量检查：`npm run lint`、`npm run typecheck` 均通过。

## 2026-03-02

### 1. 班级详情访问修复（基于会话身份）
- 将数据获取中的教师 ID 来源改为会话用户，移除默认教师 ID 逻辑，修复“新加入班级无法查看班级详情”问题。
- 主要修改：
  - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts)
  - [page.tsx](file:///e:/Desktop/CICD/src/app/(dashboard)/teacher/classes/my/%5Bid%5D/page.tsx)

### 2. 任课权限与班主任权限区分（学科可见范围）
- 班主任可查看班级下所有学科；任课老师仅可查看自己负责的学科。
- 新增并应用分配学科查询，过滤相应统计与列表。
- 主要修改：
  - [data-access.ts](file:///e:/Desktop/CICD/src/modules/classes/data-access.ts)

### 3. 新注册学生默认班级问题修复
- 调整示例学生获取逻辑，避免为新注册学生展示“默认班级”。
- 主要修改：
  - [data-access.ts](file:///e:/Desktop/CICD/src/modules/homework/data-access.ts)

### 4. 教材列表 UI 精简为纯色风格
- 将教材卡片头部背景从渐变与纹理改为简洁纯色；图标容器调整为简洁样式，视觉噪音更低。
- 主要修改：
  - [textbook-card.tsx](file:///e:/Desktop/CICD/src/modules/textbooks/components/textbook-card.tsx)

### 5. 学生导航清理未实现入口
- 移除学生侧导航的“Resources”入口（页面未实现，避免死链）。
- 主要修改：
  - [navigation.ts](file:///e:/Desktop/CICD/src/modules/layout/config/navigation.ts)

### 6. 验证
- 质量检查：`npm run lint`、`npm run typecheck` 均通过。

## 2026-02-24

### 1. Credentials 登录与密码安全修复
*   **密码哈希规范化**：
    *   注册时统一生成标准 bcrypt 前缀（`$2a/$2b/$2y`），确保数据库内哈希格式一致。
    *   登录时对非标准前缀（如 `$10$...`）自动补全为 `$2b$...` 再校验，避免格式不一致导致登录失败。
*   **登录一致性修复**：
    *   登录校验不再对密码做 `trim()`，避免前后空格导致的 bcrypt 比对失败。
*   **调试排障（已回收）**：
    *   临时加入安全日志定位失败原因（不输出明文），定位后已移除。

### 2. 验证
*   `npm run typecheck`：通过
*   `npm run lint`：存在既有告警（未新增）

## 2026-01-15

### 1. Schedule Module Optimization
*   **Visual Overhaul (`schedule-view.tsx`)**:
    *   Refactored the schedule grid to match the exact design of the `ClassScheduleGrid` widget.
    *   Implemented a clean, borderless layout with no grid lines for a modern look.
    *   **Time-Based Positioning**: Replaced grid-row logic with absolute positioning based on time (8:00 - 18:00 range) using percentage calculations (`getPositionStyle`).
    *   **Color Coding**: Added `getSubjectColor` to auto-assign thematic colors (blue for Math, purple for Physics, etc.) based on course names.
    *   **Card Design**: Refined course cards with vertical centering, better spacing, and removed unnecessary UI elements (like the "+" button in headers).

*   **Filter Bar Refinement (`schedule-filters.tsx`)**:
    *   **Minimalist Design**: Removed borders and shadows from the class selector and buttons to integrate seamlessly with the background.
    *   **Center Label**: Added a dynamic, absolute-centered text label that updates based on selection:
        *   Shows "All Classes" when no filter is active.
        *   Shows "{Class Name}" when a specific class is selected.
    *   **Simplified Controls**: Removed the "Reset" button (X icon) entirely for a cleaner interface.
    *   **Ghost Buttons**: Styled the "Add Event" button as a ghost variant with muted colors.

### 2. Architecture & Cleanup
*   **Insights Module Removal**:
    *   Deleted the entire `src/app/(dashboard)/teacher/classes/insights` directory as the feature was deemed redundant.
    *   Removed `insights-filters.tsx` component.
    *   Updated `navigation.ts` to remove the "Insights" link from the sidebar.
    *   *Note*: Preserved `getClassHomeworkInsights` in `data-access.ts` as it's still used by the Class Detail dashboard widgets.

### 3. Verification
*   **Type Safety**: Ran `npm run typecheck` multiple times during refactoring to ensure no regressions (Passed).
*   **Build**: Attempted to clear build cache to resolve a chunk loading error (Windows permission issue encountered but workaround applied).

## 2026-01-14

### 1. Class Management Refactoring (Role Separation)
*   **Separation of Duties**:
    *   Moved class creation and management responsibilities from the generic Teacher view to a dedicated Management view.
    *   Created **Grade Management Page** at `src/app/(dashboard)/management/grade/classes/page.tsx` for Grade Directors and Admins.
    *   Teachers can now only **Join Classes** (via code) or view their assigned classes in "My Classes".

*   **New Components & Pages**:
    *   `GradeClassesView` (`src/modules/classes/components/grade-classes-view.tsx`): A comprehensive table view for managing classes within specific grades, supporting creation, editing, and deletion.
    *   `GradeClassesPage`: Server Component that fetches managed grades and classes using strict RBAC (Role-Based Access Control).

*   **Teacher "My Classes" Update (`my-classes-grid.tsx`)**:
    *   Removed the "Create Class" button/dialog.
    *   Added a **"Join Class"** dialog that accepts a 6-digit invitation code.
    *   Updated styling to use standard design system colors (`bg-card`, `border-border`) instead of hardcoded gradients.

### 2. Backend & Logic Updates
*   **Data Access (`data-access.ts`)**:
    *   Implemented `getGradeManagedClasses`: Fetches classes for grades where the user is either a Grade Head or Teaching Head.
    *   Implemented `getManagedGrades`: Fetches the list of grades managed by the user for the creation dropdown.
    *   Updated `getTeacherClasses`: Now returns both **owned classes** (assigned by admin) and **enrolled classes** (joined via code).
    *   Fixed a SQL syntax error in `getGradeManagedClasses` (unescaped backticks in template literal).

*   **Server Actions (`actions.ts`)**:
    *   Added `createGradeClassAction`, `updateGradeClassAction`, `deleteGradeClassAction`: These actions enforce that the user manages the target grade before performing operations.
    *   Updated `joinClassByInvitationCodeAction`: Expanded to allow Teachers (role `teacher`) to join classes, not just Students.

### 3. Verification
*   **RBAC**: Verified that users can only manage classes for grades they are assigned to.
*   **Flow**: Verified Teacher "Join Class" flow correctly redirects and updates the list.
*   **Syntax**: Fixed TypeScript/SQL syntax errors in the new data access functions.

### 4. Class UI/UX Optimization
*   **Students Management Interface (`students-table.tsx`, `students-filters.tsx`)**:
    *   **Enhanced Table**: Added student avatars, gender display, and join date.
    *   **Pagination**: Implemented client-side pagination (10 items per page) to handle larger classes gracefully.
    *   **Status Filtering**: Added "Active/Inactive" filter with visual status badges (Emerald for active, muted for inactive).
    *   **Data Access**: Updated `getClassStudents` to fetch extended user profile data and support server-side status filtering.

*   **Class Detail Dashboard (`/teacher/classes/my/[id]/page.tsx`)**:
    *   **Dashboard Layout**: Refactored into a responsive two-column layout (Main Content + Sidebar).
    *   **Key Metrics**: Added a 4-card stats grid at the top displaying critical insights:
        *   Total Students (Active/Inactive breakdown)
        *   Schedule Items (Weekly sessions)
        *   Active Assignments (Overdue count)
        *   Class Average (Based on graded submissions)
    *   **Sidebar Widgets**: Added "Class Schedule" and "Homework History" widgets for quick access to temporal data.
    *   **Visual Polish**: Integrated `lucide-react` icons throughout for better information scanning.

## 2026-01-13

### 1. Navigation & Layout Improvements
*   **Dynamic Breadcrumbs (`site-header.tsx`)**:
    *   Replaced hardcoded "Dashboard > Overview" breadcrumbs with a dynamic system.
    *   Implemented a path-to-title lookup using `NAV_CONFIG` from `src/modules/layout/config/navigation.ts`.
    *   Added logic to filter out root role segments (admin/teacher/student/parent) for cleaner paths.
    *   Added fallback capitalization for segments not found in the config.
    *   Refactored `SiteHeader` to use `usePathname` for real-time route updates.

### 2. Code Quality & Bug Fixes
*   **Type Safety (`homework-grading-view.tsx`)**:
    *   Fixed a TypeScript error where a boolean expression was returning `boolean | undefined` which is not a valid React node (implicit `true` check added).
    *   Resolved "Calling setState synchronously within an effect" React warning by initializing state lazily instead of using `useEffect`.
    *   Fixed implicit `any` type errors in map functions.
*   **Linting**:
    *   Cleaned up unused imports across multiple files (`exam-actions.tsx`, `exam-assembly.tsx`, `textbook-reader.tsx`, etc.).
    *   Fixed unescaped HTML entities in `student-dashboard-header.tsx` and others.
    *   Removed unused variables to clear ESLint warnings.
*   **Refactoring**:
    *   Updated `TextbookCard` to support `hideActions` prop for better reuse in student views.
    *   Added missing `Progress` component to `src/shared/components/ui/progress.tsx`.

### 3. Verification
*   Ran `npm run typecheck`: **Passed** (0 errors).
*   Ran `npm run lint`: **Passed** (0 errors, 28 warnings remaining for unused vars/components that may be needed later).
