P10-验收报告.md

P10 验收报告:端到端联调与阶段 1 开发完成标志

日期: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。


0. 联调对象

项值
班级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 字
HTTPhttp://127.0.0.1:3000(npm run build 后 next start;管理员 admin)
证据文件P10-联调证据.txt

未删除、未移动 P1–P9 文档与代码;夹具班级(平行班复制)联调后已删除。


1. 系统闸门 G1–G6(必须全绿)

G1 无 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 未改

G2 案例型课无主案例不得生成案例型教案 — 通过

项证据
实现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:案例分析/辩论为案例型;讲授不需要主案例

G3 空/过短 description 拒绝调用模型 — 通过

项证据
实现生成入口预检 checkLessonG3(src/lib/prepare/g3.ts),不创建任务、不调模型;知识点 POST/PUT 同样 422
API 实测 1POST /api/lesson-plans/generate 占位课时 id=2「第一章 人工智能概述(占位课时)」lessonType=讲授 → HTTP 422 code=g3_short_description
API 实测 2POST /api/knowledge-points description="" → HTTP 422 code=g3_short_description
种子p2:reject-check:占位 KP 7/7 拒生成;第七章 KP 7/7 不拒

G4 问卷生成不得删除 module_id ∈ {A..F} — 通过

断言测试(p8:test 28 passed,本轮回归):

G5 student_no 不进入分析/生成 prompt — 通过

断言测试(p8:test / p4:test / p10:test,本轮回归):

G6 导出 100% 含 AI 标识与确认人 — 通过(全量扫描,非抽检)

扫描 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 渲染夹具确认文案。


2. 教学抽检 S1–S7

总体 = 已确认且用于试讲章的全部产物 = 1 份(id=4),不足 10 全检。种子 p10-chapter7-all。

S1 目标—活动—评价 — 通过(0 缺失)

目标活动挂接习题挂接
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」达成。

S2 试讲课教学内核 — 自动化通过;4/5 为任课教师人工项

机检:

任课教师「不改结构能否上课」4/5 检查清单(PPT 与教案分项打分,待校历试讲):

#检查项当前状态
1教案不改活动顺序能否按时间轴上完 45 分钟待评(课中 8+10+17+课后 5,机检合计未超学时配置)
2主案例能否支撑辩论(事实/价值/法律三层)待评(discussion_ladder 已写三层,教学说明已有)
3思政是否嵌在争议而非独立栏目待评(机检 B16 通过,仍须课堂观感)
4PPT 不改页序能否讲(封面→案例→图→辩论→exit ticket)待评(9 页,机检页级约束通过)
5形成性评价能否收到 o2/o3 证据(exit ticket / 辩论援引)待评

产品不得用「栏目齐全」代替本项。试讲失败 → 只开第七章补丁,不开阶段 1 返工。

S3 PPT 页级约束 — 通过(无需降级为「幻灯片草稿」)

扫描已确认 ppt.slides JSON(9 页):

默认路径机检通过。抽检只针对「标红后教师强制确认」的例外路径——本课无该例外。

S4 引用 — 通过

citations[] 4 条:case:1、knowledge_point:13/14/15,类型均在闭集;claim_unverified=false;无 source_id 空且未标未核验。

可宣称「来源引用」能力,不必文案降级。

S5 学习通交换物 — 人工项清单(说明可 30 分钟照做)

导入说明已生成(含列映射与「30 分钟内导入或照做」):CX-AI-LAW-CX-2024-LAW1-舆情分析与立场检测-题库导入说明.txt。

#检查项当前状态
1打开 xlsx「题库」工作表,列含题干/选项/答案/难度/知识点机检已过(P9);待教师在学习通预览
2按说明「资料/题库 → 导入试题」映射列待教师 30 分钟照做
3活动清单与章节—课时目录对齐后,发讨论/作业/测验待教师;五步勾选已持久化 ①②③
4课件包文件名读 chaoxing_*机检已过
5官方二进制模板阶段 2,本阶段不承诺

