Skip to content

全栈功能、文档与联调审查报告

更新日期:2026-05-16

1. 审查范围

范围核验对象结论
根目录/Users/moorefoss/Code/AUBBplan.mdCLAUDE.md根目录不是 Git 仓库,作为 server/web/docs/ 三个子仓库的工作区
后端server/pom.xmlserver/compose.yamlserver/src/mainserver/src/testserver/src/main/resources/db/migrationserver/docsserver/scripts/api-testsSpring Boot 4 / Java 25 / Maven;依赖 PostgreSQL、RabbitMQ、MinIO、Redis、go-judge;本地真实联调已启动验证
前端web/package.jsonweb/next.config.tsweb/src/appweb/src/featuresweb/src/sharedweb/src/testsweb/docsNext.js 16 / React 19 / TypeScript;前端通过 AUBB_SERVER_ORIGIN rewrite 连接真实后端
文档docs/**server/docs/**web/docs/**、各 README已同步 V48 成绩域简化事实,并补充真实启动、OpenAPI、E2E 和按钮级验证报告

2. 项目事实基线

项目实际结论依据文件 / 命令
仓库结构server/web/docs/ 各自是 Git 仓库,根目录不是 Git 仓库find . -maxdepth 2 -type d -name .git
后端技术栈Spring Boot 4.0.5、Java 25、Maven wrapper、Flyway、MyBatis-Plus、PostgreSQL、RabbitMQ、MinIO、Redis、go-judgeserver/pom.xmlserver/compose.yaml
前端技术栈Next.js 16.2.4、React 19.2.4、TypeScript、Tailwind/shadcn、Vitest、Playwrightweb/package.jsonweb/playwright.config.ts
文档站VitePress 文档站,侧边栏已包含本轮三份交付报告docs/package.jsondocs/SUMMARY.mddocs/06-testing-and-ops/index.md
前后端代理前端 rewrite /api/v1/*/v3/api-docs/swagger-ui/*AUBB_SERVER_ORIGINweb/next.config.ts
运行时契约本地后端 GET /v3/api-docs 返回 OpenAPI 3.1.0124 个 path;启用本地 MinIO 后 readiness 包含 minioStorage=UPcurl http://127.0.0.1:18080/v3/api-docscurl http://127.0.0.1:18080/actuator/health/readiness
服务收尾本轮验证结束后已停止前端、后端和 compose 容器,未删除数据卷curl 127.0.0.1:3000/logincurl 127.0.0.1:18080/actuator/health/readiness 返回不可连接;docker compose ps 为空

3. 前端功能清单

路由 / 区域页面文件页面用途角色/权限主要 API 调用审查状态
/loginweb/src/app/(auth)/login/page.tsx登录入口、登录失败反馈未登录POST /api/v1/auth/login已实现,真实登录成功/失败已验证
/adminweb/src/app/(admin)/admin/page.tsx管理端工作台管理员GET /api/v1/auth/me已实现,真实 E2E 覆盖
/admin/platform-configweb/src/app/(admin)/admin/platform-config/page.tsx平台配置查看/保存管理员平台配置 API已实现,必填校验已浏览器点验
/admin/users/admin/academic-terms/admin/course-catalogs/admin/course-offeringsweb/src/app/(admin)/admin/**用户、学期、课程模板、开课治理管理员管理端治理 API页面可达,真实 E2E 覆盖页面 shell、导航和用户批量导入文件选择器
/teacher/teacher/courses/teacher/courses/[offeringId]web/src/app/(teacher)/teacher/**教师工作台、课程、成员和内容管理教师教师课程、成员、内容 API页面可达,真实 E2E 覆盖
/teacher/courses/[offeringId]/announcementsweb/src/app/(teacher)/teacher/courses/[offeringId]/announcements/page.tsx课程公告创建/编辑/删除教师教师公告 API已修复空提交静默问题并纳入 E2E
/teacher/courses/[offeringId]/resourcesweb/src/app/(teacher)/teacher/courses/[offeringId]/resources/page.tsx课程资源上传、改名、下载、删除教师教师资源 API、MinIO 对象存储已补可访问标签,真实 E2E 覆盖上传、改名、下载和删除
/teacher/assignments/teacher/submissions/teacher/grading/gradebook/teacher/labsweb/src/app/(teacher)/teacher/**作业、提交、成绩册、实验管理教师作业、提交、成绩、实验 API页面可达,非破坏性路径已 E2E 覆盖
/student/student/courses/student/courses/[classId]web/src/app/(student)/student/**学生学习中心和课程主页学生GET /api/v1/me/courses、课程内容 API已适配 MyCourseClassView 当前契约
/student/assignments/student/assignments/[assignmentId]web/src/app/(student)/student/assignments/**学生作业列表、详情、提交入口学生学生作业和提交 API真实种子作业页面已验证
/student/labs/student/grades/student/notificationsweb/src/app/(student)/student/**实验、成绩、通知学生实验、成绩、通知 API页面可达,真实 E2E 覆盖
全局导航 / 顶栏web/src/shared/ui/layout/topbar.tsxweb/src/shared/routing/global-search.ts角色导航、搜索、用户菜单登录用户当前用户、通知 API已修复搜索无行为问题

4. 后端 API 清单

API 组Controller / HandlerService / 依赖认证/权限测试覆盖状态
认证与当前用户server/src/main/java/com/aubb/server/modules/identityaccess/api认证、会话、用户服务登录、刷新、当前用户集成测试、真实登录探针已实现
管理治理server/src/main/java/com/aubb/server/modules/*/api 中 admin 相关 Controller用户、组织、学期、课程治理服务管理员权限和服务层授权OpenAPI 权限注册表、集成测试已实现
教师课程内容CourseAnnouncementTeacherControllerCourseResourceTeacherController、讨论、题库、评测环境 Controller课程授权、内容、资源、讨论服务教师/助教课程权限集成测试、真实 E2E 页面覆盖已实现,公告校验已补强
学生学习内容MyCoursesControllerMyCourseAnnouncementController、资源、讨论 ControllerCourseTeachingApplicationService、内容服务学生本人课程成员关系运行时 OpenAPI、真实 E2E已实现,前端已按当前 DTO 适配
作业与提交assignment、submission、judge 相关 Controller作业、提交、go-judge、MinIO教师/学生角色和资源归属集成测试、真实页面 smoke已实现
成绩与实验grading、lab 相关 Controller成绩册、实验报告服务教师/学生权限和资源归属Maven 测试、页面 smoke已按 V48 简化后契约同步
权限脚本server/scripts/api-tests/permission/run_permission_e2e.sh真实 HTTP API、测试夹具本地测试账号22/22 真实权限场景已修复会话刷新问题

