feat: 增加反馈消息闭环相关功能及文件
新增反馈目标登录白名单、账户切换守卫、待确认反馈存储、缓存生命周期管理,补充相关文档及截图,完善消息跳转逻辑
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# 反馈与消息联动发布清单
|
||||
|
||||
更新日期:2026-10-05。本文记录0.57—0.59反馈闭环源码的发布范围、迁移、验收和回滚边界。本轮已完成后端生产发布;小程序端由用户自行发行。目标后端为 `https://airz.hqling.cloud`,生产目录为 `/www/wwwroot/xctai.cn`。
|
||||
|
||||
## 1. 发布范围
|
||||
|
||||
本次配套范围包括:
|
||||
|
||||
- 0.57后台反馈并发保护、CSRF、版本冲突和事务审计。
|
||||
- 0.58会员反馈 `requestId` 回执、未知提交恢复和原键确认。
|
||||
- 0.59反馈回复触发本人站内消息、消息目标跳转、通知去重及账户切换守卫。
|
||||
|
||||
本地发布包应只从下列清单取文件。前端与后端必须作为同一兼容批次安排;后端先发布并完成回执检查后,才能发行依赖 `requestId` 和反馈目标的前端。
|
||||
|
||||
明确排除:积分规则及积分表迁移、首页及内容功能的其他未提交改动、`Home.php`/`HomeCatalog.php`、首页测试、FAQ种子导入、私有附件、短信/数据/人工客服供应商接入,以及本仓库中与本批次无关的 Playwright 产物和 `output/`。不把当前工作树的其他改动带入发布包。
|
||||
|
||||
## 2. 精确文件清单
|
||||
|
||||
### 前端仓库 `D:\WorkSpace\cyun\ai融资`
|
||||
|
||||
| 文件 | 作用 |
|
||||
| --- | --- |
|
||||
| `packages/account/login/login.uvue` | 反馈目标登录白名单和登录后回跳 |
|
||||
| `packages/account/messages/messages.uvue` | 分类消息、已读和反馈目标入口 |
|
||||
| `packages/content/help/help.uvue` | 反馈列表、详情读取、原键确认和回复展示 |
|
||||
| `packages/content/services/feedback.uts` | `requestId` 回执、待确认持久化和反馈接口解析 |
|
||||
| `services/cache-lifecycle.uts` | 账户切换、401 和退出时的缓存生命周期 |
|
||||
| `services/messages.uts` | 消息分页、详情目标和反馈白名单路由 |
|
||||
|
||||
### 后端仓库 `D:\AAdesk\202609\airz`
|
||||
|
||||
| 文件 | 作用 |
|
||||
| --- | --- |
|
||||
| `application/admin/controller/Feedback.php` | 后台反馈表单的 CSRF、版本和安全投影 |
|
||||
| `application/admin/library/FeedbackEditor.php` | 并发保护、权限复核、反馈/审计/通知事务 |
|
||||
| `application/admin/model/AdminLog.php` | 安全审计字段及白名单日志投影 |
|
||||
| `application/admin/view/feedback/edit.html` | 版本快照、CSRF 字段和冲突表单 |
|
||||
| `application/common/library/FeedbackRecords.php` | 会员反馈 `requestId` 回执和本人读取 |
|
||||
| `application/common/library/UserMessages.php` | 反馈回复通知及反馈目标归属校验 |
|
||||
| `public/assets/js/backend/feedback.js` | 后台冲突提示、草稿保留和重试交互 |
|
||||
|
||||
迁移脚本 `database/migrate_feedback.php` 与 `database/migrate_user_messages.php` 仅用于目标结构预检或另行授权的增量迁移,不因出现在仓库中而自动随代码发布执行。
|
||||
|
||||
## 3. 数据库预检与迁移前置
|
||||
|
||||
发布前在明确的目标环境执行只读预检,命令中的 `.env`、主机、端口和库名必须由本轮维护记录明确填写;不从本机默认 `.env` 推断目标,也不把正式凭据写入本文。
|
||||
|
||||
```sh
|
||||
php database/migrate_feedback.php \
|
||||
--env <explicit-env> --target <host:port/database>
|
||||
|
||||
php database/migrate_user_messages.php \
|
||||
--env <explicit-env> --target <host:port/database>
|
||||
```
|
||||
|
||||
`fa_feedback` 需要确认 `request_id`、`reply`、`handled_by`、`handled_at` 四列,以及唯一索引 `uk_user_feedback_request(user_id,request_id)`;历史 `request_id IS NULL` 必须保留。`fa_user_message` 需要确认 `uk_user_message_event(user_id,business_type,business_id)`,并确认没有重复事件组。两项预检还应记录 MySQL 版本、InnoDB/字符集、重复组数量、当前行数和活动任务状态。
|
||||
|
||||
若字段或索引缺失:先阻断写入、停空闲 worker、确认无 processing/pending/streaming 任务,完成完整表结构和数据备份,再单独取得迁移授权。迁移只能使用脚本的显式 `--apply --backup-dir`,迁移后重跑预检并确认 `changeCount=0`;本轮准备工作不执行 `--apply`,也不自动修复重复键、错误索引或结构漂移。
|
||||
|
||||
## 4. 推荐发布顺序
|
||||
|
||||
1. 维护窗口开始后阻断后台写入,核对 `airz-analysis`、PHP-FPM、Redis/队列和错误日志;记录进程状态、队列计数、数据库目标和备份位置。
|
||||
2. 完成上节两个只读预检。缺字段/索引时暂停代码发布,按授权单独迁移并复检。
|
||||
3. 备份本批后端旧文件、`fa_feedback`/`fa_user_message` 结构和必要行摘要;保存新文件 SHA-256。备份不能替代迁移脚本的结构核对。
|
||||
4. 先发布后端精确清单,刷新 PHP-FPM/OPcache,确认旧接口仍能鉴权和读取,随后验证新的反馈回执及消息接口。
|
||||
5. 做后端冒烟:新反馈返回相同 `requestId`;同键重放返回原记录当前状态;旧后台页面缺 CSRF/版本时拒绝保存;版本冲突不覆盖草稿;有效回复只产生一条本人通知;重复保存、修订和后续关闭不重复通知;消息目标只能打开本人的反馈。
|
||||
6. 后端冒烟通过后,重新编译前端并更新 H5/小程序体验版本。前端发行必须包含本清单的全部六个文件,不能只更新消息页或帮助页。
|
||||
7. 做前端冒烟:消息分类分页、已读水位、通知跳转、第一页之外反馈读取、登录回跳、账户切换、退出/401、迟到响应、原键确认和反馈列表局部重试;再检查控制台错误、页面横溢和关键截图。
|
||||
8. 恢复 worker 与入口,观察队列、PHP-FPM、通知错误和 `FEEDBACK_*`/`MESSAGE_*` 业务码;维护窗口结束后记录实际版本、证据和剩余风险。
|
||||
|
||||
## 5. 兼容性矩阵
|
||||
|
||||
| 后端 | 前端 | 结果 |
|
||||
| --- | --- | --- |
|
||||
| 旧0.55 | 旧前端 | 既有流程保持;不含本批新能力 |
|
||||
| 旧0.55 | 新0.58/0.59前端 | 新反馈成功可能已入库但缺 `requestId` 回执,页面会持续待确认;禁止发行 |
|
||||
| 新0.57—0.59 | 旧前端 | 旧会员请求没有 `requestId`,新接口会拒绝;旧后台页面缺 CSRF/`expectedVersion` 不能继续保存 |
|
||||
| 新后端 | 新前端完整批次 | 目标组合;仍需完成迁移预检、后端冒烟和前端发行检查 |
|
||||
| 新后端仅后台文件 | 新会员前端缺消息/反馈文件 | 回复通知可以落库,但用户不能可靠跳转或确认;禁止拆开发行 |
|
||||
|
||||
数据库结构未确认前,不把“源码无新增 DDL”当作线上已兼容。反馈四列和消息唯一索引是本批接口行为的前置条件。
|
||||
|
||||
## 6. 回滚边界
|
||||
|
||||
代码故障时先阻断写入并恢复本批前的后端文件,刷新 PHP-FPM/OPcache,再按旧前端版本回退 H5/小程序;保留新增反馈、回复、审计和通知行,避免用户已看到的业务结果消失。回退后仍需检查旧接口不会误读新目标字段。
|
||||
|
||||
不得整表覆盖 `fa_feedback` 或 `fa_user_message`,不得用旧备份覆盖发布后的新写入,不得因为代码回退而删除通知、已读时间或反馈处理记录。新增字段和唯一索引默认保留;只有单独审查迁移备份、确认旧代码和数据均不再依赖后,才可讨论 DDL 回退,本文不默认执行 `DROP INDEX` 或删列。
|
||||
|
||||
前端发行回退不等于数据库回退。回退记录必须包含实际代码版本、前端版本、迁移状态、备份位置、已保留业务数据和复验结果。
|
||||
|
||||
## 7. 当前状态
|
||||
|
||||
2026-10-05 已在维护窗口内通过宝塔 Playwright 完成明确生产目标 `111.230.144.231:3306/airz` 的迁移与后端发布。完整私密备份为 `/root/airz-feedback-release-20261005-114514`;`fa_feedback` 四列及唯一索引已补齐,`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。代码回滚保留迁移后的字段、反馈、回复、审计和通知数据,禁止整表恢复。
|
||||
+26
-4
@@ -1,6 +1,28 @@
|
||||
# AI 融资平台开发文档
|
||||
|
||||
> 版本:v1.43 · 基线日期:2026-09-22 · 更新日期:2026-10-02 · 状态:积分后端已随5fee3cf部署,默认关闭、DEC-POINT待确认;原表未迁移,积分页面真实读取、异常恢复及隔离联调完成,前端未重新发行。以下后台和内容模块的历史部署状态以新会话交接及后端deployment-baota.md最新发布记录为准。微信/Android编译通过,小程序需重新发行,H5未部署、真机及多设备待验收。最新资料/评估版本及会话精简约定保留。
|
||||
> 版本:v1.46 · 基线日期:2026-09-22 · 更新日期:2026-10-05 · 状态:用户确认此前小程序端已发布,版本号/渠道未提供;后端已于10月4日发布,最新记录见交接及后端deployment-baota.md。反馈回复通知、会员反馈原键恢复及后台反馈处理增强为新增源码,尚未配套发布;新前端依赖后端requestId回执,反馈目标需配套更新前端。0.57—0.59的配套文件、顺序、兼容性和回滚准备见[反馈与消息发布清单](./反馈消息发布清单.md),当前未部署/发行。积分默认关闭、DEC-POINT待确认、原表未迁移;H5未部署、真机及多设备待验收。最新资料/评估版本及会话精简约定保留。
|
||||
|
||||
### 0.59 2026-10-04 反馈回复与站内消息契约
|
||||
|
||||
后台处理时 `resolved/closed` 非空回复为有效通知事件,复用 `fa_user_message`:`type=2,business_type=feedback_replied,business_id=feedback_id`。既有 `(user_id,business_type,business_id)` 唯一索引原子去重,每条反馈首次有效回复通知一次;相同保存、修订回复及后续状态变化不增通知、不重置已读,点击后查看当前回复。处理中、空回复、匿名或已删除会员跳过,不自动补发未修改的历史反馈。通知正文仅提示查看,不包含原文或回复。`FeedbackEditor` 将回复、审计及通知写入同一事务,通知错误返回503 `FEEDBACK_NOTIFICATION_UNAVAILABLE` 并回滚全部变更;审计失败同样回滚。
|
||||
|
||||
本人消息详情增加 `target:{kind:feedback,feedbackId:string}`;反馈必须仍存在并属于同一鉴权会员,否则 `target:null,targetUnavailable:true`。旧评估目标契约不变。前端只构造 `/packages/content/help/help?feedback=1&feedbackId=<正INT编号>`,详情通过已有本人接口单独读取并核对响应ID,不依赖列表首页。帮助页局部错误可重试;退出/换账户清理已显示回复和旧目标,离页拒绝迟到回包。登录白名单只保留合法反馈编号,重新鉴权后再次校验归属。消息旧列表点击、全部已读和弹窗确认均先核对页面所属Token。
|
||||
|
||||
无需DDL或新路由。部署时配套更新后台处理服务、`UserMessages.php` 和消息/反馈/登录前端,旧前端不能解析新增目标;本轮未发布或正式验收。后端142项、页面48项隔离检查及27页面Android/微信编译通过,环境/证据/私密文件保留情况见台账0.59。
|
||||
|
||||
### 0.58 2026-10-04 会员反馈未知提交恢复契约
|
||||
|
||||
发送前用当前鉴权会员ID生成 `airz:v1:user:<userId>:content.feedback.pending`,只保存并回读 `{requestId:string, content:string}`,内容为用户本次确认发送的去首尾空白原文。普通编辑草稿不持久化,待确认记录不含Token、反馈列表或回复。已有未知命令优先恢复,锁定原内容并保留原键;刷新/离页/进程重启不自动发送,须点击“确认上次提交”,列表不可读也不阻止确认。退出/401/会话切换的缓存清理保留该例外,原会员重新鉴权前不能恢复到页面或发送,另一会员不能接管。
|
||||
|
||||
后端 `Feedback` DTO新增 `requestId:string|null`,历史NULL保持;新提交与原键重放返回相同请求键,重放返回该记录最新处理状态,不重置正文/状态/时间。前端POST回执先核对原键再严格解析,之后比较本机待确认命令才删除;清理失败继续原键确认。确定的400/413/422且业务码为 `VALIDATION_ERROR` 或 `FEEDBACK_ATTACHMENTS_UNAVAILABLE` 才弃键并保留可编辑原文,网络/401/服务不可用/409/坏回执继续保留。页面以账户、Token及代次阻止迟到结果回填,存储异常或坏记录阻止新提交并提供“重新读取提交状态”,不得按空记录覆盖。H5读取空值须结合键是否存在判定,删除成功按键不存在核验。
|
||||
|
||||
新前端须在后端回执支持 `requestId` 后或与其配套发行,否则旧后端已入库但前端不能核对成功。此次复用既有请求键列和唯一索引,无新增DDL;本轮未部署/发行、未正式验收。后端67项、页面93项隔离检查、Android/微信编译与环境清理状态见台账0.58及交接最新节。下一开发项为反馈回复与消息通知联动。
|
||||
|
||||
### 0.57 2026-10-04 反馈处理并发保护与事务审计
|
||||
|
||||
后台 `feedback/edit` GET 生成 CSRF 和处理快照 `row[expectedVersion]`,POST业务字段恰好为 `row[status/reply/expectedVersion]`。SHA-256版本包含原文、状态、回复、处理归属和原始时间,不能用秒级时间单独判定冲突;在反馈行锁内核验,旧页面以 `FEEDBACK_VERSION_CONFLICT` 拒绝,当前输入保留,须重新打开核对后提交。
|
||||
|
||||
`FeedbackEditor` 在事务内锁定并复核管理员、有效角色及 `feedback/edit` 权限,复用 `FeedbackRecords::handle` 保存。成功审计与反馈同事务,`FEEDBACK_AUDIT_UNAVAILABLE` 表示此次修改未保存;同状态同回复保持处理元数据并不写重复成功审计。成功/拒绝及历史读取均投影安全白名单,回复、原文、CSRF和未知字段省略,不新增表或权限节点。页面/控制器/服务/管理员日志及反馈JS需配套发布,JS将版本冲突持续显示在表单内并保留输入;新控制器拒绝缺版本/CSRF的旧后台表单,小程序会员反馈接口保持原契约。隔离检查结果见台账0.57,不视为正式验收。
|
||||
|
||||
### 0.51 2026-10-02 积分页面恢复与隔离联调
|
||||
|
||||
@@ -134,7 +156,7 @@ FAQ复用`fa_acticle`的`type=6`,正文保存为`schemaVersion=1`、`kind=faq`
|
||||
|
||||
会员反馈接口为`POST/GET /api/v1/feedback`与`GET /api/v1/feedback/:id`,鉴权会员ID来自Bearer会话。提交体只接受`content`、`attachmentIds`、`requestId`;内容去HTML、保留换行、最多255字,`requestId`为8—64位ASCII安全字符。同用户同请求键同正文幂等返回记录,不同正文返回409;当前附件服务未开放,`attachmentIds`必须为空数组。
|
||||
|
||||
返回项为`id/content/attachmentIds/status/reply/createdAt/updatedAt/handledAt`,状态包括`pending`、`processing`、`resolved`、`closed`。列表只读取当前会员,`page/pageSize`默认20、上限50;详情严格校验归属。后台反馈编辑白名单仅为`status/reply`,状态进入处理中或完成状态自动记录`handled_by/handled_at`,回到待处理则清空;新增、删除、批量更新和导入均拒绝。
|
||||
返回项为`id/requestId/content/attachmentIds/status/reply/createdAt/updatedAt/handledAt`,其中requestId为0.58新增回执字段,历史记录为null;状态包括`pending`、`processing`、`resolved`、`closed`。列表只读取当前会员,`page/pageSize`默认20、上限50;详情严格校验归属。后台反馈编辑白名单仅为`status/reply`,状态进入处理中或完成状态自动记录`handled_by/handled_at`,回到待处理则清空;新增、删除、批量更新和导入均拒绝,版本及CSRF要求见0.57。
|
||||
|
||||
`fa_feedback`迁移由`database/migrate_feedback.php`执行,新增请求键、回复和处理元数据列及唯一索引,历史NULL请求键保留。脚本默认只预检,必须显式`--env`、`--target`,写入还需`--apply --backup-dir`;本轮只在隔离库应用并有完整备份,未执行正式迁移或部署。帮助页的意见反馈使用空附件数组、失败重试复用请求键,并展示本人的处理状态和回复。
|
||||
|
||||
@@ -987,7 +1009,7 @@ REPORT-004页面子项完成本地联调:report/report改为评估概况、匹
|
||||
| Article/Lesson | id、title、summary、imageUrl、category、publishedAt、version;课程chapters包含稳定chapterId、title、body |
|
||||
| Message | id、type:system/service/activity、title、content、isRead、readAt、createdAt;详情另含target:{kind:report/revision,assessmentId,revisionId,type:personal/enterprise}或null、targetUnavailable |
|
||||
| PointsLedger | id、delta:int、before:int、after:int、businessType、businessId、memo、createdAt |
|
||||
| Feedback | id、content、attachmentIds、status、reply、createdAt、handledAt;用户端不暴露无关管理信息 |
|
||||
| Feedback | id、requestId:string或null(历史记录)、content、attachmentIds、status、reply、createdAt、updatedAt、handledAt;POST回执核对原请求键,用户端不暴露无关管理信息 |
|
||||
|
||||
数据库JSON采用已有snake_case字段时,由DTO统一转换为camelCase;文档中的API对象不是直接暴露数据库行。当前match_result结构使用product_id/rank/score/reasons/product_snapshot;计划v2补eligibility、positive_reasons/blocking_reasons/cautions及evidence等字段,具体映射见专项契约第5.3节,不沿用单一reasons表达所有类型的解释。
|
||||
|
||||
@@ -1093,7 +1115,7 @@ REPORT-004页面子项完成本地联调:report/report改为评估概况、匹
|
||||
| GET /points/tasks | 登录 | 无 | serverDate、timezone、items:{task,status,reward,ruleVersion}[] | 源码已实现未部署;draft签到及资料/邀请均unavailable、奖励为null,不能客户端自报完成 |
|
||||
| GET /invitations | 登录 | 无 | personalCode、shareUrl、统计摘要 | 后续POINT-003草案,当前无个人真实码 |
|
||||
| POST /invitations/bind | 登录 | inviteCode、requestId | bindStatus | 后续POINT-003草案;首次有效绑定/禁止自邀,绑定不直接发奖 |
|
||||
| POST /feedback | 登录 | content、attachmentIds、requestId | Feedback | 非空且当前表内容最长255字符;附件归属;幂等 |
|
||||
| POST /feedback | 登录 | content、attachmentIds:[]、requestId | Feedback(含原requestId) | 非空且最长255字符;同会员同键同规范化正文返回原记录当前状态,异正文409;前端回执核对原键,未知结果沿原键确认,见0.58 |
|
||||
| GET /feedback | 登录 | page/pageSize | Feedback分页 | 只本人 |
|
||||
| GET /feedback/:id | 所有者 | 无 | Feedback | 处理回复可读 |
|
||||
| POST /support/session | 登录 | scene、returnPath可选 | 客服渠道、短期会话配置、online/offline状态 | 服务端身份签名;不下发供应商私钥;会话复用策略按供应商核验 |
|
||||
|
||||
+83
-5
@@ -1,6 +1,84 @@
|
||||
# AI 融资平台开发进度
|
||||
|
||||
基线日期:2026-09-22。文档版本:1.43。最新FAQ服务端导入与隔离HTTP联调见0.52节,积分页面恢复及隔离联调见0.51节,真实读取见0.50节,积分协议与隔离开发检查见0.49节,后端基础和规则设计历史见0.48/0.47节;此前章节保留阶段记录。技术方案和接口说明见[开发文档](./开发文档.md)。本台账现有63项任务、27页面,编号与开发文档保持一致。
|
||||
基线日期:2026-09-22。文档版本:1.52。反馈与消息后端生产发布见0.62节,反馈与消息配套发布准备见0.61节,最新反馈恢复与消息组合检查见0.60节,反馈回复与站内消息联动见0.59节,会员反馈原键恢复见0.58节,小程序既有发布状态及后台反馈处理见0.57节,首页隔离回归见0.56节,后端发布见0.55节;此前章节保留阶段记录。技术方案和接口说明见[开发文档](./开发文档.md),发布材料见[反馈消息发布清单](./反馈消息发布清单.md)。本台账现有63项任务、27页面,编号与开发文档保持一致。
|
||||
|
||||
### 0.62 2026-10-05 反馈与消息后端生产发布
|
||||
|
||||
在维护窗口内通过宝塔 Playwright 完成 `111.230.144.231:3306/airz` 的反馈结构迁移和后端发布。完整私密备份为 `/root/airz-feedback-release-20261005-114514`;迁移补齐 `fa_feedback.request_id/reply/handled_by/handled_at` 及唯一索引 `uk_user_feedback_request(user_id,request_id)`,迁移后预检为 `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 日志。只读烟测通过首页200、匿名消息/产品/积分401、后台反馈入口登录页和 `/.env=404`;未创建真实反馈或回复,临时发布物已清理。
|
||||
|
||||
本轮只发布后端,小程序端由用户自行发行;未提交、未推送、未创建 PR。回滚仅恢复代码并保留迁移后的反馈、回复、审计和通知数据,不整表恢复。首页、积分、FAQ种子及供应商依赖不属于本批次。
|
||||
|
||||
### 0.61 2026-10-05 反馈与消息配套发布准备
|
||||
|
||||
新增[反馈与消息发布清单](./反馈消息发布清单.md),整理0.57—0.59的前后端精确文件、明确排除项、数据库只读预检、迁移授权前置、推荐发布顺序、兼容性矩阵和保留业务数据的回滚边界。清单明确 `fa_feedback` 的 `request_id/reply/handled_by/handled_at` 与 `uk_user_feedback_request`,以及 `fa_user_message` 的 `uk_user_message_event` 必须先预检;缺失时不得凭“源码无新增DDL”跳过结构核对,正式 `--apply` 需另行授权、备份和停写条件。
|
||||
|
||||
本轮已在明确生产目标 `111.230.144.231:3306/airz` 执行只读预检:`fa_user_message` 唯一索引存在且重复事件组为0;`fa_feedback` 缺少四列及 `uk_user_feedback_request`,重复请求组为0,`changeCount=5`、`applied=false`。现网只读基线 `/api/v1/home=200`、匿名消息/产品/积分为401、敏感路径为404;本地7个后端文件已通过PHP/JS语法检查并生成限定包。缺失结构阻断代码发布,未执行迁移、后端部署、前端发行、正式验收、提交或推送;需单独取得生产维护授权、停写/worker空闲确认和完整备份后才能执行5项DDL。小程序端由用户自行发行,实际发布仍须将后端与六个前端文件作为同一兼容批次安排。当前工作树其他未提交/未跟踪改动保持原样,首页、积分、FAQ种子及供应商依赖不纳入本批次。
|
||||
|
||||
### 0.60 2026-10-04 反馈原键恢复与消息组合开发检查
|
||||
|
||||
新增后端 `tests/feedback_recovery_notifications.php`,以显式隔离 bootstrap 检查原键重放返回最新处理状态、同键冲突、通知目标归属、分类分页、已读水位、修订不重复通知/不重置已读、另一会员隔离及删除目标不可用;常规夹具事务回滚,七张相关表原有行保持。首次运行发现新测试将 `nextBeforeId` 误当作下一条消息编号,已按既有“本页末条编号、下一页 id<beforeId”契约修正断言,未修改业务实现。最终组合24项、通知专项43项、反馈67项,共134项通过,三文件PHP7.4 lint通过,模型调用0。
|
||||
|
||||
Chrome Playwright手机390×844/桌面1280×900补充42项组合检查、38次受控接口请求通过:系统/活动/服务分类、服务分类20+3分页和503重试、快照外新通知保持未读、第一页之外反馈目标、通知跳转同时恢复原键、刷新不自动POST、手动原键确认与最新回复、旧弹窗/已读动作、跨账户迟到分页/401/成功回执及原会员重新鉴权恢复。pageerror=0,2条console仅刻意503/401,无未处理外部请求、框架遮罩或横溢,截图已视觉核对。Browser plugin not available,使用已有缓存Playwright,无新增依赖。全部浏览器API由合成响应提供,本轮不新增真实HTTP/浏览器联调证据;修订通知的真实去重/已读保持由后端隔离测试验证。
|
||||
|
||||
全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-feedback-combo-1791117356770/`,本机MySQL8.0.44仅监听127.0.0.1:3309,随机库 `airz_product_test_1791117356770` 从5.7结构schema初始化26表,显式配置关闭模型、不加载正式.env,不连接正式3306/线上数据库,不启动worker或Redis/PHP HTTP服务。本轮不是MySQL5.7环境验证。测试库已DROP,MySQL正常关闭,浏览器存储清空并关闭,3309/8097/6398无监听;5173原预览保留。证据为ROOT内 `verification.json`、`ui-result.json`、`cleanup-result.json`、`combo-pending-mobile.png` 和 `combo-confirmed-desktop.png`,历史私密ROOT未改、未复用。自动审批以 `blocked by policy` 拒绝本轮文件清理命令,未重试或绕过;本ROOT及初始化失败目录 `C:/Users/JUN/AppData/Local/Temp/airz-feedback-combo-1791117251852/` 的mysql-data/runtime/工具文件和本轮生成日志暂保留,不整体共享或直接启动其中bootstrap,后续另建隔离环境。
|
||||
|
||||
本轮仅新增测试和记录,无前端业务源码、接口/DDL或发布变化,不重复平台编译,沿用0.59编译记录。未正式验收、提交/推送或部署,63任务/27页面及SUPPORT-002、MSG正式验收状态保持。下一步优先准备0.57—0.59配套发布的文件清单、顺序、兼容性与回滚检查,取得新授权后才发布;积分规则/原表迁移、真实产品及私有附件/短信/数据/人工客服依赖按既有决策推进。
|
||||
|
||||
### 0.59 2026-10-04 反馈回复与站内消息通知联动
|
||||
|
||||
`FeedbackEditor` 保存有效 `resolved/closed` 非空回复时,在反馈与安全审计的同一事务内插入服务通知。事件唯一键为 `(user_id,feedback_replied,feedback_id)`,每条反馈最多一条;重复保存、修订及关闭不重复通知、不重置已读。处理中、空回复、匿名或已删除会员不通知,不自动回补未修改的历史记录。消息正文不复制反馈或回复;通知写入失败以 `FEEDBACK_NOTIFICATION_UNAVAILABLE` 回滚反馈和审计,审计失败也无残留通知。复用既有表及唯一索引,无DDL。
|
||||
|
||||
消息详情新增 `kind:feedback,feedbackId`,同时核对消息和反馈归属,删除/归属改变返回目标不可用。前端仅生成帮助页白名单路由,独立读取单条反馈并核对回执编号,第一页之外的旧记录也能查看最新回复。新增关联反馈卡、局部失败重试和登录后原目标回跳;离页清理回复,换账户清除目标,迟到响应/401、旧弹窗确认、旧列表点击和全部已读操作不能跨账户回填或跳转。
|
||||
|
||||
隔离后端通知专项43项、反馈67项、处理32项,共142项通过;覆盖双PHP进程竞争、通知/审计触发器故障回滚、本人目标、删除/归属变化、去重及已读水位。Chrome Playwright手机390×844/桌面1280×900页面48项、51请求通过(46真实隔离后端、5受控坏目标/详情故障),含完整真实密码登录回跳、实际Token撤销401和跨账户迟到响应。pageerror=0,3条console仅刻意503/404/401;页面身份、非空、无框架遮罩、交互及截图视觉检查通过,无横溢。Browser plugin not available,使用已有缓存Playwright,不新增依赖。HBuilderX5.26 Android 19:38:59、微信19:39:40编译成功,27页面。
|
||||
|
||||
新建ROOT `C:/Users/JUN/AppData/Local/Temp/airz-feedback-notify-1791113938987/`,MySQL `127.0.0.1:3309/airz_product_test_1791113938987` 从schema初始化26表,独立Redis6398/DB15及PHP8097;未加载正式.env、未连接正式3306/线上、无模型或worker调用。测试库已DROP、两名合成会员全部Token已清除,三服务停止且3309/8097/6398无监听,5173预览保留。自动审批以 `blocked by policy` 拒绝删除本ROOT的 `fixture.json/runtime/mysql-data`,未重试或绕过,私密文件保留,禁止直接复用或整体共享。安全证据为 `ui-result.json/verification.json/cleanup-db-result.json/cleanup-result.json` 和 `feedback-reply-mobile.png/feedback-reply-desktop.png`。
|
||||
|
||||
仅开发检查,未正式验收、提交/推送或发布。最新后端仍为0.55,用户此前发布的小程序不含本轮源码。反馈目标为新增契约,旧前端无法解析,需将本轮及0.57/0.58前后端配套安排发布;不沿用历史授权。SUPPORT-002、MSG系列正式验收及私有附件/客服供应商依赖保持原状态。
|
||||
|
||||
### 0.58 2026-10-04 会员反馈原键恢复
|
||||
|
||||
帮助页在发送前按会员保存并回读 `{requestId, content}`,键为 `airz:v1:user:<userId>:content.feedback.pending`。仅保存已准备发送且结果尚未确认的命令,不保存普通草稿、Token、反馈列表或回复。刷新、离页重进和浏览器进程重启后恢复原键/原文,锁定原内容并显示“确认上次提交”,不自动POST;反馈列表读取失败仍可原键确认。退出、401及账户切换清理其余会员私有缓存,保留这条恢复例外,必须重新鉴权为原会员才可查看或确认。
|
||||
|
||||
POST成功回执必须包含相同 `requestId`,完整解析后比较本机原命令再清理,迟到回执不能清新命令或回填另一账户。网络/401/服务故障/冲突/坏回执保留原键;只有明确的参数或附件拒绝才清键并保留可编辑原文。存储写入、读取或清理失败及损坏记录阻止新提交,并提供重新读取状态;针对H5同步读取吞异常返回空值,先核对键是否存在,清理后以键不存在确认。后端DTO新增 `requestId:string|null`,历史记录保持null,同键重放返回原记录的当前处理状态;复用既有列和唯一索引,无新增DDL。
|
||||
|
||||
检查通过:后端反馈67项;Chrome Playwright手机390×844/桌面1280×900主流程72项、进程重启/存储故障补充21项,共93项页面开发检查、29次反馈POST。真实入库后丢回执、离页/刷新、实际撤销Token触发401及通过真实 `saveSession` 重新建立合成会话、主动退出、换账户、迟到旧回执、错误/缺少requestId、坏回复、确定422拒绝、比较清理和存储抛错/静默失败均覆盖。重新登录未覆盖完整真实登录表单。两批pageerror均0,13条console日志仅对应刻意网络/401/422/503故障;无横溢或框架错误遮罩,最终手机/桌面截图已视觉核对。Browser插件未提供,使用已有缓存Playwright,无新增依赖。HBuilderX 5.26最终Android 19:14:42、微信19:16:09编译成功,均27页面。
|
||||
|
||||
只操作本轮新建 `127.0.0.1:3309/airz_product_test_1791111261424`(26张表)、PHP8097及独立Redis6398/DB15,未加载正式.env、未连接正式3306/线上、无模型/worker调用。测试库已DROP、两枚Token已清除,MySQL/Redis正常关闭、PHP停止,3309/8097/6398无监听;H5预览5173保留。自动审批以 `blocked by policy` 拒绝删除本轮 `fixture.json/browser-profile/runtime/mysql-data`,未重试或绕过,私密文件保留、禁止直接复用或整体共享。安全回执、截图与精确ROOT见[交接](新会话交接.md)最新节。
|
||||
|
||||
本轮仅本地开发检查,不做正式验收或发布。用户已发布的是此前小程序版本,本轮新增前端仍未发行;后端最近发布仍为0.55,本轮回执及0.57后台增强未部署。新前端依赖后端 `requestId` 回执,须后端先或配套发布,否则旧后端即使已保存反馈,前端仍保持待确认。下一开发项建议反馈回复与消息通知联动;积分业务规则、私有附件和客服供应商依赖另行处理。
|
||||
|
||||
### 0.57 2026-10-04 小程序已发布,继续反馈处理开发
|
||||
|
||||
用户确认小程序端已发布,版本号和具体渠道未提供;此状态更新不代表 H5 已发行或正式验收完成。后端仍以0.55发布记录为准,以下新增反馈处理源码尚未部署。
|
||||
|
||||
后台反馈表单新增 CSRF 与 `row[expectedVersion]`。版本由原始处理快照生成 SHA-256,锁内比较,旧页面返回 `FEEDBACK_VERSION_CONFLICT`,不会覆盖新回复;冲突时保留输入并提示复制草稿、重新打开核对。保存时重新检查管理员正常状态和当前处理权限,反馈变更及成功审计在同一事务内完成,审计失败回滚回复。审计仅保留反馈编号、状态、版本及安全错误枚举,原文、回复、Token和未知字段不落盘;同状态同回复不改处理人、不重复成功审计。页面补标题,并修复窄屏弹窗 Bootstrap 负边距造成的15px横向溢出。复用现有表及权限,无新DDL或角色绑定。
|
||||
|
||||
隔离检查:反馈服务65项、处理事务/审计失败/双PHP进程竞争32项、真实HTTP25项(13请求)、既有角色权限HTTP227项(158请求)、重试审计纯90项、模型配置审计20项、权限定义97项通过,9个PHP文件lint和反馈JS语法通过。Browser plugin not available,使用缓存Playwright完成22项真实隔离页面检查,1280×900/390×844,冲突在表单内持续显示且保留输入→重新打开最新回复→保存通过;控制台error/warn均0,截图无横溢。只操作新随机隔离库、临时PHP/运行目录,模型关闭、无worker/正式数据库调用;非正式业务验收。测试账户/反馈/日志清空,隔离库删除,PHP/MySQL正常停止,3309/8097/8098无监听。自动审批以blocked by policy拒绝删除剩余本轮数据目录/runtime/会话文件,未绕过,证据与精确路径见交接本轮节。
|
||||
|
||||
### 0.55 2026-10-04 后端发布
|
||||
|
||||
按用户授权将后端发布至 `https://airz.hqling.cloud`,线上目录 `/www/wwwroot/xctai.cn`,API 前缀 `/api/v1`。本轮只发布后端,不发布前端,不执行数据库迁移、积分表迁移或正式业务验收。发布包实际部署 3716 个文件,SHA-256 为 `9A39A29E77D43EEF5DA2CE5E1217FB24B4E1DBCDF97E7E266C7FDF7E55E5FEFB`;PyMySQL 临时依赖仅用于部署过程,完成后已清理。
|
||||
|
||||
部署阶段 `stage → prepare → deploy → resume → verify → cleanup` 全部成功:prepare 确认 26 张表且 worker 已停止,deploy 返回 `DEPLOYED files=3716`,resume 返回 `worker=active`,cleanup 归档至 `/root/airz-backend-20261004`。verify 与本机只读烟测均确认首页 200、匿名消息/产品/积分 401、`.env` 与 `.git/config` 404;未调用收费模型、未修改线上业务数据。前端尚未重新发行,真机、多设备、真实模型和正式验收仍待后续安排。
|
||||
|
||||
### 0.54 2026-10-04 反馈与消息适配层响应契约增强
|
||||
|
||||
反馈帮助页完成提交回执回填、处理时间优先显示和详情读取;反馈服务对状态、编号、文本、时间、分页和数组项做严格校验。消息服务补齐分类、编号、快照/游标、列表项、详情关联目标、已读回执和快照一致性校验,关联跳转只允许报告与评估白名单路由。首页聚合和 FAQ 页面沿用当前账户/页面代次守卫,避免迟到响应污染新状态。
|
||||
|
||||
本轮首次 Android 编译暴露反馈列表 `map` 回调的 UTS/Kotlin 类型推断错误,已改为先显式转换并校验 `UTSJSONObject[]` 后再映射。HBuilderX 5.26 Android 与微信小程序(27 页面)最终编译通过,`git diff --check` 通过。未执行隔离数据库回归、线上部署、前端发行、真机或正式验收;当前仍保留未提交改动。
|
||||
|
||||
### 0.53 2026-10-04 首页聚合 BASE-004 开发
|
||||
|
||||
后端新增只读 `GET /api/v1/home` 首页聚合,匿名请求返回公开课程、文章和空横幅;有效登录凭据只附加当前会员的评估状态摘要与未读数。评估摘要按会员、`assessment` 场景和未删除记录读取,草稿不计入总数,排队中的任务显示“排队中”;聚合不读取或下发输入资料、报告、匹配正文和消息私密字段。前端首页已接入严格响应解析,移除硬编码评估数量,并对聚合失败保留公开内容和真实消息数的局部降级。
|
||||
|
||||
后端 `tests/home_catalog.php` 已补充匿名契约及登录隔离回归夹具,覆盖草稿过滤、本人未读数、最新排队状态和敏感字段不泄露;测试事务回滚且不调用模型或 worker。PHP 7.4 lint、前端 Web/微信小程序/Android 编译和 `git diff --check` 已通过。由于当前本机隔离 MySQL `127.0.0.1:3309` 未监听,数据库回归尚未执行;只检测到独立 MySQL 3306,未连接或修改正式库。下一步先恢复明确的隔离数据库与 bootstrap 后重跑回归;暂不部署、发行或开展验收。
|
||||
|
||||
### 0.56 2026-10-04 首页聚合隔离数据库回归完成
|
||||
|
||||
新建临时 MySQL 8 实例,仅监听 `127.0.0.1:3309`,使用随机库 `airz_product_test_20261004123000` 从 `database/schema.sql` 初始化 26 张表;PHP bootstrap 显式覆盖隔离数据库、关闭 DeepSeek 和调试。`tests/home_catalog.php` 回归结果为 `checks=8`、`modelCalls=0`、`writes=0`、`rollback=true`,覆盖匿名契约、公开内容推荐、草稿过滤、当前会员评估/未读数隔离、排队状态和敏感字段不泄露。测试后临时 MySQL 已停止,3309 无监听;正式 3306、线上数据库和业务数据未连接或修改。PHP 7.4 lint 与 `git diff --check` 通过。临时目录清理由本机策略拦截,未影响工作区或正式服务,后续按精确路径处理。
|
||||
|
||||
### 0.52 2026-10-03 FAQ 服务端导入与隔离 HTTP 联调
|
||||
|
||||
@@ -640,14 +718,14 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示
|
||||
| BASE-001 | 接口契约与字段字典 | 定义版本路由、响应、错误、分页、ID、金额、时间及接口状态;确认前后端字段映射。 | P0 | 无 | 0.5–1 | 开发中 |
|
||||
| BASE-002 | 统一请求与认证适配 | 统一共享/账户请求;后端识别 Bearer;解析业务失败和401;限定 CORS;记录 requestId。 | P0 | BASE-001 | 1–1.5 | 开发中 |
|
||||
| BASE-003 | 环境与用户缓存隔离 | 开发/测试/生产配置;生产禁用 mock;会话等账户缓存按不可变 userId 隔离;未提交表单只存当前流程内存。 | P0 | BASE-002 | 1–1.5 | 开发中 |
|
||||
| BASE-004 | 首页和联调骨架 | 首页接入聚合数据、加载/空态/失败重试及登录回跳;建立接口冒烟入口。 | P1 | BASE-002、BASE-003 | 0.5–1 | 未开始 |
|
||||
| BASE-004 | 首页和联调骨架 | 首页接入聚合数据、加载/空态/失败重试及登录回跳;建立接口冒烟入口。 | P1 | BASE-002、BASE-003 | 0.5–1 | 待验收 |
|
||||
|
||||
| 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| BASE-001 | 全栈开发(待指定) | 接口样例可同时被 PHP 和 UTS 解析;区分占位接口与后端现有实现。 | 已实施子集和验证见第0节;完整任务未验收 | 2026-09-22 |
|
||||
| BASE-002 | 全栈开发(待指定) | HTTP 200 中业务失败不判成功;过期 Token 清会话;普通业务按所有者鉴权。 | 已实施子集和验证见第0节;完整任务未验收 | 2026-09-22 |
|
||||
| BASE-003 | 全栈开发(待指定) | 切换账户无串数据;旧草稿键清理且不恢复;退出清理敏感缓存和临时填写内容。 | 已实施子集和验证见第0节;完整任务未验收 | 2026-09-22 |
|
||||
| BASE-004 | 全栈开发(待指定) | 深链接与刷新正确恢复;首页无硬编码账户数据;真实未读数后续由 MSG 接入。 | 未验收;无真实业务验收证据 | 2026-09-22 |
|
||||
| BASE-004 | 全栈开发(待指定) | 深链接与刷新正确恢复;首页无硬编码账户数据;真实未读数由 MSG 聚合接口接入。 | 源码完成见0.53;隔离数据库回归未运行,未做业务验收 | 2026-10-04 |
|
||||
|
||||
DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现;其他既有前置任务不变。
|
||||
|
||||
@@ -891,7 +969,7 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现;
|
||||
| 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| SUPPORT-001 | 全栈开发(待指定) | 具有可测试坐席和离线处理渠道;确认SDK/隐私及首发支持范围。 | 未验收;无真实业务验收证据 | 2026-09-22 |
|
||||
| SUPPORT-002 | 全栈开发(待指定) | 反馈可提交到后台并回复;仅当前用户可查;附件无越权。 | 未验收;无真实业务验收证据 | 2026-09-22 |
|
||||
| SUPPORT-002 | 全栈开发(待指定) | 反馈可提交到后台并回复;仅当前用户可查;附件无越权。 | 文字闭环、0.57事务审计、0.58原键恢复和0.59通知/本人回复跳转开发检查通过;新增源码未配套发布,私有附件与正式验收待后续 | 2026-10-04 |
|
||||
| SUPPORT-003 | 全栈开发(待指定) | 真实到达人工坐席;不由前端伪造用户身份;离线可留言并有处理路径。 | 未验收;无真实业务验收证据 | 2026-09-22 |
|
||||
| SUPPORT-004 | 全栈开发(待指定) | 会话无跨账户泄漏;客户可获回复;供应商不支持项准确提示。 | 未验收;无真实业务验收证据 | 2026-09-22 |
|
||||
|
||||
@@ -937,7 +1015,7 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现;
|
||||
|
||||
直接阻塞:RELEASE-003 → EXT-DEPLOY。
|
||||
|
||||
任务状态计数(仅用于核对台账):未开始 33 项;开发中 12 项;待联调 0 项;待验收 1 项;已完成 0 项;阻塞 14 项。这些计数不换算为项目完成率。
|
||||
任务状态计数(仅用于核对台账):未开始 32 项;开发中 12 项;待联调 0 项;待验收 2 项;已完成 0 项;阻塞 14 项。这些计数不换算为项目完成率。
|
||||
|
||||
## 5. 外部依赖、业务决策与阻塞传播
|
||||
|
||||
|
||||
+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