feat: 增加反馈消息闭环相关功能及文件
新增反馈目标登录白名单、账户切换守卫、待确认反馈存储、缓存生命周期管理,补充相关文档及截图,完善消息跳转逻辑
This commit is contained in:
+99
-1
@@ -1,6 +1,104 @@
|
||||
# AI融资项目新会话交接
|
||||
|
||||
记录日期:2026-10-02。本文件为接续入口;当前存储与流程以[评估版本与最新资料](评估版本与最新资料.md)、[开发进度](开发进度.md)0.51节(积分页面恢复与隔离联调)及[开发文档](开发文档.md)v1.43为准,0.50/0.49/0.48/0.47保留前序开发与规则设计历史。历史章节中的域名、部署及“待开发”以最新记录为准。
|
||||
记录日期:2026-10-05。本文件为接续入口;当前存储与流程以[评估版本与最新资料](评估版本与最新资料.md)、[开发进度](开发进度.md)0.62节(反馈与消息后端生产发布)、0.61节(反馈与消息配套发布准备)、0.60节(反馈恢复与消息组合检查)、0.59节(反馈回复通知联动)、0.58节(会员反馈原键恢复)、0.57节(后台反馈处理及既有小程序发布状态)、0.55节(后端发布)及[开发文档](开发文档.md)v1.46为准。历史章节中的域名、部署及“待开发”以最新记录为准。
|
||||
|
||||
## 新会话接续检查点:2026-10-05
|
||||
|
||||
本轮收到“发布吧,小程序端我自己发布”后,已在维护窗口内通过宝塔 Playwright 完成明确生产目标 `111.230.144.231:3306/airz` 的迁移与后端发布。完整私密备份为 `/root/airz-feedback-release-20261005-114514`;迁移前后均完成预检,`fa_feedback` 的四列及 `uk_user_feedback_request(user_id,request_id)` 已补齐,`fa_user_message` 唯一索引保持存在,迁移后 `missingFields=[]`、`indexExists=true`、`duplicateGroups=0`、`changeCount=0`。迁移行摘要备份为 `/root/airz-feedback-release-20261005-114514/migration/feedback-20261005-115239-3e7a68c4.json`。
|
||||
|
||||
- 已按精确清单发布 7 个后端文件,发布包 SHA-256 为 `597A2BC55D8877FCA5EFC205C1B0761D14B0B1E614196DD7C1C1FF7B8775D4B3`;线上文件哈希与发布包一致,PHP 7.4 lint 通过,权限为 `644 root:root`。`php-fpm-74`、`redis`、`airz-analysis` 已恢复 active,Redis 认证后分析队列为0,worker 发布后无 warning/error 日志。
|
||||
- 只读烟测通过:`/api/v1/home=200`;匿名 `/api/v1/messages`、`/api/v1/products`、`/api/v1/points` 均为401;后台反馈入口返回登录页;`/.env=404`。未创建真实反馈或回复。临时发布包、迁移脚本、临时 env、解压目录和烟测响应已清理。
|
||||
- 本轮只发布后端,小程序端由用户自行发布;未提交、未推送、未创建 PR。回滚只恢复代码,保留迁移后的字段、反馈、回复、审计和通知数据,禁止整表恢复。详见[反馈与消息发布清单](反馈消息发布清单.md)。
|
||||
|
||||
## 新会话接续检查点:2026-10-04
|
||||
|
||||
本轮已完成0.60反馈原键恢复与回复通知的组合开发检查,业务实现无新增变更,不进行正式验收、提交/推送或部署。0.59建议的消息跳转、分类分页、已读水位与账户切换组合检查已补充,后续无需把它当作尚未执行的本轮任务。
|
||||
|
||||
- 两仓库及既有未提交改动均保留;新增后端 `D:/AAdesk/202609/airz/tests/feedback_recovery_notifications.php`。首次执行修正新测试的分页游标断言,业务实现保持既有契约。最终组合24项、通知43项、反馈67项,共134项通过,PHP7.4语法通过,夹具回滚/并发清理及原行保持,模型调用0。
|
||||
- 前端Chrome Playwright手机390×844/桌面1280×900补充42项、38次受控请求通过,覆盖分类20+3分页/503重试、已读水位外新通知、第一页之外反馈目标、通知跳转与原键恢复/确认、跨账户旧弹窗/动作/迟到分页/401/成功回执。pageerror=0,console仅刻意503/401两条,截图无横溢或遮挡。所有API在浏览器内拦截为合成响应,无新增真实HTTP联调或真机证据;Browser plugin not available,复用已有缓存Playwright。
|
||||
- 全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-feedback-combo-1791117356770/`,MySQL8.0.44随机库 `127.0.0.1:3309/airz_product_test_1791117356770` 从schema初始化26表;不是生产MySQL5.7验证。显式bootstrap不加载正式.env、模型关闭,无正式3306/线上/worker调用,未启动Redis或PHP HTTP。库已DROP、MySQL正常停止、浏览器存储清空并关闭,3309/8097/6398无监听,5173原预览保留。
|
||||
- 安全证据:ROOT内 `verification.json`、`ui-result.json`、`cleanup-result.json`、`combo-pending-mobile.png`、`combo-confirmed-desktop.png`。自动审批以 `blocked by policy` 拒绝本轮文件清理,未重试或绕过;本ROOT与初始化失败目录 `C:/Users/JUN/AppData/Local/Temp/airz-feedback-combo-1791117251852/` 的mysql-data/runtime/工具文件及本轮生成日志保留,不整体共享或启动bootstrap。仅单独参考安全证据,历史私密ROOT未改,新检查必须另建隔离环境。
|
||||
- 当前台账1.50、开发文档仍v1.46,63任务/27页面;前端源码未变,未重复Android/微信编译,沿用0.59编译记录。后端最新发布仍0.55,用户已发布的小程序不含0.57—0.59新增源码,正式验收状态不因本轮检查改变。
|
||||
- 下一步优先准备0.57—0.59配套发布的文件清单、发布顺序、兼容性和回滚检查,可先做本地准备;实际部署/前端发行需要新的明确授权。积分规则/正式迁移、真实产品及私有附件/短信/数据/人工客服依赖继续按既有业务决策,不自行启用或虚构供应商能力。
|
||||
|
||||
## 上一轮接续检查点:2026-10-04(0.59历史)
|
||||
|
||||
本轮已按用户“阅读交接并继续下一步开发”完成0.59反馈回复与站内消息通知联动,代码、隔离检查和文档已收尾;继续暂不做正式验收。此前0.58的“通知联动尚未实施”已被本节取代。
|
||||
|
||||
- 两仓库仍为前端 `D:/WorkSpace/cyun/ai融资`、后端 `D:/AAdesk/202609/airz`;保留所有既有未提交及未跟踪改动。本轮未提交/推送、部署或正式验收。
|
||||
- 后台 `resolved/closed` 非空回复首次产生一条本人服务通知,事件键 `(user_id,feedback_replied,feedback_id)`;重复保存/修订不重复通知,不重置已读,点击查看最新回复。处理中/空回复/匿名/已删除会员不通知,无历史自动回补。反馈、审计、通知同事务,通知故障返回 `FEEDBACK_NOTIFICATION_UNAVAILABLE` 并全部回滚;复用既有表和唯一索引,无DDL。
|
||||
- 消息目标 `{kind:feedback,feedbackId}` 同时验证消息与反馈归属;删除或归属变化显示不可用。消息/帮助/登录前端只生成白名单路由,通过本人单条API读最新回复并核对ID,旧反馈不在第一页也能查看;局部重试、登录回跳、离页/换账户/旧弹窗/旧列表动作及迟到401守卫已实现。
|
||||
- 后端通知43项、反馈67项、处理32项,共142项通过;Chrome手机390×844/桌面1280×900页面48项、51请求通过(46真实隔离、5受控故障/坏响应),含完整真实密码登录回跳和实际撤销Token后的迟到401。pageerror=0,3条console仅刻意503/404/401,截图无横溢或遮挡。Browser plugin not available,使用已有缓存Playwright,无新增依赖;Android19:38:59、微信19:39:40编译成功,27页面。
|
||||
- 当前台账1.49、开发文档v1.46;仍63任务/27页面,SUPPORT-002及MSG正式验收状态不因开发检查改变。后端最近发布仍为0.55,已发布的小程序不含0.57—0.59新增源码;反馈新增目标需配套前端,不能沿用历史部署授权。
|
||||
- 下一接续可补消息跳转与原键恢复组合场景、分类分页及账户切换的剩余开发检查,再按台账推进供应商无关项;不要重复把通知功能当作未实施。积分规则/正式迁移、私有附件、短信/数据及人工客服仍遵循原业务决策。
|
||||
- 当前仅5173预览保留;新建测试库与Token已清除,3309/8097/6398无监听。私密临时文件删除被策略拒绝,精确ROOT及证据见下节;不能直接复用、整体共享或启动历史bootstrap。默认后端.env按正式库风险处理,不直接初始化应用或运行worker;新检查另建隔离环境。
|
||||
|
||||
## 本轮开发:2026-10-04 反馈回复与消息通知联动
|
||||
|
||||
主要入口:后端 `application/admin/library/FeedbackEditor.php`、`application/common/library/UserMessages.php`、新增 `tests/feedback_notifications.php`;前端 `services/messages.uts`、`packages/account/messages/messages.uvue`、`packages/content/help/help.uvue`、`packages/content/services/feedback.uts`、`packages/account/login/login.uvue`。`FeedbackRecords.php` 的上一轮requestId契约保留。通知正文仅为查看提示,不复制反馈原文/回复,不向外部渠道发送消息。
|
||||
|
||||
隔离ROOT `C:/Users/JUN/AppData/Local/Temp/airz-feedback-notify-1791113938987/`,库 `127.0.0.1:3309/airz_product_test_1791113938987` 从schema初始化26表,仅合成资料;PHP8097、独立Redis6398/DB15和随机前缀,未加载正式.env、未连接正式3306/线上、无模型/worker调用。新MySQL8默认认证与旧PHP不兼容,已仅在本轮隔离实例切换为mysql_native_password后通过检查,未修改系统或正式MySQL。
|
||||
|
||||
收尾已清除两名合成会员全部Token(含真实登录新增凭证)、DROP本轮库,MySQL/Redis正常关闭、PHP停止、浏览器关闭,3309/8097/6398无监听;5173预览仍使用配置中的体验API。自动审批以 `blocked by policy` 拒绝删除本ROOT下 `fixture.json`、`runtime`、`mysql-data`,未重试或绕过,私密文件保留;不得整体共享或直接复用,下一次须新建隔离环境,历史测试ROOT未动。
|
||||
|
||||
安全证据:本ROOT的 `ui-result.json`(48项、51请求)、`verification.json`、`cleanup-db-result.json`、`cleanup-result.json`;截图 `feedback-reply-mobile.png`、`feedback-reply-desktop.png` 已视觉核对。fixture含合成Token/密码,不属于安全证据;不要直接输出或分享。开发检查不能代替正式发布、运营/真机、多设备或供应商验收。
|
||||
|
||||
## 上一轮接续检查点:2026-10-04(0.58历史)
|
||||
|
||||
用户准备切换新会话时开发停在0.58会员反馈原键恢复,源码、隔离开发检查及文档收尾已完成。当时下一项“反馈回复与站内消息通知联动”仅为建议,已在最新0.59实施;该次交接仅补记录,未新增业务代码、提交、推送或发布。
|
||||
|
||||
- 前端仓库:`D:/WorkSpace/cyun/ai融资`;后端仓库:`D:/AAdesk/202609/airz`。两仓库保留未提交及未跟踪改动,新会话先检查适用指令及工作树,不能回滚或批量覆盖。
|
||||
- 已完成:0.57后台反馈并发保护/事务审计、0.58会员待确认提交恢复;本轮后端67项、页面93项及Android/微信编译通过。当前台账1.48、开发文档v1.45,任务仍63项、页面27个。
|
||||
- 发布状态:此前小程序已由用户发布,版本/渠道未知;0.57后台增强和0.58前后端新增源码尚未发布,后端最近发布见0.55。新前端依赖后端requestId回执,须先或配套发布;当前没有新增部署授权。
|
||||
- 下一开发入口:后端 `application/admin/library/FeedbackEditor.php`、`application/common/library/FeedbackRecords.php`,前端 `services/messages.uts`、`packages/content/help/help.uvue`。先阅读现有消息持久化及目标白名单,再实现后台回复触发本人通知、重复保存不重复通知、消息跳转本人反馈和账户切换守卫;通知需与反馈保存/审计的事务边界一致。
|
||||
- 环境复核:本次交接前只确认5173预览仍监听,3309/8097/6398无监听;本轮测试库和Token已清除。私密临时文件删除被策略拒绝,精确ROOT及证据见下一节,禁止直接复用或整体共享。后端默认.env仍按正式库风险处理,不能直接初始化应用、运行worker或旧reset/cleanup;新检查须另建明确隔离环境。
|
||||
- 仍待依赖:积分规则/正式迁移、私有附件、短信/数据与人工客服供应商按既有决策处理,不将未确认规则或供应商能力作为已完成项。
|
||||
|
||||
## 本轮开发:2026-10-04 会员反馈原键恢复
|
||||
|
||||
用户要求继续开发,暂不做正式验收。帮助页发送前按会员保存并回读 `{requestId, content}`,刷新、离页重进、真正关闭Chrome进程再启动均恢复原请求键和原文,锁定原内容并显示“确认上次提交”,不自动POST。退出、401及切换账户仍清理其他私有缓存,只保留本次待确认命令;原会员重新鉴权后才恢复,另一会员不能看到或确认。普通草稿、Token、反馈列表和回复不保存在该恢复记录中。
|
||||
|
||||
后端DTO新增 `requestId:string|null`,历史记录保留null,原键重放返回原记录当前处理状态。前端核对回执原键及完整响应,再比较本机命令后清理,迟到响应不能清新键或回填另一账户;网络/401/服务故障/409/坏回执保键,确定参数/附件拒绝才清键并保留可编辑原文。存储读写/清理故障、静默失败或损坏记录阻止覆盖并显示重新读取入口;修复H5同步读取吞异常返回空值时误判为无记录的问题,删除成功以键不存在确认。复用既有列与唯一索引,无新增DDL。
|
||||
|
||||
检查通过:反馈后端67项;真实隔离HTTP配合Chrome Playwright手机390×844/桌面1280×900主流程72项、进程重启及存储故障补充21项,共93项页面开发检查、29次反馈POST。覆盖成功入库后丢回执、刷新/离页、列表503仍确认、实际Token撤销401、主动退出、账户切换、迟到回执、错/缺requestId、坏回复、422确定拒绝及存储异常。重新登录使用真实 `saveSession` 恢复合成会话,未覆盖完整真实登录表单;两批pageerror均0,13条console仅刻意网络/401/422/503故障。Browser插件不可用,使用已有缓存Playwright,无新增依赖;最终手机和列表加载完成的桌面截图无横溢/遮挡。HBuilderX 5.26最终Android 19:14:42、微信19:16:09编译成功,27页面。
|
||||
|
||||
隔离ROOT为 `C:/Users/JUN/AppData/Local/Temp/airz-feedback-recovery-1791111261423/`,数据库为 `127.0.0.1:3309/airz_product_test_1791111261424`,26张表全部由schema初始化,仅合成资料;PHP8097、独立Redis6398/DB15及随机Token前缀,不加载正式.env、未连接正式3306/线上,无模型/worker调用。收尾已DROP本轮库、清除两枚Token,MySQL/Redis正常关闭、PHP停止,3309/8097/6398无监听,浏览器关闭。自动审批以 `blocked by policy` 拒绝删除ROOT下 `fixture.json`、`browser-profile`、`runtime`、`mysql-data`,未重试或绕过,私密文件保留;禁止整体共享或直接复用,后续须重新建立明确隔离环境。历史测试ROOT未动。
|
||||
|
||||
安全证据:本ROOT的 `ui-result.json`(72项)、`ui-extra-result.json`(21项)、`cleanup-db-result.json`、`cleanup-result.json`,截图 `feedback-pending-mobile.png`、`feedback-confirmed-desktop.png`(列表加载完成后补拍)、`feedback-storage-recovered-mobile.png`。JSON中的会员计数是各自检查阶段快照,不代表清理后仍有数据。H5开发预览 `http://localhost:5173/` 保留;浏览器测试转发已随测试浏览器关闭,预览仍使用配置中的体验API,不能视为后端新增回执已发布。
|
||||
|
||||
当前发布边界:用户此前发布的小程序版本/渠道未知,这批前端源码尚未发行;后端仍以0.55发布为准,0.57后台增强及本轮requestId回执未部署。新前端必须在后端回执支持 `requestId` 后或配套发行,否则旧后端即使已经保存反馈,前端仍保持待确认。本轮未提交/推送、不复用历史部署授权、不做正式验收。下一开发项建议反馈回复与站内消息通知联动,补齐本人反馈目标跳转、幂等通知及账户切换守卫;积分规则/正式迁移、私有附件、短信/数据与人工客服供应商继续按原决策处理。
|
||||
|
||||
## 上一轮开发:2026-10-04 小程序已发布,后台反馈处理增强
|
||||
|
||||
用户确认小程序端已经发布,未提供版本号/渠道;后文“前端尚未发行/需重发小程序”均为历史阶段记录,当前小程序状态以本节为准,H5及其他端仍各自记录。继续开发,不开展正式验收。本轮新增后端改动尚未部署,不沿用此前发布授权。
|
||||
|
||||
后台反馈保存新增 CSRF、SHA-256快照版本冲突、当前管理员/角色权限复核和事务审计。旧页面保存不会覆盖新回复,提示复制当前草稿后重新打开核对;同状态同回复保持处理人、不重复审计,审计失败回滚反馈。成功/拒绝/历史日志仅保留安全编号、状态、版本及错误枚举,不保存会员原文、回复或Token。页面补标题和窄屏弹窗负边距修复;现有表/角色复用,无DDL/权限增量。会员小程序反馈API契约未变。
|
||||
|
||||
反馈服务65项、处理事务/双PHP进程/审计故障32项、HTTP25项/13请求、权限回归227项/158请求、重试审计90项、模型配置审计20项、权限定义97项、9PHP lint与反馈JS语法通过。页面使用本机缓存Playwright(Browser plugin not available)对真实隔离HTTP完成22项检查:1280×900/390×844、冲突持续显示并保留草稿、打开最新回复和再次保存,console/error/warn为0。不是生产或运营验收,不调用模型/worker或正式数据库。
|
||||
|
||||
本轮隔离ROOT为 `C:/Users/JUN/AppData/Local/Temp/airz-feedback-edit-20261004-21199964/`,库为 `127.0.0.1:3309/airz_product_test_2026100421199964`。测试账号、反馈、日志已清空,私密UI夹具JSON已删除;隔离库已DROP,MySQL通过mysqladmin正常关闭,PHP8097/8098已停止,三端口无监听,浏览器已关闭。自动审批拒绝删除该ROOT下mysql-data/runtime/sessions及bootstrap/router/fixture工具,仅返回blocked by policy;未重试或绕过,文件保留,禁止当作可复用环境直接启动。与前轮遗留 `airz-home-catalog-20261004*` 无关,前轮文件未动。安全证据为本ROOT的 `ui-result.json`、`verification.json`、`feedback-conflict-desktop.png`、`feedback-conflict-mobile.png` 和 `feedback-saved-mobile.png`;不整体共享含会话的临时目录。
|
||||
|
||||
当时规划的会员反馈离页/进程重启原键恢复已在最新0.58完成,见本文件顶部。积分规则/正式迁移、私有附件、短信/数据及人工客服供应商仍按已有业务决策处理。
|
||||
|
||||
## 本轮部署:2026-10-04 后端发布
|
||||
|
||||
用户已授权继续开发并部署后端。本次只发布后端到 `https://airz.hqling.cloud`,不发布前端,不执行数据库迁移、积分表迁移或正式业务验收。线上目录为 `/www/wwwroot/xctai.cn`,API 前缀 `/api/v1`,后台入口 `/ZYurKboadX.php`。
|
||||
|
||||
发布包 `/tmp/airz-release-20261004.zip` 实际部署 3716 个文件,SHA-256 为 `9A39A29E77D43EEF5DA2CE5E1217FB24B4E1DBCDF97E7E266C7FDF7E55E5FEFB`。按 `stage → prepare → deploy → resume → verify → cleanup` 完成;prepare 确认 26 张表且 worker 已停,deploy 返回 `DEPLOYED files=3716`,resume 返回 `worker=active`,cleanup 私密归档为 `/root/airz-backend-20261004`。PyMySQL 仅作为临时部署依赖,已在结束后清理。
|
||||
|
||||
verify 与本机只读烟测:`/api/v1/home` 200;匿名 `/api/v1/messages`、`/api/v1/products`、`/api/v1/points` 401;`/.env`、`/.git/config`、数据库结构及旧发布包路径 404。`airz-analysis`、`php-fpm-74`、`redis` 已恢复,未调用收费模型或修改线上业务数据。后续继续开发前先阅读开发进度0.55和本节;前端尚未发行,真机、多设备、真实模型和正式验收仍未完成。
|
||||
|
||||
## 本轮开发:2026-10-04 反馈与消息适配层响应契约增强
|
||||
|
||||
反馈帮助页已用提交回执及时回填列表,回复优先显示 `handledAt`,并可读取单条反馈详情;服务层严格校验反馈编号、状态、正文、时间、分页数字、分页标记和列表项。消息服务严格校验分类、编号、快照、分页游标、消息字段、详情关联对象及 `read-all` 回执;关联目标只生成报告和评估白名单路由,防止通知数据直接下发任意链接。首页/帮助页保留页面代次与账户令牌守卫。
|
||||
|
||||
首次 Android 编译发现 `feedback.uts` 列表 `map` 的 UTS/Kotlin 回调类型推断错误,已显式转换为 `UTSJSONObject[]` 后修复。HBuilderX 5.26 Android 与微信小程序 27 页面最终编译通过,`git diff --check` 通过。尚未执行隔离数据库回归、线上部署、前端发行、真机或正式验收;所有改动仍未提交。
|
||||
|
||||
## 本轮开发:2026-10-04 首页聚合 BASE-004(隔离数据库回归完成)
|
||||
|
||||
后端新增只读 `GET /api/v1/home`,返回公开课程/文章摘要;带有效登录凭据时仅返回当前会员的评估元数据和未读消息数。草稿评估不计入,排队任务显示“排队中”,查询不读取输入资料、报告、匹配正文或消息私密字段。前端首页已接入严格响应解析并移除硬编码数量,聚合失败时保留公开内容和真实消息数的局部降级。
|
||||
|
||||
后端 `tests/home_catalog.php` 已补充匿名及登录隔离回归,覆盖草稿过滤、本人未读数、最新状态和敏感字段不泄露;夹具事务回滚、无模型/worker调用。新建临时 MySQL 8 实例仅监听 `127.0.0.1:3309`,从 `database/schema.sql` 初始化随机库 `airz_product_test_20261004123000` 后执行回归,结果为 `checks=8`、`modelCalls=0`、`writes=0`、`rollback=true`。PHP 7.4 lint、首页 Web/Android/微信编译与 `git diff --check` 已通过;测试后 3309 已停止且无监听,正式 3306、线上数据库和业务数据未连接或修改。临时目录清理由本机策略拦截,未影响工作区或正式服务。下一步继续前端发布前的开发项,仍不进行正式验收。
|
||||
|
||||
## 本轮开发:2026-10-03 FAQ 服务端导入与隔离 HTTP 联调
|
||||
|
||||
|
||||
Reference in New Issue
Block a user