教学闭环实现完成报告

日期:2026-11-04。范围:已批准的教学需求 FR-001—020。交付物为四仓库功能分支与 MR;生产未更新。本地运行和测试均使用独立验收数据。

功能结果

教师创建课程、发放/关闭/重置课程码;学生凭码直接加入。教师配置实验说明、时间窗口、正文/文件材料及分项评分标准。学生保存草稿、上传材料并正式提交;重交保留旧版。教师开始批改后锁定当前版,保存分项得分与评语,逐份或批量确认发布。学生只读本人公开成绩;教师可退回并给出重交期限。课程归档后只读,成员移除后报告和下载权限立即拒绝。

任务完成表

部分 实现 验证
治理与设计 宪法0.3.0、路线图、正式需求、计划/模型/契约、ADR-007 严格文档构建、OpenAPI 3.1 parser
课程/成员 课程码生命周期、重复加入、移除、归档、频率限制 CourseServiceTest、CourseApiTest、TeachingBoundaryApiTest
实验任务 材料类型/限额、时间、评分项、草稿编辑、发布/关闭 AssignmentConfigurationTest、AssignmentApiTest、教学浏览器场景
报告与材料 草稿、稳定版本、幂等、受保护附件、历史材料 ReportApiTest、MaterialValidatorTest、教学浏览器场景
批改与成绩 精确分项汇总、私有草稿、发布历史、批量结果、返工 ReportApiTest、TeachingBoundaryApiTest、教学浏览器场景
展示与回归 课程/任务/报告/批改页面;复用原有身份及CSRF 全量前端检查和完整浏览器回归

Spec 符合度表

需求 实现与证据
FR-001—004 CourseService/Controller + V2;教师不能跨课操作,学生重复加入不重复建关系,移除不可借旧码重入
FR-005—008 AssignmentService/Controller + V3;任务状态、材料限制、评分标准与时间验证;存在提交后拒绝编辑
FR-009—011 ReportService + V4;初次读取完成前禁用输入,保存失败保留正文,正式提交版本与requestId幂等;批改/重交竞争只允许一个成功
FR-012—014 分项BigDecimal求和;私有grade与publications分离;学生响应不包含未发布grade,旧版结果保留明确attempt
FR-015—017 退回原因与单人期限、已发布历史不覆盖、版本冲突返回409;批量发布逐项返回结果
FR-018 Tika Core/JDK UTF-8/ZIP/Jackson检查受限材料;每次下载重新检查归属,强制attachment与nosniff;材料不执行或在线预览
FR-019—020 归档后服务端拒绝写入,读取历史保留;平台管理权必须同时满足课程归属,新许可迁移撤销旧会话

验收 SC-001—013 通过上述API、策略和浏览器场景组合覆盖;并非13条SC各自对应一个独立测试方法。文件语义完整性与无恶意保证不属于本次检测能力:类型检测不等于病毒扫描,平台不解析/执行提交材料。

宪法符合度表

原则 结果
分层与唯一授权 core负责状态、时限、分数、课程归属;web只消费身份许可与API;infra仅提高受限上传请求体上限
框架优先 沿用Spring Security/JPA/Flyway/事务、JUnit/MockMvc和Refine/Ant Design;Tika Core决策见ADR-007
范围 已有具体提案获用户确认后同步治理;未引入自动评分、互评、教务、消息或生产运维
测试 新增授权与边界测试;完整回归保留原有52项后端和12项浏览器场景
文档和任务流程 最终规格、设计、任务、证据同步。过程偏离:首批课程实现时任务未完整预拆解,已在tasks中补充真实文件映射,不追溯声称严格按任务顺序完成
旧仓库与数据边界 未读取旧GitLab实现;未对生产库运行测试或发布本轮代码

测试覆盖表

检查 结果与边界
后端clean verify 77 tests,0 failures/errors/skipped;全新PostgreSQL数据库从V1—V6迁移成功
真实响应契约 基础平台及教学Course/Assignment/Report/File响应检查,包括关闭对象与类型/枚举
浏览器 13场景:12项原平台回归+1项完整教学流程,单worker、0重试;包含附件上传及草稿保存断网不丢输入
前端工程 lint、typecheck、生产build通过
文档 严格构建与5项构建器测试通过;教学OpenAPI为19路径/25操作/24 schemas
编排 开发/生产Compose解析通过,两份nginx配置在隔离容器中语法通过

原始统计见 测试证据。浏览器结果只代表Chromium;本轮未构建新Docker应用镜像或执行公网升级,不将主机JVM/Next验收称为容器镜像验收。现有本机Buildx指向已移除的Docker.app,镜像打包继续由既有受保护main流水线负责。

修复记录与交付边界

已修复:新增许可遗漏旧PermissionKey契约导致回归失败;报告初始读取覆盖早期输入;虚拟化选项的浏览器定位;发布后的任务配置应在已有正式提交时才冻结;教师批改显示姓名而不是仅显示标识;上传类型和大小不依赖前端声明;批改写入响应须同时拥有报告查看许可(ADR-008);保存按钮使用稳定无障碍名称,断网后可再次保存。

单文件最多20MiB、每份最多5个、每份报告最多100版;不支持ZIP任意上传、可执行文件、HTML/SVG。管理员分配teacher角色后教师即可建课;普通学生自助注册后凭码加入。现行平台单角色与每课一位负责人保持,归档不可恢复。未增加生产发布、定时备份或其他上线工作。