feat: extend optional HTML feedback to graduate imports in 0.7.8

This commit is contained in:
Codex
2026-10-24 15:15:29 +08:00
parent 9a198fe466
commit a946aa6ec0
24 changed files with 513 additions and 36 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
# Android 首版验证记录
当前版本为0.7.6+24,应用更新检查与后台说明见[0.7.6记录](tpschedule-0.7.6-updates.md)。本科考试兼容和HTML反馈的验证见[0.7.5记录](tpschedule-0.7.5-validation.md)。两例真实课表缺失字段问题待新页面定位。本科接入记录见[0.7.0记录](tpschedule-0.7.0-validation.md)。下文为首版历史记录。
当前版本为0.7.8+26,本科/研究生HTML反馈及签名、备案信息见[0.7.8记录](tpschedule-0.7.8-validation.md)。应用更新检查与后台说明见[0.7.6记录](tpschedule-0.7.6-updates.md)。本科考试兼容的验证见[0.7.5记录](tpschedule-0.7.5-validation.md)。两例真实课表缺失字段问题待新页面定位。本科接入记录见[0.7.0记录](tpschedule-0.7.0-validation.md)。下文为首版历史记录。
日期:2026-10-13。测试环境:Flutter 3.47.7 / Dart 3.13.5 / JDK 17;Android 16 API 36,Pixel 7 模拟器,1080×2400。首版版本 0.1.0+1,包 ID com.example.hepan_everyday,最低 Android 7.0(API 24)。
+1 -1
View File
@@ -1,6 +1,6 @@
# 学校接入状态 · TPSchedule 0.7.5
0.7.5兼容本科考场/座位合并为“考试情况尚未发布”的记录,新增默认关闭的HTML邮件排查附件及具体课表字段错误码。0.7.4两例课表失败仍需实际页面才能定位,不宣称已解决,见[0.7.5记录](tpschedule-0.7.5-validation.md)。反馈服务器需同步更新,代理请求体至少24MiB。
0.7.8将可选HTML反馈扩展到本科和研究生课表/考试,研究生自动和手动读取在解析前保留安全片段,见[0.7.8记录](tpschedule-0.7.8-validation.md)。反馈服务器需同步更新研究生结构白名单,代理请求体至少24MiB。0.7.5的本科考场未发布兼容、具体课表字段错误码继续保留;0.7.4两例课表失败仍需实际页面定位,不宣称已解决。
0.7.4将本科重复登录的准确学校HTTP继续链接升级为HTTPS,并解决完整页恢复后History API改变实际文档地址、原生历史地址未同步导致的“页面证据无效”。现按实际文档地址抓取且保留同源及精确校验,见[0.7.4记录](tpschedule-0.7.4-validation.md)。
@@ -0,0 +1,49 @@
# 全学校HTML反馈 Implementation Plan
> **For agentic workers:** Use superpowers:executing-plans to implement this plan inline.
**Goal:** 本科和研究生均可将最近一次课表/考试页面作为可选反馈邮件附件。
**Architecture:** 共用SchoolPageDiagnostic,按学校收集已识别的表格与学期证据。扩展反馈服务的惰性HTML白名单,沿用原multipart和SMTP通道。
**Tech Stack:** Flutter/Dart、html、Android、Python/FastAPI。
**Spec:** ../specs/2026-10-24-all-school-html-feedback-design.md
## Global Constraints
- 0.7.8+26,com.tpschedule.app,原签名不变;备案号蜀ICP备2025169276号-5A。
- 默认关闭,日志+HTML独立同意,2MiB,10分钟内存留存。
- 不上传原始学生资料到仓库,不修改软著0.5.4备份。
## Review Focus
- 失败页面仍可排查,清洗后能重现原解析结果。
- 过期/学校切换/重认证/退出不能附带旧页面,离开导入页可反馈。
- 异步旧页面不能覆盖新页面证据。
- 服务端拒绝新的select/option标签中夹带事件、地址和无关字段。
- 版本与证书、公钥、备案信息和交付包一致。
### Task 1: 缓存、采集与反馈界面
Files: mobile/lib/services/school_page_diagnostic.dart、mobile/lib/features/school/school_session.dart、mobile/lib/features/feedback/feedback_page.dart;对应services、school_session_flow和feedback测试。
- [x] 添加并运行失败测试:研究生课表/考试清洗可重读、失败及HTTP可信页、认证剔除、缓存清理与研究生反馈提交。
- [x] 扩展受限片段采集,在研究生解析前留存;更新选项文案。
- [x] 运行针对性测试并核对旧本科行为。
### Task 2: 服务端结构兼容
Files: server/feedback/feedback_service.py、tests/test_feedback.py、tests/fixtures;部署说明。
- [x] 添加并运行失败测试:真实客户端生成的合成研究生附件可发送,活动内容与其他控件拒绝。
- [x] 按准确ID和学期选项扩展白名单;保留旧客户端兼容。
- [x] 运行反馈与更新服务完整回归。
### Task 3: 发布0.7.8
Files: mobile/pubspec.yaml、mobile/lib/app/app_version.dart、mobile/lib/features/profile/profile_page.dart、docs及dist交付。
- [x] 设置0.7.8+26及备案号,完整Flutter测试和静态分析通过。
- [x] 构建正式APK,核对包名、版本、签名MD5、原证书和用户指定RSA公钥。
- [ ] 输出同签名APK、源码、反馈服务更新包和部署说明;核对密钥、旧APK及18项冻结软著文件。
@@ -0,0 +1,15 @@
# 0.7.8:本科、研究生导入页面HTML反馈
用户要求反馈问题时两类学生均可选附带最近一次导入页面HTML;版本定为0.7.8,保留原签名,并展示备案号蜀ICP备2025169276号-5A。沿用现有反馈附件和邮件协议,不另建上传通道。
## 实现范围
- 使用现有共享SchoolPageDiagnostic内存缓存扩展研究生页面;研究生自动/手动读取课表、自动读取考试均在解析前留存已验证的页面片段,失败也可反馈。
- 本科保持原流程。研究生只接受学校现有导航策略中的精确域名、端口和pyxx路径。登录页、密码字段和认证材料不进入附件。
- 保留研究生课表/考试表格的受限ID、节次单元格ID、对应学期选择框;保留解析失败的内容以便排查。去除活动脚本、事件、表单和网络资源。服务端按同样的最小结构白名单校验。
- 选项改为“附带最近一次学校导入页面HTML”,说明适用于本科/研究生;默认关闭,需勾选日志并同意个人信息提示。HTML独立附件、上限2MiB、有效期10分钟,成功发送后清除。切换学校/重新认证/开始新查询/退出清除,离开导入页前往反馈不清除。
- APP版本0.7.8+26,包名com.tpschedule.app不变;证书MD5必须为78DE9119AD14727FA1C5E5E4E68145EE,RSA公钥与用户给出的十进制值核对。原密钥和0.5.4软著冻结文件不修改。
## 方案选择
共用现有HTML缓存和multipart字段diagnostic_html,扩展安全结构即可。另建研究生上传协议会重复客户端/服务端处理;把原始整页HTML加入普通日志会破坏既有隐私边界,因此均不采用。用户已明确要求直接修改,无额外审批步骤。
+25
View File
@@ -0,0 +1,25 @@
# TPSchedule 0.7.8+26:本科、研究生HTML反馈
2026-10-24,F:/program/app。用户要求两类学生均可选择附带导入HTML,并指定版本0.7.8、原证书MD5、公钥及备案号。本记录不包含学生原始网页、真实反馈内容或认证资料。
## 功能
反馈问题页面选项改为“附带最近一次学校导入页面HTML”,明确支持本科/研究生课表及考试;沿用默认关闭、日志联动和个人信息提示。共享内存缓存2MiB、10分钟,成功发送后清除;退出、重新认证、新查询清除,离开导入页转去反馈保留。邮件仍附TPSchedule-school-page.html,不占媒体名额,失败重试保持原编号与内容。
研究生在自动课表、手动读取和考试读取的解析前留存已验证的学校表格片段。清洗后保留tbl/sample-table-1、节次ID、drpxq/xqbh学期选择证据;剔除登录页面、无关账户区域、密码字段、网络资源、认证参数和活动脚本。允许原导航策略中学校精确域名/默认端口的HTTP研究生框架,排除其他域名、端口与userinfo。HTML并非整页逐字备份,缺少可识别表格时不会附带登录页。
反馈服务器扩展最小HTML白名单,保持本科协议和旧客户端兼容,研究生附件仍受同一大小、活动内容和幂等校验。Dockerfile明确只读程序权限,避免上传包权限影响普通用户。部署须更新原feedback服务的feedback_service.py与Dockerfile;更新管理后台updates无需重新配置。详见server/feedback/html-diagnostic-update.md。
## 回归
新增研究生课表/考试重解析、错误字段保留、HTTP框架、认证/事件剔除、期限、会话缓存生命周期、反馈勾选提交,以及客户端真实生成的合成HTML到服务端邮件附件的契约验证。
独立审查发现原生currentUrl等待期间注销导致旧片段重填缓存的问题,自动和手动两条路径均已先复现失败,再移至await返回后校验会话/generation;手动解析返回后再次校验。回归测试覆盖该等待窗口,审查复核通过。
最终Flutter完整套件302项通过,静态分析无问题;反馈与更新服务95项测试通过。正式APK构建成功;Android16/API36模拟器覆盖安装成功,冷启动Status ok、TotalTime2530ms,进程运行且未见AndroidRuntime致命错误。检查了首页、反馈选项和“我的”底部,0.7.8及备案号显示正确。模拟器沿用软件渲染启动参数;真机默认渲染方式未改。
## 版本及署名
应用TPSchedule,包名com.tpschedule.app,版本0.7.8、构建号26。“我的”展示蜀ICP备2025169276号-5A。apksigner验证成品APK签名有效,证书MD5为78DE9119AD14727FA1C5E5E4E68145EE;从新APK提取的证书与0.7.6逐字节相同,RSA公钥十进制模数与用户提供值完全一致。公开签名报告增加模数与指数,便于核对;未改私钥。软著0.5.4冻结材料和旧版安装包保持。
未登录生产服务器、未变更生产配置、未发送实际邮件;真实学校登录和邮件接收由用户安装更新并同步部署反馈服务后复测。