日期:2026-08-22
目录:/home/zyw/Downloads/ai-lesson-prep
依据:《v0.2修订执行计划》P10 / 第 7 章 G1–G6、S1–S7、§7.3 试讲解耦 / §8.2;《设计说明书-v0.2》§7 导出、§11.1–11.3 安全基线(M11.1)
结论(开发联调):系统闸门 G1–G6 全绿;教学抽检 S1/S3/S4/S7 机检通过,S2/S5/S6 自动化部分通过、人工项列出检查清单待任课教师;安全基线清单完成(本机 HTTP 下 COOKIE_SECURE=false 为设计前提);npm run build 通过;P4–P9 单测回归全部通过。
试讲解耦(§7.3 / K3):本报告 = 开发完成标志。P10 联调完成 ≠ 阶段 1 关闭。试讲按校历单列,不是开发者可承诺的周数;试讲失败只开第七章补丁迭代,不视为计划失败。
抽样:试讲章(第七章)已确认产物 1 份(lesson_plans.id=4),不足 10 则全检。随机种子记入:p10-chapter7-all。
| 项 | 值 |
|---|---|
| 班级 | 2024级法学1班 classes.id=2 |
| 课时 | 第七章 自然语言处理与应用 · 舆情分析与立场检测 lessons.id=12 |
| 教案 | lesson_plans.id=4 status=materials_draft(教案/PPT 已确认,材料仍为草稿) |
| 目标 | o1 / o2 / o3 |
| 主案例 | 流浪狗舆情反转事件 cases.id=1,teaching_note 383 字 |
| HTTP | http://127.0.0.1:3000(npm run build 后 next start;管理员 admin) |
| 证据文件 | P10-联调证据.txt |
未删除、未移动 P1–P9 文档与代码;夹具班级(平行班复制)联调后已删除。
objectives[] 不得 plan_confirmed — 通过| 项 | 证据 |
|---|---|
| 实现 | 状态机硬约束:PUT /api/lesson-plans/:id/confirm step=plan 调 checkG1(src/lib/prepare/g1.ts) |
| API 实测 | 在空闲课时新建夹具教案(不碰 id=4),content.objectives=[] 请求确认 |
| 响应 | HTTP 400 code=g1_no_objectives error=无课时目标不得确认教案 |
| 单测 | p6:test / p10:test:无 objectives、空数组拒绝;有目标通过 |
| 夹具 | 测完删除,id=4 未改 |
| 项 | 证据 |
|---|---|
| 实现 | POST /api/lesson-plans/generate 在创建任务前调 checkLessonPlanG2 |
| API 实测 | classId=2 lessonId=2(占位课时、无主案例)lessonType=案例分析 run=false |
| 响应 | HTTP 400 code=g2_no_main_case error=案例型课须先选主案例 |
| 单测 | p5:test / p10:test:案例分析/辩论为案例型;讲授不需要主案例 |
| 项 | 证据 |
|---|---|
| 实现 | 生成入口预检 checkLessonG3(src/lib/prepare/g3.ts),不创建任务、不调模型;知识点 POST/PUT 同样 422 |
| API 实测 1 | POST /api/lesson-plans/generate 占位课时 id=2「第一章 人工智能概述(占位课时)」lessonType=讲授 → HTTP 422 code=g3_short_description |
| API 实测 2 | POST /api/knowledge-points description="" → HTTP 422 code=g3_short_description |
| 种子 | p2:reject-check:占位 KP 7/7 拒生成;第七章 KP 7/7 不拒 |
module_id ∈ {A..F} — 通过断言测试(p8:test 28 passed,本轮回归):
assertBlueprintModules(src/lib/questionnaires/blueprint.ts);生成提示词硬约束;发布前再检student_no 不进入分析/生成 prompt — 通过断言测试(p8:test / p4:test / p10:test,本轮回归):
omitStudentNoDeep 删除 student_no / studentNobuildAnalysisPayload 构造后 JSON 无学号assertNoStudentNoInPayload 含学号即抛错src/lib/ai/context.ts)出域前剥离;学号独立列,不作为题目(覆盖修改说明 4.4.8,以本计划第 7 章为准)扫描 uploads/exports/ 下全部教案 docx 与课件 pptx:
| 文件 | AI 标识 | 确认人 |
|---|---|---|
| 人工智能基础-2024级法学1班-舆情分析与立场检测-教案.docx | 有(「AI 标识」) | 有 |
| CX-AI-LAW-CX-2024-LAW1-舆情分析与立场检测-教案.docx(含 P10 再导出) | 有(「AI 辅助生成」) | 有 |
| 人工智能基础-…-课件.pptx(P7 旧导出) | 封面「AI 辅助生成」 | 封面须教师确认 |
| CX-AI-LAW-…-课件.pptx(P10 再导出) | 备注含「AI 辅助生成 · 确认人」 | 有 |
统计:docx 3/3 通过,pptx 3/3 通过。P10 将教案标题改为「AI 辅助生成 / 确认人」,PPT 每页备注追加标识(讲稿仍只进 speaker_notes)。p10:test 渲染夹具确认文案。
总体 = 已确认且用于试讲章的全部产物 = 1 份(id=4),不足 10 全检。种子 p10-chapter7-all。
| 目标 | 活动挂接 | 习题挂接 |
|---|---|---|
| o1 能解释舆情分析流程并指出人工判断 | pre 5min;in 8min 四环节 | explain;authentic_task |
| o2 能指出两类失败并说明原因 | in 10min 对照图 | explain |
| o3 能就 AI 结论作处置依据给出法律立场 | in 17min 辩论 | case_ruling;classroom_speech |
课中活动 0 条缺 objective_ids;习题 0 条悬空;三项目标均被活动或习题覆盖。及格线「抽检样本 0 份缺 objective_ids」达成。
机检:
core_plan:流程图四环节 + 对照图两类失败(核心);时间线/问题清单/角色卡(支架);课后热搜核查(拓展)sizheng_integration 3 条均有 student_dilemma;B16「至少一处争议绑定本课目标或案例」通过(2 处)teaching_note 383 字(争议结构、立场、法律争议)任课教师「不改结构能否上课」4/5 检查清单(PPT 与教案分项打分,待校历试讲):
| # | 检查项 | 当前状态 |
|---|---|---|
| 1 | 教案不改活动顺序能否按时间轴上完 45 分钟 | 待评(课中 8+10+17+课后 5,机检合计未超学时配置) |
| 2 | 主案例能否支撑辩论(事实/价值/法律三层) | 待评(discussion_ladder 已写三层,教学说明已有) |
| 3 | 思政是否嵌在争议而非独立栏目 | 待评(机检 B16 通过,仍须课堂观感) |
| 4 | PPT 不改页序能否讲(封面→案例→图→辩论→exit ticket) | 待评(9 页,机检页级约束通过) |
| 5 | 形成性评价能否收到 o2/o3 证据(exit ticket / 辩论援引) | 待评 |
产品不得用「栏目齐全」代替本项。试讲失败 → 只开第七章补丁,不开阶段 1 返工。
扫描已确认 ppt.slides JSON(9 页):
speaker_notes)diagram_spec 渲染页:2(flow 四环节、compare 两类失败)默认路径机检通过。抽检只针对「标红后教师强制确认」的例外路径——本课无该例外。
citations[] 4 条:case:1、knowledge_point:13/14/15,类型均在闭集;claim_unverified=false;无 source_id 空且未标未核验。
可宣称「来源引用」能力,不必文案降级。
导入说明已生成(含列映射与「30 分钟内导入或照做」):CX-AI-LAW-CX-2024-LAW1-舆情分析与立场检测-题库导入说明.txt。
| # | 检查项 | 当前状态 |
|---|---|---|
| 1 | 打开 xlsx「题库」工作表,列含题干/选项/答案/难度/知识点 | 机检已过(P9);待教师在学习通预览 |
| 2 | 按说明「资料/题库 → 导入试题」映射列 | 待教师 30 分钟照做 |
| 3 | 活动清单与章节—课时目录对齐后,发讨论/作业/测验 | 待教师;五步勾选已持久化 ①②③ |
| 4 | 课件包文件名读 chaoxing_* | 机检已过 |
| 5 | 官方二进制模板 | 阶段 2,本阶段不承诺 |
| 测量 | 值 |
|---|---|
POST /api/classes/2/copy ×3 | 1328 + 1137 + 1093 = 3558 ms(HTTP 201) |
| T(from_scratch, n=1) 代理 | P6 教案生成 + P7 PPT 生成 ≈ 106 s(不含人工核验) |
| 不等式 | 3.6 s < 2 × 106 s → 成立 |
夹具班已删。完整定义「打开向导到可上课导出,含人工核验时间」须任课教师实测三班;自动化只覆盖复制 API 与生成耗时对比。
p2:reject-check 本轮再跑通过| 项 | 完成度 | 说明 |
|---|---|---|
| HTTPS 或 cookie Secure 前提 | 已配置、本机按设计关闭 | COOKIE_SECURE:仅当 "true" 时 cookie 带 Secure(src/lib/session-options.ts / getCookieSecure())。本机 HTTP 必须为 false,否则浏览器不回传 cookie。上线 HTTPS 时在 .env 设 COOKIE_SECURE=true。.env.example 已注释。 |
| cookie httpOnly / sameSite | 已实现 | httpOnly: true,sameSite: "lax" |
| 问卷 token 熵 | 已实现 | randomBytes(24).toString("base64url"),长度 ≥32;20 次无碰撞(p10:test) |
| token 过期 | 已实现 | expires_at;过期 → token_expired |
| token 限次 | 已实现 | max_submissions;满额 → token_exhausted(P8 发布默认班级人数/50) |
| 管理操作审计 | P10 补最小实现 | 新表 audit_logs。记录:确认教案/PPT/材料、审核提取(通过/驳回)、确认大纲、画像写回。预留 hotspot_adopt(热点工作台仍为阶段 2 骨架,无采纳 API)。确认接口已调用 writeAuditLog。历史 P6 确认发生在表落地前,本轮仅有联调探针 2 条。 |
| 学生作答不用于训练 | 页面文案已核 | 作答首屏「不用于训练:生成内容与学生作答不得用于任何模型训练。」(PRIVACY_NOTICE.not_for_training);教案导出声明同文案。 |
| 学号 | 已按第 5 章收口 | 独立列、自愿、自报未核验、不进 prompt、不用于成绩(G5) |
| 备份访问权限 | 已书面约定 | BACKUP_ACCESS_POLICY:prisma/dev.db 与 uploads/ 每日备份仅限部署运维与课程负责人;不得对学生作答二次分发或用于训练。.env.example 已写。本环境未接外部备份系统(单机 SQLite)。 |
/dashboard 四卡(原缺「完成率」,P10 补上):
| 指标 | 当前值(admin 全量) | 含义 |
|---|---|---|
| 完成率 | 0%(0/3) | status===completed / 教案数。id=4 仍为 materials_draft(材料未确认),故不为 100% |
| 重生成次数 | 0 | generation_meta.regenerate_count 合计 |
| 待审 | 3 | *_draft 教案数 |
| 近两周修改率 | 0% | 有 teacher_edits_summary 的课时占比 |
连续零修改 streak < 3,不弹提示。响应式:工作台四卡 sm:2 / lg:4;导航小屏横向滚动(M8.4 最小集)。问卷回收页既有完成率;热点待审仍为阶段 2 占位页。
P10 交付联调报告 + 抽检报告 = 开发完成标志;
试讲按教学日历单列,不是开发者可承诺的周数;
试讲失败只开第七章补丁迭代,不视为计划失败。
阶段 1 关闭条件 = 本报告开发闸门全绿 且 校历试讲完成(或校方书面放弃试讲)。当前仅满足前半。
| 命令 | 结果 |
|---|---|
npm run build | 通过(Next.js 14.2.35;清 .next 后完整通过;类型检查通过) |
p4:test | 48 passed |
p5:test | 33 passed |
p6:test | 52 passed |
p7:test | 33 passed |
p8:test | 28 passed |
p9:test | 55 passed |
p10:test | 32 passed |
p2:reject-check | 通过(占位 7 拒 / 第七章 7 可教) |
P1–P9 代码与文档未删未移。新增:audit_logs 迁移、G3 生成预检 422、导出标识、dashboard 完成率、最小审计写入。
lesson_plans.id=4 材料未确认(materials_draft)。工作台完成率 0%;题库/材料导出仍可能带「按草稿导出」警告。确认材料后完成率才会上升。不在本 P 改确认状态,以免覆盖教师判断。/hotspots 骨架)。审计预留 hotspot_adopt,阶段 2 落地。COOKIE_SECURE=true 并配 TLS;不得在公网 HTTP 上把 Secure 打开或关掉 httpOnly。prisma/dev.db 与 uploads/,权限仅运维与课程负责人。| 编号 | 结果 |
|---|---|
| G1 | 通过 HTTP 400 g1_no_objectives |
| G2 | 通过 HTTP 400 g2_no_main_case |
| G3 | 通过 HTTP 422 g3_short_description(生成未调模型) |
| G4 | 通过 p8:test 蓝图断言 |
| G5 | 通过 p8:test/p4:test 剥离断言 |
| G6 | 通过 全量扫描 docx+pptx |
| S1 | 通过 0 缺失 |
| S2 | 自动 通过;4/5 人工待评 |
| S3 | 通过 不达标率 0%,不降级 |
| S4 | 通过 编造 0、漏标 0 |
| S5 | 说明已具备;30 分钟照做人工待评 |
| S6 | API 通过(3.6s < 2×106s);含人工核验待评 |
| S7 | 通过 第七章 7/7 可教、其他章拒生成 |
阶段 1 开发联调:通过。试讲未做,不关闭阶段 1。