S6 平行班复制 — 自动化通过;含人工核验的完整 T 为教师项

测量值
POST /api/classes/2/copy ×31328 + 1137 + 1093 = 3558 ms(HTTP 201)
T(from_scratch, n=1) 代理P6 教案生成 + P7 PPT 生成 ≈ 106 s(不含人工核验)
不等式3.6 s < 2 × 106 s → 成立

夹具班已删。完整定义「打开向导到可上课导出,含人工核验时间」须任课教师实测三班;自动化只覆盖复制 API 与生成耗时对比。

S7 种子门槛 — 通过(已验,本轮复核)


3. 安全基线清单(M11.1)

项完成度说明
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)。

4. 工作台质量视图

/dashboard 四卡(原缺「完成率」,P10 补上):

指标当前值(admin 全量)含义
完成率0%(0/3)status===completed / 教案数。id=4 仍为 materials_draft(材料未确认),故不为 100%
重生成次数0generation_meta.regenerate_count 合计
待审3*_draft 教案数
近两周修改率0%有 teacher_edits_summary 的课时占比

连续零修改 streak < 3,不弹提示。响应式:工作台四卡 sm:2 / lg:4;导航小屏横向滚动(M8.4 最小集)。问卷回收页既有完成率;热点待审仍为阶段 2 占位页。


5. 试讲解耦说明

P10 交付联调报告 + 抽检报告 = 开发完成标志;
试讲按教学日历单列,不是开发者可承诺的周数;
试讲失败只开第七章补丁迭代,不视为计划失败。

阶段 1 关闭条件 = 本报告开发闸门全绿 且 校历试讲完成(或校方书面放弃试讲)。当前仅满足前半。


6. build / 回归

命令结果
npm run build通过(Next.js 14.2.35;清 .next 后完整通过;类型检查通过)
p4:test48 passed
p5:test33 passed
p6:test52 passed
p7:test33 passed
p8:test28 passed
p9:test55 passed
p10:test32 passed
p2:reject-check通过(占位 7 拒 / 第七章 7 可教)

P1–P9 代码与文档未删未移。新增:audit_logs 迁移、G3 生成预检 422、导出标识、dashboard 完成率、最小审计写入。


7. 遗留清单

  1. lesson_plans.id=4 材料未确认(materials_draft)。工作台完成率 0%;题库/材料导出仍可能带「按草稿导出」警告。确认材料后完成率才会上升。不在本 P 改确认状态,以免覆盖教师判断。
  2. S2 / S5 / S6 人工项未打分:任课教师 4/5、学习通 30 分钟照做、含核验时间的复制对比。跟试讲走,不阻塞开发完成标志。
  3. 热点采纳无 API(/hotspots 骨架)。审计预留 hotspot_adopt,阶段 2 落地。
  4. 学校红头 / Logo 母版、学习通官方题库二进制、学习通 API 同步:计划已定阶段 2,阶段 1 失败路径 = 下载后人工套用 / 30 分钟照做。
  5. 本机未开 HTTPS。上线必须设 COOKIE_SECURE=true 并配 TLS;不得在公网 HTTP 上把 Secure 打开或关掉 httpOnly。
  6. 备份仅为书面策略 + 单机文件;未接 cron/异地。上线由运维落实每日拷贝 prisma/dev.db 与 uploads/,权限仅运维与课程负责人。
  7. 历史确认无审计行(表为 P10 新增)。此后确认教案、审核提取、写回画像会落库。
  8. PPT 旧文件备注可能无「AI 辅助生成」字样(封面有)。新导出每页备注含标识;不以旧文件否定 G6(扫描按封面或备注任一标识 + 教案确认人,全绿)。
  9. 其他章仍只能拒生成,不得扩种(调整三)。

8. 闸门 / 抽检总表

编号结果
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 分钟照做人工待评
S6API 通过(3.6s < 2×106s);含人工核验待评
S7通过 第七章 7/7 可教、其他章拒生成

阶段 1 开发联调:通过。试讲未做,不关闭阶段 1。

下载此文件