5. 文档覆盖情况

文档路径主题对应代码模块是否过时处理结果
docs/04-development/*架构、后端、数据库概览server/web/有 V48 前旧描述已同步摘要
docs/05-api/*API 总览、成绩 API后端 OpenAPI / Controller有成绩快照、申诉旧描述已更新为当前能力
docs/06-testing-and-ops/*测试、验收、联调报告三仓库验证结果缺少本轮真实证据已新增三份报告并加入导航
server/docs/product-specs/*服务端产品规格后端模块和迁移多处 V48 前能力已修正
server/docs/generated/db-schema.md数据库 SchemaFlyway 迁移含已删除表字段已修正
web/docs/backend/**前端侧后端对接文档web/src/features、后端 API旧权限/成绩描述已修正

6. 文档与实现差异

编号类型文档路径代码依据差异描述处理方式
D-01文档过时server/docs/product-specs/grading-system.mdweb/docs/backend/api/teacher-grading-lab.mdserver/src/main/resources/db/migration/V48__simplify_gradebook_remove_weight_snapshots_appeals.sql仍把成绩申诉、成绩发布快照、assignment 级权重写成当前能力改为 V48 简化后的当前能力和已删除说明
D-02数据模型不一致server/docs/generated/db-schema.mdFlyway V48、grading 相关 Java 类Schema 文档包含已移除表/字段更新 Schema 文档
D-03权限描述不一致web/docs/backend/05-auth-and-authorization.mdauth-permission-catalog.md当前 Controller、AuthzOpenApiAccessRegistry文档描述不存在的旧权限入口改为当前认证、服务层权限和 OpenAPI 注册表覆盖模型
D-04测试文档缺失docs/06-testing-and-ops/*本轮真实联调和 E2E 输出缺少真实启动、权限脚本、按钮级 E2E 证据新增执行记录、审计报告、按钮级报告

7. 前端问题清单

编号分类严重级别文件路径组件/函数问题描述修复状态
FE-01无实际反馈 UIP1web/src/app/(teacher)/teacher/courses/[offeringId]/announcements/page.tsx公告创建/编辑表单空标题或正文点击发布静默 return,无用户反馈已修复,required 表单校验并纳入 E2E
FE-02测试与真实 UI role 不一致P2web/src/tests/e2e/auth.spec.ts退出登录测试按 button 查找 Radix menuitem,导致误报已修复
FE-03接口类型不一致P1web/src/app/(student)/student/assignments/page.tsxcourses/[classId]/page.tsxlabs/page.tsx学生班级功能开关运行时 MyCourseClassView 不含 features,OpenAPI 刷新后 typecheck 失败已修复,入口按当前 /me/courses DTO 默认可见
FE-04假功能风险P2web/src/shared/ui/layout/topbar.tsx全局搜索输入框可输入但 Enter 不导航已修复,新增搜索匹配和单元测试
FE-05静态检查阻断P2web/src/app/(admin)/admin/academic-terms/page.tsx、学生 workspace、paper editorlint/typecheck未使用导入、hook 依赖、文案转义等静态问题已修复
FE-06假按钮P2web/src/app/(admin)/admin/users/page.tsxweb/src/shared/ui/file-upload-field.tsx用户批量导入顶部“批量导入”按钮没有触发隐藏文件选择器,页面下方虽有真实上传控件但顶部按钮无实际动作已修复,FileUploadField.triggerRef 暴露选择器触发函数,并用单元测试和真实 filechooser E2E 覆盖
FE-07假下载风险P1web/src/shared/api/download/index.tsdownloadBinary下载按钮只拉取 blob,不创建浏览器下载,用户点击后不会得到文件已修复,创建 object URL、隐藏 <a> 触发下载并释放 URL,新增单元测试
FE-08可访问性 / E2E 可测性P2web/src/app/(teacher)/teacher/courses/[offeringId]/resources/page.tsx课程资源上传和编辑弹窗资源标题输入框缺少稳定 label 关联,真实 E2E 无法按 label 操作已修复,上传和编辑字段补 htmlFor / id

8. 后端问题清单

编号分类严重级别文件路径类/方法/API问题描述修复状态
BE-01真实脚本会话失效P1server/scripts/api-tests/permission/e2e_permission_realrun.pyfixture 登录态课程任课/成员权限变更后后端撤销旧 session,脚本继续复用旧 token 导致 401已修复,刷新受影响账号登录态
BE-02OpenAPI 权限登记漂移P1server/src/test/java/com/aubb/server/integration/AuthzOpenApiAccessRegistry.java权限路径注册注册表含已删除路径且缺少当前 PUT/DELETE 路径已修复
BE-03测试日期/业务漂移P2server/src/test/java/com/aubb/server/integration/*IntegrationTests.java多个集成测试固定 2026 时间窗和旧申诉通知类型导致回归易漂移已修复
BE-04V48 旧能力残留P1grading 相关服务、视图、迁移、测试成绩权重/快照/申诉V48 简化后仍有旧字段/测试/文档残留已清理并通过后端测试基线

9. 前后端接口一致性问题

编号前端文件后端文件 / 契约方法/路径问题描述修复状态
API-01web/src/shared/api/generated/openapi.tsGET /v3/api-docsOpenAPI生成类型落后于运行时后端契约已从真实后端重新生成
API-02学生作业/课程/实验页MyCourseClassView.javaGET /api/v1/me/courses前端读取不存在的 features 字段已去除读取,typecheck/build/E2E 通过
API-03web/next.config.ts 使用方式后端 POST /api/v1/auth/loginrewrite真实 E2E 启动前端时必须设置 AUBB_SERVER_ORIGIN,否则 Next 返回 404已在报告记录,重启后用无效登录探针确认后端 401 INVALID_CREDENTIALS
API-04教师课程资源页CourseResourceTeacherController、对象存储配置POST /api/v1/teacher/course-offerings/{offeringId}/resources后端未启用 MinIO 时资源上传返回 COURSE_RESOURCE_STORAGE_DISABLED,按钮 E2E 只能验证失败路径真实联调后端改用本地 MinIO 配置启动,readiness 显示 minioStorage=UP,资源上传/下载 E2E 通过

10. 测试覆盖现状

覆盖类型命令 / 方式结果
后端 verifycd server && bash ./mvnw verifyBUILD SUCCESS;Tests run: 318,Failures: 0,Errors: 0,Skipped: 0
后端格式cd server && bash ./mvnw spotless:check基线通过
后端测试cd server && bash ./mvnw verify318 tests,0 failures / 0 errors
权限脚本单测cd server && python3 scripts/api-tests/permission/e2e_permission_realrun_test.py1 个脚本回归测试通过
真实权限 APIcd server && BASE_URL=http://127.0.0.1:18080 ... bash scripts/api-tests/permission/run_permission_e2e.sh22/22 通过
前端 lintcd web && npm run lint通过,0 errors
前端类型检查cd web && npm run typecheck通过
前端单元测试cd web && npm run test11 个测试文件、24 个测试通过
前端真实后端 E2Ecd web && AUBB_E2E_REAL_BACKEND=1 AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 ... npm run test:e2e完整套件 36 passed;真实后端模式使用 1 worker 以避开共享账号限流
前端构建cd web && AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 npm run build通过;Next.js 生成 30 个静态页面
文档构建cd docs && npm run docs:build通过;VitePress build complete

11. 修复计划

优先级问题处理结果
P1权限真实脚本复用被撤销 token已修复并补脚本单测
P1运行时 OpenAPI 类型刷新后学生端 features 类型错误已按当前契约适配
P1V48 后文档/API/测试仍引用旧成绩能力已同步文档、测试和代码残留
P2教师公告空提交静默已修复并纳入真实 E2E
P2顶栏搜索无实际导航已修复并补单元测试
P2用户管理顶部“批量导入”假按钮已修复并纳入单元测试与真实 filechooser E2E
P2教师课程资源上传/下载缺少浏览器级闭环已补 MinIO 真实启动条件、下载行为单测和课程资源上传/改名/下载/删除 E2E
P2E2E 退出登录 selector 不匹配已修复
P2full E2E 会话切换和 SSE 探针不稳定已修复,教师/学生页面跳转前显式切换 session;SSE 探针直连 AUBB_SERVER_ORIGIN 并加读取 deadline

12. 真实联调测试计划

步骤命令 / 操作结果
启动依赖cd server && docker compose up -dPostgreSQL、RabbitMQ、MinIO、Redis、go-judge 已启动;首次 go-judge 构建遇到 Debian 502,重试成功
启动后端SERVER_PORT=18080 ... bash ./mvnw spring-boot:run本地库已存在学校根节点 SCH-REALRUN,启用 bootstrap 且传入新 code 会失败;最终关闭 bootstrap、保留本地 JWT 后启动成功,Tomcat 监听 18080,Flyway 48 个迁移完成
后端探针curl /actuator/health/readinesscurl /v3/api-docsreadiness UP,最终联调用本地 MinIO 启动后响应包含 dbreadinessStateredisEnhancementminioStorage;OpenAPI 3.1.0、124 paths
启动前端AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 npm run dev -- --hostname 127.0.0.1 --port 3000登录页可访问,API rewrite 生效
真实 E2E smokePlaywright Chromium 17 用例登录、导航、权限、用户批量导入 filechooser、课程公告创建/编辑/删除、课程资源上传/改名/下载/删除、学生作业/成绩等通过
真实 E2E fullPlaywright Chromium 19 个 full 用例管理、课程、作业判题、成绩实验通知、导航权限响应式目标 spec 已逐项通过
浏览器点验Playwright MCP管理员、教师、学生关键按钮和路由点验完成

13. 风险与遗留问题

风险当前证据原因 / 处理建议
页面逐字段点击覆盖仍有限full suites 对页面入口和关键按钮做真实浏览器验证,部分写入闭环通过 API helper 完成若要验证每个表单控件的键鼠交互,需要在当前 full suites 基础上追加纯 UI 填表用例
本地库会累积 E2E-* 数据组织、用户、学期、课程模板、开课、作业、提交、实验等业务无统一删除 API当前只清理课程资源、解锁讨论、归档题目/判题环境;其余记录作为审计残留写入报告
SSE 测试路径与浏览器 UI 路径不同Node fetch 经 Next rewrite 读取 SSE chunk 不稳定,直连本地后端可稳定收到事件full E2E 的 SSE 事件探针直连 AUBB_SERVER_ORIGIN;浏览器通知页和未读操作仍走前端页面
工作区大量未提交变更server/web/docs/ 均非 clean提交前按子仓库复核 diff,避免混入无关变更
服务已停止收尾后 300018080 不可连接,compose 无运行容器这是收尾动作;需要复测时按本报告启动命令重新启动

14. 本轮 Task 2 代码事实重新扫描

扫描时间:2026-05-16 19:20 CST。扫描命令来源于根目录 plan.md Task 2。

14.1 前端 App Router 页面

角色/区域路由数量实际页面
公共/认证4//login/unauthorized/me/notifications
管理员10/admin/admin/platform-config/admin/org-units/admin/users/admin/users/[userId]/admin/academic-terms/admin/course-catalogs/admin/course-offerings/admin/course-offerings/[offeringId]/admin/audit-logs/admin/auth-explain
教师17/teacher/teacher/courses/teacher/courses/[offeringId]/teacher/courses/[offeringId]/members/teacher/courses/[offeringId]/announcements/teacher/courses/[offeringId]/resources/teacher/courses/[offeringId]/discussions/teacher/courses/[offeringId]/discussions/[discussionId]/teacher/courses/[offeringId]/question-bank/teacher/courses/[offeringId]/judge-environments/teacher/assignments/teacher/assignments/create/teacher/assignments/[assignmentId]/edit/teacher/question-bank/teacher/submissions/teacher/submissions/[submissionId]/teacher/grading/gradebook/teacher/labs/teacher/notifications
学生14/student/student/courses/student/courses/[classId]/student/courses/[classId]/discussions/[discussionId]/student/assignments/student/assignments/[assignmentId]/student/assignments/[assignmentId]/workspace/[questionId]/student/submissions/[submissionId]/student/grades/student/labs/student/notifications

扫描结果:find web/src/app -name page.tsx 返回 45 个 page.tsx。本轮未发现 plan.md 1.3 之外的业务页面;layoutloadingnot-founderrorprovidersglobals.css 不计入业务路由。

14.2 后端 Controller/API

功能域Controller主要能力
认证AuthControllerlogin、logout、refresh、revoke、me
用户治理UserAdminController列表、详情、创建、CSV 导入、身份、状态、撤销会话、profile、组织关系
授权组/权限解释AuthzGroupAdminController授权组、成员、权限解释
组织/平台/审计OrganizationAdminControllerPlatformConfigAdminControllerAuditLogAdminController组织树/创建、平台配置、审计查询
学期/课程模板/开课AcademicTermAdminControllerCourseCatalogAdminControllerCourseOfferingAdminController创建、更新、列表、详情
教学班/课程内容CourseTeachingControllerCourseAnnouncementTeacherControllerCourseResourceTeacherControllerCourseDiscussionTeacherController班级、成员、功能开关、公告、资源、讨论
学生课程内容MyCoursesControllerMyCourseAnnouncementControllerMyCourseResourceControllerMyCourseDiscussionController我的课程、公告、资源、讨论
题库/作业QuestionBankTeacherControllerAssignmentTeacherControllerMyAssignmentsController题库、作业创建/发布/关闭、学生作业
提交/编程工作区MySubmissionControllerTeacherSubmissionControllerMyProgrammingWorkspaceController提交、附件、提交详情、工作区和修订
判题MyProgrammingSampleRunControllerMyJudgeControllerTeacherJudgeControllerTeacherJudgeEnvironmentProfileController样例运行、判题报告、重判、环境配置
成绩TeacherGradebookControllerTeacherGradingControllerMyGradebookController成绩册、导出、报告、人工评分、批量调整、导入、发布、学生成绩
实验LabTeacherControllerMyLabController实验生命周期、报告、附件、评阅
通知MyNotificationController列表、未读数、SSE stream、已读、全部已读

扫描结果:rg --files server/src/main/java/com/aubb/server/modules | rg '/api/.*Controller\.java$' 返回 33 个 Controller。rg -n '@(Get|Post|Put|Patch|Delete|Request)Mapping|TEXT_EVENT_STREAM|SseEmitter' 确认通知流使用 GET /api/v1/me/notifications/streamSseEmitter

14.3 前端 API 封装与页面映射

前端 API 封装后端 Controller/API页面入口
auth/api/auth-api.tsAuthController/login、根跳转、布局会话
admin/api/platform-admin-api.tsPlatformConfigAdminController/admin/platform-config/admin 摘要
admin/api/organization-admin-api.tsOrganizationAdminController/admin/org-units、用户详情组织关系
admin/api/user-admin-api.tsUserAdminController/admin/users/admin/users/[userId]
admin/api/course-admin-api.ts学期、课程模板、开课 Controller/admin/academic-terms/admin/course-catalogs/admin/course-offerings/**
admin/api/audit-admin-api.tsAuditLogAdminController/admin/audit-logs
admin/api/authz-admin-api.tsAuthzGroupAdminController/admin/auth-explain
course/api/course-teaching-api.tsCourseTeachingController教师课程成员页
course/api/course-content-api.ts教师/学生公告、资源、讨论 Controller教师课程内容页、学生课程页、讨论详情
course/api/my-courses-api.tsMyCoursesController学生课程、学生作业/实验/成绩入口
assignment/api/assignment-api.tsAssignmentTeacherControllerMyAssignmentsController教师作业、学生作业
assignment/api/question-bank-api.tsQuestionBankTeacherController教师课程题库、题库中心
submission/api/submission-api.tsMySubmissionControllerTeacherSubmissionController学生提交、教师提交
submission/api/workspace-api.tsMyProgrammingWorkspaceController编程工作区
judge/api/judge-api.tsMyJudgeControllerTeacherJudgeController、样例运行 API编程工作区、提交详情
judge/api/judge-environment-api.tsTeacherJudgeEnvironmentProfileController教师判题环境页
grading/api/grading-api.ts成绩 Controller教师成绩册、学生成绩
lab/api/lab-api.ts实验 Controller教师实验、学生实验
notification/api/notification-api.tsnotification-stream.tsMyNotificationController通知页、顶栏未读数、SSE

扫描结果:find src/features -path '*/api/*' -type f -maxdepth 5 返回 20 个前端 API 封装文件。当前没有发现“有 API 无任何页面入口”的整域模块;但多项 API 只在页面深层按钮/弹窗中触发,必须由本轮 full-*.spec.ts 和真实浏览器补齐按钮级证据。

14.4 本轮缺口状态基线

状态GAP
已真实验证或已修复后验证GAP-AUTH-01GAP-ADMIN-01GAP-ADMIN-03GAP-ADMIN-04GAP-ADMIN-05GAP-ADMIN-06GAP-ADMIN-07GAP-ADMIN-08GAP-ADMIN-09GAP-ADMIN-10GAP-COURSE-01GAP-COURSE-02GAP-COURSE-03GAP-COURSE-04GAP-COURSE-05GAP-COURSE-06GAP-ASSIGN-01GAP-ASSIGN-02GAP-ASSIGN-03GAP-ASSIGN-04GAP-ASSIGN-05GAP-ASSIGN-06GAP-ASSIGN-07GAP-GRADE-01GAP-GRADE-02GAP-GRADE-03GAP-LAB-01GAP-LAB-02GAP-LAB-03GAP-NOTIF-01GAP-NOTIF-02GAP-DOWNLOAD-01GAP-NAV-01GAP-RESP-01
部分验证GAP-ADMIN-02:子组织创建和树读取已验证;根 SCHOOL 创建受后端唯一根策略限制;无删除 API
当前未发现独立新路由/API 缺口

15. 本轮 Task 4-9 Full E2E 结果

TaskSuite命令摘要结果关键修复/说明
Task 5full-admin.spec.tsnpx playwright test src/tests/e2e/full-admin.spec.ts --project=chromium5 passed修复平台配置可空字段清空;覆盖 auth、治理、审计、权限解释
Task 6full-course.spec.tsnpx playwright test src/tests/e2e/full-course.spec.ts --project=chromium5 passed修复开课 keyword 大小写查询;覆盖成员、资源、讨论、题库、判题环境
Task 7full-assignment-judge.spec.tsnpx playwright test src/tests/e2e/full-assignment-judge.spec.ts --project=chromium3 passed教师提交详情页访问前切换到教师 session
Task 8full-grading-lab-notification.spec.tsnpx playwright test src/tests/e2e/full-grading-lab-notification.spec.ts --project=chromium3 passedSSE 探针直连本地后端并加 deadline;学生实验页面前切换到学生 session
Task 9full-navigation-permission.spec.tsnpx playwright test src/tests/e2e/full-navigation-permission.spec.ts --project=chromium3 passed登录后进入角色首页;侧边栏限定 navigation;按当前路由守卫和按钮文案更新断言

本节命令均使用 AUBB_E2E_REAL_BACKEND=1AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 和测试账号密码环境变量。报告只记录变量名,不记录变量值。

16. 2026-05-17 当前代码事实复核

本节为当前会话重新扫描结果,不直接采信 2026-05-16 的结论。旧报告仅作为线索。

类别当前证据结论
仓库边界根目录 git status 返回 fatal: not a git repositoryfind . -maxdepth 3 -name .git -type d 仅列出 server/web/docs/根目录不是 Git 仓库,后续 diff、commit、status 必须分子仓库处理
技术栈server/pom.xmlweb/package.jsondocs/package.json后端为 Spring Boot 4.0.5 / Java 25 / Maven;前端为 Next.js 16.2.4 / React 19.2.4 / TypeScript;文档为 VitePress
前端路由find src/app -name page.tsx | sort当前 45 个业务页面,覆盖 plan 中列出的公共、管理员、教师、学生路由
后端 APIrg --files src/main/java/com/aubb/server/modules | rg '/api/.*Controller\\.java$'当前 33 个 Controller,覆盖认证、治理、课程、作业、提交、判题、成绩、实验、通知
前端 API 封装find src/features -path '*/api/*' -type f | sort当前 20 个领域 API 文件,可映射到后端 Controller 域
测试资产find src/test/java/com/aubb/server ...find src/tests -type f后端具备覆盖主要域的集成/单元测试;前端具备 full E2E、smoke E2E 和 unit/contract 测试
控件清单输入控件关键词 rg 扫描当前返回 1112 行源码命中;后续按钮级报告以源码命中、真实 DOM 和 Playwright 用例共同收敛

16.1 当前前后端域映射

功能域前端入口前端 API后端 Controller
Auth/session/login//unauthorizedsrc/features/auth/api/auth-api.tsAuthController
Admin governance/admin/platform-config/admin/org-units/admin/users/**/admin/audit-logs/admin/auth-explainsrc/features/admin/api/*.tsPlatformConfigAdminControllerOrganizationAdminControllerUserAdminControllerAuthzGroupAdminControllerAuditLogAdminController
Course administration/admin/academic-terms/admin/course-catalogs/admin/course-offerings/**src/features/admin/api/course-admin-api.tsAcademicTermAdminControllerCourseCatalogAdminControllerCourseOfferingAdminController
Course teaching/content/teacher/courses/**/student/courses/**src/features/course/api/*.tsCourseTeachingController、公告/资源/讨论 teacher 和 me Controllers
Assignment/question bank/teacher/assignments/**/teacher/question-bank、学生作业页src/features/assignment/api/*.tsAssignmentTeacherControllerMyAssignmentsControllerQuestionBankTeacherController
Submission/workspace/judge学生 workspace、学生/教师提交详情src/features/submission/api/*.tssrc/features/judge/api/*.tsMySubmissionControllerTeacherSubmissionControllerMyProgrammingWorkspaceController、Judge Controllers
Grading/lab/notification成绩、实验、通知各角色页面src/features/grading/api/grading-api.tssrc/features/lab/api/lab-api.tssrc/features/notification/api/*.tsGradebook/Grading、Lab、Notification Controllers

16.2 本轮待验证状态

当前已完成静态事实复核,尚未在本轮启动真实依赖、真实后端、真实前端或运行真实 Playwright。下一阶段必须用当前命令输出覆盖本节“待验证”状态。

17. 2026-05-17 真实运行基线

项目当前证据结论
Docker 依赖docker compose up -d postgres rabbitmq minio redis go-judge && docker compose psPostgreSQL、RabbitMQ、MinIO、Redis 为 healthy,go-judge running
后端启动bash ./mvnw spring-boot:run,端口 18080成功;第一次按 S1 bootstrap 失败,原因是本地库已有 SCH-REALRUN 根节点;第二次改用当前根节点 code 后成功
后端健康curl /actuator/health/readinessstatus=UP,包含 db、goJudge、judgeQueue、minioStorage、readinessState、redisEnhancement
OpenAPIcurl /v3/api-docsOpenAPI 3.1.0124 paths
权限 fixturescripts/api-tests/permission/run_permission_e2e.sh22/22 真实 HTTP 权限场景通过
前端启动AUBB_SERVER_ORIGIN=http://127.0.0.1:18080 npm run dev -- --hostname 127.0.0.1 --port 3000Next dev server 监听 127.0.0.1:3000/login HTTP 200
登录基线npx playwright test src/tests/e2e/auth.spec.ts --project=chromium with real backend envChromium 5 passed,覆盖三角色登录、退出、学生访问管理员页面负例

当前结论:真实依赖、真实后端、真实前端和基础认证路径已在本轮重新验证通过。后续仍需运行 full suites、静态/构建/文档门禁,并更新按钮级矩阵。

18. 2026-05-17 Full Suites 结果

Suite用例数覆盖域当前结果
full-admin.spec.ts5认证、平台配置、组织、用户治理、CSV、学期、课程模板、开课、审计、权限解释5 passed
full-course.spec.ts5教学班、成员、资源上传下载、讨论、题库、判题环境5 passed
full-assignment-judge.spec.ts3作业生命周期、提交附件、编程工作区、样例运行、正式判题、重判3 passed
full-grading-lab-notification.spec.ts3成绩册、导出/导入/发布、实验生命周期、附件、通知3 passed
full-navigation-permission.spec.ts3三角色导航、搜索、用户菜单、权限负例、桌面/移动关键操作3 passed

本轮 full suites 小计 19 passed,均连接真实本地前端 3000 和真实本地后端 18080。E2E 源码静态复核未发现 Playwright route mock 或 msw

19. 2026-05-17 最终门禁与结论

门禁当前证据结果
真实依赖docker compose up -d postgres rabbitmq minio redis go-judgePostgreSQL、RabbitMQ、MinIO、Redis healthy,go-judge running
后端运行spring-boot:run on 127.0.0.1:18080readiness UP,components 包含 dbgoJudgejudgeQueueminioStoragereadinessStateredisEnhancement
运行时契约GET /v3/api-docsOpenAPI 3.1.0124 paths
权限真实 APIscripts/api-tests/permission/run_permission_e2e.sh22/22 通过
前端运行Next dev server on 127.0.0.1:3000/login HTTP 200,E2E 通过真实前端和真实后端
Playwright 完整套件AUBB_E2E_REAL_BACKEND=1 ... npm run test:e2e36 passed,无 Playwright route mock / msw 命中
前端静态/构建npm run lintnpm run typechecknpm run testAUBB_SERVER_ORIGIN=... npm run build全部通过;unit/contract 为 24 tests,通过;build 生成 30 个静态页面
后端全量验证bash ./mvnw spotless:checkbash ./mvnw verifySpotless BUILD SUCCESS;verify 318 tests,0 failures / 0 errors / 0 skipped
文档站cd docs && npm run docs:buildVitePress build 通过

19.1 当前覆盖结论

本轮按根目录 plan.md 从当前代码重新扫描 45 个前端业务页面、33 个后端 Controller、20 个前端 API 封装和 36 个 Playwright 测试标题;随后用真实 Docker 依赖、真实 Spring Boot 后端、真实 Next dev server 和 Chromium Playwright 执行验证。当前未发现新的独立路由/API 覆盖缺口。

按钮级结论与边界保持不变:关键页面入口、主按钮、上传/下载、发布/关闭、权限负例、导航、桌面和移动视口都已有真实运行证据;部分复杂写入准备动作仍通过 API helper 完成,不等同于每个表单字段都由鼠标键盘逐项填写。

19.2 环境偏差与残余风险

项目说明
bootstrap codeplan.md 示例为 S1,但本地持久化 PostgreSQL 已有唯一学校根节点 SCH-REALRUN;本轮未清库,改用现有根节点 code 启动后端
本地数据残留E2E 会新增 E2E-* 用户、组织、课程、作业、实验、判题和审计记录;当前业务无统一删除 API,未执行破坏性清理
SSESSE 事件探针直连本地后端;浏览器通知页仍通过真实前端验证列表、未读数和已读操作
OTLP 日志后端运行期间本地 localhost:4318 OTLP receiver 未启动,出现 metrics publish connection refused 警告;不影响 readiness、业务 E2E 或 mvn verify 结果
结论范围结论只针对 2026-05-17 当前工作区、本地 Docker 依赖、18080 后端、3000 前端和当前种子/残留数据

19.3 收尾状态

项目当前结果
后端spring-boot:run 会话已退出;curl --max-time 2 http://127.0.0.1:18080/actuator/health/readiness 连接失败
前端Next dev server 会话已退出;curl --max-time 2 http://127.0.0.1:3000/login 连接失败
Docker composedocker compose down 已执行;docker compose ps 无运行服务;未删除 volumes