From 71b3c25695eec35610f99ccbfa5d1f2a7643b370 Mon Sep 17 00:00:00 2001 From: hujun Date: Wed, 7 Oct 2026 10:01:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E8=B4=A6=E6=88=B7?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E6=97=B6=E7=9A=84=E9=A1=B5=E9=9D=A2=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=80=E8=87=B4=E6=80=A7=EF=BC=8C=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=9B=9E=E8=B7=B3=E6=A0=A1=E9=AA=8C=E5=92=8C?= =?UTF-8?q?=E8=AF=BE=E7=A8=8B=E9=98=85=E8=AF=BB=E6=96=B0=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加账户状态监听定时器,页面切换时自动校验账户归属,避免跨账户操作 - 新增登录回跳路径校验函数,限制仅允许指定页面回跳,防止非法跳转 - 课程页改为整篇连续阅读,底部仅一次标记已读,兼容历史记录 - 完善助手、对比页、资料填写页等多处的账户状态校验逻辑,防止错版数据提交 - 优化账户资料请求逻辑,增加版本校验,避免旧请求覆盖新数据 --- .../Microsoft/Windows/Caches/cversions.2.db | Bin 0 -> 16384 bytes ...C-3716689AF493}.2.ver0x0000000000000001.db | Bin 0 -> 304520 bytes ...8-1A9A39C3FDA2}.2.ver0x0000000000000001.db | Bin 0 -> 653968 bytes .vite/deps/_metadata.json | 8 + .vite/deps/package.json | 3 + .vite/deps_temp_09eeb87d/package.json | 3 + README.md | 2 +- docs/开发文档.md | 4 +- docs/开发进度.md | 239 ++++++++++++++++-- docs/新会话交接.md | 171 ++++++++++++- .../account/change-phone/change-phone.uvue | 35 ++- packages/account/components/SecurityCode.uvue | 14 +- .../account/edit-profile/edit-profile.uvue | 65 +++-- packages/account/login/login.uvue | 4 + packages/account/password/password.uvue | 38 ++- packages/account/profile/profile.uvue | 51 ++-- packages/account/security/security.uvue | 16 +- packages/account/services/account.uts | 34 ++- packages/content/classroom/classroom.uvue | 5 +- packages/content/lesson/lesson.uvue | 127 ++++------ packages/content/news/news.uvue | 5 +- packages/content/search/search.uvue | 14 +- packages/finance/archive/archive.uvue | 48 ++-- packages/finance/assessment/assessment.uvue | 46 +++- packages/finance/assistant/assistant.uvue | 2 + packages/finance/compare/compare.uvue | 50 ++-- packages/finance/confirm/confirm.uvue | 30 ++- packages/finance/matches/matches.uvue | 61 +++-- packages/finance/next-step/next-step.uvue | 8 +- packages/finance/product/product.uvue | 67 +++-- packages/finance/services/assistant.uts | 33 ++- packages/finance/services/compare.uts | 14 + packages/finance/services/matches.uts | 31 ++- packages/finance/services/records.uts | 54 +++- packages/finance/services/report-export.uts | 115 ++++++++- scripts/test-report-export.cjs | 187 ++++++++++++++ services/content.uts | 128 ++++++++-- 37 files changed, 1389 insertions(+), 323 deletions(-) create mode 100644 %SystemDrive%/ProgramData/Microsoft/Windows/Caches/cversions.2.db create mode 100644 %SystemDrive%/ProgramData/Microsoft/Windows/Caches/{6AF0698E-D558-4F6E-9B3C-3716689AF493}.2.ver0x0000000000000001.db create mode 100644 %SystemDrive%/ProgramData/Microsoft/Windows/Caches/{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db create mode 100644 .vite/deps/_metadata.json create mode 100644 .vite/deps/package.json create mode 100644 .vite/deps_temp_09eeb87d/package.json create mode 100644 scripts/test-report-export.cjs diff --git a/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/cversions.2.db b/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/cversions.2.db new file mode 100644 index 0000000000000000000000000000000000000000..6493406c669cd7152ecc4d20552ffbb539807be1 GIT binary patch literal 16384 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 S`Ze*a{Ab+hoyY#{=YIg?G#xeo literal 0 HcmV?d00001 diff --git a/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db b/%SystemDrive%/ProgramData/Microsoft/Windows/Caches/{DDF571F2-BE98-426D-8288-1A9A39C3FDA2}.2.ver0x0000000000000001.db new file mode 100644 index 0000000000000000000000000000000000000000..559806d0281558c12b4cb57e0049e34b05a180bd GIT binary patch literal 653968 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,缺参在框架初始化前拒绝,复用report_test_bootstrap的隔离ROOT、本机库/Redis及不可用模型地址守卫。新增 `tests/account_http_test.php`、`tests/account_http_router.php`,随机本机HTTP、并发子进程及头像存储继承同一隔离环境;故障模式仅从runtime内本次作业文件读取。按本次合成账户、Token、评估、附件、触发器与文件精确清理,清理成功才输出PASS,异常返回非零。本轮只修改四个测试文件,前后端业务源码未修改。 + +资料专项268项、76次真实本机HTTP请求通过:鉴权/跨账户/非法JSON与大小/未知字段/no-store、昵称2–20字符及独立会话持久化,昵称和头像操作不改变个人/企业最新评估资料或历史输入日志。覆盖图片缺失/伪造/GIF/500KB/4096边长/400万像素及重编码后超限拒绝,PNG/JPEG/WebP重新编码为PNG、去尾随内容及安全元数据;上传不自动绑定,附件归属/类别/storage/路径/实体文件校验、avatarId省略保持和null恢复默认。数据库触发器验证头像入库失败删除已写文件、资料更新失败昵称/头像一起回滚;目录阻塞与移除故障后重试通过。 + +会话专项281项、69次真实本机HTTP请求通过:密码/JSON/Bearer边界、撤销/过期Token、禁用账户、独立会话、旧MD5+salt仅成功登录升级。退出驱动故障503保留Token供重试,成功只撤当前会话;非法/错误旧密码、数据库与Redis撤销故障保留原密码,成功改密明确reLoginRequired并撤销本账户全部Token,另一账户保持。晚期改密Hook失败回滚密码但已撤Token,旧密码重新登录可恢复;登录Hook失败回滚数据库并清新Token。8/32位密码边界通过,MySQL行锁与双PHP进程验证三轮登录/改密竞争后旧密码不会留下有效Token,以及两个同旧密码改密恰好一个成功。短信/auth返回503,账户短信/换绑无路由404,不产生假成功。合计549项/145次本机HTTP,不记作正式验收。 + +全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-account-backend-20261006-1791290960616/`,MySQL5.7.26仅127.0.0.1:3323、Redis5.0.14.1仅127.0.0.1:6403/DB15,模型锁为127.0.0.1:1并关闭,无worker。26表由schema初始化,未读正式.env、连接生产或调用真实短信/模型,无新增依赖或迁移。初期MySQL启动参数、合成ID类型、测试Token导入及空JSON数组/对象预期已修正;收尾当前PHP Redis扩展没有shutdown方法,改用已有redis-cli正常关闭。中断结果不计最终通过数。最终七业务表、故障触发器、Redis键及头像目录均0,测试库已DROP,专用HTTP/MySQL/Redis停止,3323/6403无监听。四文件PHP7.4 lint、两个缺bootstrap拒绝、两仓库diff及变更文本UTF-8无BOM/LF行尾检查通过。 + +安全证据为ROOT内 `verification.json`、`cleanup.json`、`services.json`,最终日志为 `profile-final.out`/`profile-final.err`、`session-final.out`/`session-final.err`,最终stderr均空;临时bootstrap/runtime/工具文件不整体分享或直接复用,下次另建隔离环境。前端未变,沿用0.74最终浏览器及微信/Android编译证据,不重复。5174/PID76784预览已核对归属并保留,另一项目5173保持;两仓库既有未提交及前端 `%SystemDrive%/`、`scripts/`、`.vite/` 保留。本轮未正式验收、部署、提交、推送或重新发行小程序。63任务/27页面不变,AUTH-003/004仍开发中,完整登录/换绑受短信供应商阻塞,真机/跨设备及正式验收待补;此前新增业务源码仍未配套发布。 + +下一开发入口:CONTENT-002/003/004内容、课程进度与搜索组合开发检查。核对列表/详情ID与下架状态、课程进度按账户及章节版本隔离、重复完成/失败重试/迟到回包、搜索关键词/分类分页与旧响应竞争。先用受控API响应和现有H5预览;如需后端HTTP,先核对脚本显式隔离入口并另建本机环境。不重复本轮账户专项、自行接供应商、正式验收、真实短信/模型调用或沿用历史生产授权发布。 + + +### 0.74 2026-10-06 AUTH-003/004 账户资料、改密及退出组合开发检查 + +本轮复现并修复同手机号换Token后仍提交旧页资料、个人中心保留旧账户内容、旧退出确认框退出新账户、离页改密回包主动跳转,以及保存后迟到GET覆盖新昵称缓存五类问题。修改账户服务、个人中心、编辑资料、安全、改密、换绑及验证码组件七个文件;业务状态仍以服务端为准,昵称与评估实名独立,未增加页面或数据表。 + +页面操作、弹窗/选图回调、异步回包及可见期核对Token、userId与请求代次;换账户清理旧内容或重新进入入口,离页停止定时检查。资料响应校验userId、手机号掩码和字段类型,头像必须返回有效附件编号及非空地址,改密/换绑须明确reLoginRequired;成功资料写入使旧GET失效,失败保存保留输入以便重试。改密成功后即使原页面已隐藏,也只清理原账户被撤销的本机会话,不跳转隐藏页面或影响新账户;密码/验证码离页清空。退出确认和回包绑定原页面与账户,失败保留会话、可重试,当前账户缓存及内存评估流程清理沿用既有基础设施,未确认签到/反馈命令按既有约定保留。 + +Chrome H5 `http://localhost:5174` 手机390×844、桌面1280×900最终103项、48次受控业务请求(21次合成写请求)通过。覆盖坏资料/错归属/掩码/头像/改密回执、密码与双验证码校验、同手机号Token变化、迟到GET与编辑/保存竞争、昵称不改评估实名、保存失败重试、头像大小/过期选图/坏回执/预览/默认头像/离页回包、个人中心自动换账户、旧评估菜单及退出确认、退出失败重试/迟到回包/缓存清理、改密失败/确认/显示控制/切验证方式/成功重登录/离页清密/迟到401、短信未开放/目标号码变化/离页不倒计时或提示成功、换绑未开放和安全页会话过期。页面身份/非空/无遮罩/横溢及六截图通过,pageerror=0、未定义API=0;console仅刻意注入的401/409/422/503。全部外部请求拦截,不把合成改密回执当作真实服务端全会话撤销证据。 + +HBuilderX5.26最终Android20:38:52、微信20:39:33,27页面编译通过。初期脚本的返回页预期、uni-input事件等待、同名占位文字及隐藏组件定位问题已修正,早期中断结果不计最终通过数。Browser plugin not available,使用已有Playwright CLI,无新增依赖;共享layout既有H5类型警告保留。两仓库diff检查、七文件及两台账UTF-8无BOM/既有主要行尾约定通过。测试脚本、日志和截图放在 `C:/Users/JUN/AppData/Local/Temp/airz-auth003004-20261006/`,安全证据为 `verification.json`、六张截图、`android-final.log`、`weixin-final.log`;脚本/CLI日志含无服务器权限的合成会话,不整体分享。存储/cookies/routes已清空,验证浏览器关闭。本轮预览服务5174/PID76784保留供查看,启动命令属于本项目、输出为ROOT/h5;下一会话须核对归属再复用或停止。另一项目5173/PID68536保持。 + +后端只读核对Session/AccountProfile契约和路由;未读取正式.env、启动数据库/Redis/worker、连接生产或调用真实短信/模型。当前只实现原密码改密;账户短信及手机号换绑无正式路由,保持未开放,完整AUTH-004仍受短信供应商阻塞。用户此前小程序发布状态、前端 `%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库所有既有未提交保留。63任务/27页面不变,AUTH-003/004仍开发中,本轮未正式验收、部署、提交、推送或重新发行小程序;新增业务源码尚未配套发布,真机/真实渠道/跨设备未覆盖。 + +下一开发入口:AUTH-003/004账户资料、头像及会话撤销后端隔离HTTP检查。旧 `D:/AAdesk/202609/airz/tests/api_profile.php`、`tests/api_session.php` 在参数检查前初始化默认环境且HTTP固定127.0.0.1,不得直接运行;先适配显式隔离bootstrap、随机本机HTTP继承、独立头像存储和精确清理,再另建本机库/Redis。验证鉴权/越权、昵称与评估资料独立、头像附件归属/文件检查、持久化及事务失败、退出当前会话、改密全部会话撤销和未开放短信拒绝。不自行接供应商、调用真实短信或模型、正式验收、部署或重新发行小程序。 + +### 0.73 2026-10-06 ASSESS-004 评估新建/修改后端隔离HTTP开发检查 + +`D:/AAdesk/202609/airz/tests/api_assessments.php` 改用显式 `--bootstrap=`,在框架初始化前拒绝缺参;复用report_test_bootstrap本机库/Redis、独立ROOT及不可用模型地址守卫。夹具采用inputVersion=3与当前AssessmentStore,删除评估编号等同资料主键、旧加密身份及资料表保存任务状态的过时假设。新增 `tests/assessment_http_router.php`,随机本机HTTP服务继承同一bootstrap/随机队列,分析开关只从隔离runtime文件读取,不通过业务请求注入。双进程同样继承入口、队列和runtime内作业文件,用stdin闸门验证MySQL事务竞争;按本次账户、产品、队列、故障触发器和临时文件精确清理,清理成功后才输出PASS,异常返回非零。 + +专项514项、158次真实本机HTTP请求通过。覆盖匿名/撤销Token/跨账户拒绝、成功及业务拒绝no-store、JSON对象/大小、金额两位元字符串与上下限、12.345678万元对应123456.78元、企业0经营月和0.01元收入、非法v1/v2/格式/额外字段/附件授权/信用卡一致性、只读脱敏与本人完整回填、取消需求字段不返回。验证新建独立会话但每用户每类型仅一份最新资料、修改读取本评估而非另一独立记录、个人和企业资料互不覆盖、原键回执不回写最新资料、同键改内容/错作用域冲突、非法或过时baseRevisionId及类型修改拒绝、修改产生新版本和历史输入不变。双进程同键新建/修改各只生成一条输入,异键同基准修改仅一方成功,另一方REVISION_CONFLICT且无额外输入。 + +数据库触发器注入资料更新失败,真实HTTP500时新建会话/版本日志及修改指针/最新资料完整回滚,故障移除后原键可安全提交。分析启用时HTTP提交保存实际queued任务,处理中拒绝新修改,同键重放不增加预留;显式假客户端完成个人首次成功、重评失败和原键重试成功,旧报告在处理中/失败可读,新成功才发布新版本,旧完整快照不变、迟到旧任务零调用。企业成功及失败重评也保留已发布报告与最新提交收入。23版历史分页、独立评估分页、类型/状态过滤、错版本/非法数组/错误方法及软删除原键拒绝通过。专项只执行5次显式假调用,不启动消费worker或真实模型;既有 `tests/assessment_revisions.php` 58项通过,合计572项,不记作真实语义或正式业务验收。 + +全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assessment-backend-20261006-1791288138879/`,MySQL5.7.26仅127.0.0.1:3322、Redis5.0.14.1仅127.0.0.1:6402/DB15,模型地址锁为127.0.0.1:1。26张表由schema初始化,PDF依赖/字体仅复制现有锁定版本,未安装软件;未读正式.env、连接正式库/Redis/worker或调用真实模型。初期合成用户名超长、MySQL启动参数及ThinkPHP执行测试DDL的未缓冲查询问题已修正,故障DDL使用独立PDO,早期未完成结果不计入最终数。最终六业务表、故障触发器和Redis键均0,测试库已DROP,专用HTTP/MySQL/Redis停止,3322/6402无监听。两测试文件PHP7.4 lint、缺bootstrap拒绝、两仓库diff及变更文本UTF-8无BOM检查通过。 + +安全证据为ROOT内 `verification.json`,最终日志为 `assessment-final.out`、`assessment-final.err`、`revisions-final.out`、`revisions-final.err`;bootstrap/runtime/工具文件含合成配置,不整体分享或直接复用。前端及后端业务源码未变,不重复平台编译或浏览器检查,沿用0.72最终证据。两仓库全部既有未提交、前端 `%SystemDrive%/`、`scripts/`、`.vite/` 保留,本轮无提交/推送/部署或小程序发行。63任务/27页面不变,ASSESS-004仍开发中,真实渠道、真机和正式验收未覆盖,此前新增业务源码尚未配套发布。 + +下一开发入口为AUTH-003/004账户资料、改密及退出组合开发检查:核对个人中心与编辑资料的账户隔离/迟到响应、昵称不覆盖评估实名、资料保存失败重试、改密和退出的会话撤销及旧页清理;短信/换绑未开放状态不产生假成功。先使用受控响应,若检查后端HTTP须先核对脚本隔离入口,另建本机环境。不要重复评估/匹配/助手专项、自行正式验收、真实短信/模型调用或沿用历史发布授权部署。 + +### 0.72 2026-10-06 ASSESS-004 资料填写、确认提交与档案回显组合开发检查 + +复现并修复五类问题:修改回填缺失revisionId仍被接受、修改提交接受另一评估的回执、确认页换账户后仍发送旧资料、离页后迟到提交回执跳转分析页、档案页换账户后继续显示旧资料。`packages/finance/services/records.uts` 核对评估/版本编号、类型、状态、版本序号、已发布版本及分页归属/游标;修改回填须有元单位与完整对象,修改回执须属于原评估、状态accepted且产生不同于baseRevisionId的新版本。详情和完整度保持显式版本,坏页不推进分页。新建、修改继续分开幂等作用域,同内容重试保留原键。 + +填写、确认、档案三页增加可见期账户检查与离页停止;操作前及异步响应后校验账户/请求代次,换账户清空旧表单和档案,迟到401不清新会话。选图和操作菜单回调也核对代次;档案重新加载后重启账户检查,等待版本历史结束后再次核对详情,避免清空后访问空详情。个人/企业新建仍为空白独立评估,修改和历史档案修改入口读取本评估最新完整资料,通过baseRevisionId创建新版本。 + +Chrome H5 `http://localhost:5174` 手机390×844、桌面1280×900最终96项通过,72次受控业务请求、13次合成POST。覆盖服务缺版本/错评估/非法状态/错回执/分页、个人及企业新建提交与修改、零经营月数/零负债、12.345678万元准确转换为123456.78元、同键重放/改内容换键、附件授权未开放拒绝、确认与档案脱敏回显、完整度错版局部重试、重评失败保留旧成功结果入口、历史版本详情及最新资料修改、无操作/立即操作的账户变化、重载守卫恢复、离页与换账户迟到回包。页面身份/非空/无框架遮罩/无横溢及四张截图通过,pageerror=0,console仅刻意注入的401,无未定义API请求。全部外部请求拦截,无实际后端或模型调用;失败保留报告的真实持久化沿用0.65后端证据,本轮只验证页面入口,不把合成回包当作正式验收。 + +HBuilderX5.26最终源码Android18:29:34、微信18:30:24编译成功,63任务/27页面不变。首次Android检查发现Number(string)不兼容Kotlin,改为parseInt后通过。脚本字段定位、锁定类型/自定义按钮状态断言、立即操作与自动等待的竞争、只读夹具脱敏及预览加载超时已修正;更换专用浏览器并使用DOM就绪等待后完整检查通过,早期未完成结果不计入最终通过数。Browser plugin not available,复用缓存Playwright CLI run-code --filename,无新增依赖;共享layout既有H5类型警告保留。源码diff检查及变更文本UTF-8无BOM检查通过,保留仓库既有行尾约定。 + +仓库外ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assess004-20261006/`,安全结果为 `verification.json`,截图为 `confirm-mobile.png`、`archive-mobile.png`、`confirm-desktop.png`、`archive-desktop.png`。临时 `repro.js`、`verify.js` 和CLI日志含无服务器权限的合成会话,不整体分享或直接复用。浏览器存储/cookies/routes清空,两个专用浏览器均关闭;核对命令归属后停止本轮5174/PID76016,端口无监听,另一项目5173/PID68536保留。未启动数据库、Redis、后端或worker,未读取正式.env、连接生产或调用真实模型;后端仅只读核对接口/脚本。两仓库既有未提交和前端 `%SystemDrive%/`、`scripts/`、`.vite/` 保留,无提交/推送/部署或小程序发行。 + +ASSESS-004仍开发中,真机、Safari/微信内H5、真实渠道及正式验收未覆盖;本轮源码与此前新增业务源码尚未配套发布。下一开发入口为评估新建/修改后端隔离HTTP检查:旧 `D:/AAdesk/202609/airz/tests/api_assessments.php` 在检查参数前初始化默认环境,夹具也未声明inputVersion=3,不得直接运行;先适配显式隔离bootstrap、当前版本存储、子进程/本机HTTP继承及精确清理,再另建本机库/Redis和假模型。`tests/assessment_revisions.php` 已接显式report_test_bootstrap,可作为版本行为回归入口。不要重复匹配/助手专项、自行正式验收、真实模型调用或沿用历史发布授权部署。 + +### 0.71 2026-10-06 PRODUCT-004 匹配读取与产品解释后端隔离开发检查 + +后端 `tests/match_records.php`、`tests/product_explanations.php` 改用显式 `--bootstrap=`,复用 `report_test_bootstrap.php` 的隔离ROOT、本机数据库/Redis和不可用模型地址守卫;缺参时在框架初始化前拒绝。新增 `tests/match_test_fixtures.php`,采用当前inputVersion=3与AssessmentStore,故障夹具同时更新已发布版本日志及最新结果镜像,避免沿用只改match_result的旧存储假设。演示产品仅在空隔离目录表中导入,并发子进程继承同一bootstrap、随机队列和作业文件;新增 `tests/match_http_router.php` 将本机HTTP接到相同隔离环境。测试失败或清理异常返回非零,清理成功后才输出PASS,按本次账户、产品和队列精确清理。 + +匹配专项238项、101次真实本机HTTP请求通过。覆盖Bearer/越权/撤销Token、参数与方法、no-store、三态分组/分页/游标、错评估和错版本、损坏快照及当前目录故障;个人/企业重评处理中与失败时默认继续读取旧成功版,新版成功后默认切到新版,旧游标仍能继续读取原快照,历史解释只读且拒绝新调用。核对读取及被拒绝的历史解释不改变输入、最新资料、日志或消息,不预留模型调用。修正零候选夹具:临时为“普惠基础融资贷”增加必不满足的收入规则,得到completed状态的0 eligible/3 ineligible/1 unknown,与未运行及v1旧版明确区分;finally恢复原产品规则。HTTP同键解释请求重放只保留一次预留。 + +产品解释专项52项通过,覆盖双进程同键预留、重复消费者不重复调用、成功缓存、解释更新不破坏游标/其他冻结字段/报告、身份资料不进入模型、reasonId重排及非法输出拒绝、失败同键不重试/新键人工重试和三次上限、过期租约、迟到回复仅补用量、持久待办、unknown三态保持、共享每日次数及删除记录拒绝。两项专项合计290项,使用假模型,不将本机HTTP与假模型结果记作真实语义或正式业务验收。本轮仅修正测试脚本/夹具,后端业务源码和前端业务源码未修改。 + +隔离ROOT `C:/Users/JUN/AppData/Local/Temp/airz-match-backend-20261006-1791279449016/`,MySQL仅127.0.0.1:3321、Redis仅127.0.0.1:6401/DB15,模型地址锁为127.0.0.1:1;未读取正式.env、连接生产数据库/Redis/worker或调用真实模型。最终隔离账户、产品、会话及日志均0,Redis DB15无键,专用HTTP与MySQL/Redis已停止;收尾再次核对3321/6401无监听。四个本轮PHP文件7.4语法检查、两个缺bootstrap拒绝检查、两仓库diff检查及35个变更文本UTF-8无BOM检查通过。安全结果为ROOT内 `verification.json`,最终日志为 `match-final.out`、`explain-final.out`;早期结果日志不作为最终通过数,临时bootstrap/runtime/工具文件不整体分享或直接复用。 + +前端源码未变,不重复浏览器及微信/Android编译,沿用0.70平台证据。63任务/27页面不变,PRODUCT-004开发中、PRODUCT-005待验收;真实产品、跨浏览器/真机、生产容量及正式验收仍未覆盖。两仓库既有未提交及前端 `%SystemDrive%/`、`scripts/` 保留,本轮未提交/推送/部署或重新发行小程序,此前新增业务源码仍未配套发布。下一开发入口为ASSESS-004资料填写、确认提交与档案回显组合检查,关注个人/企业新建空白与修改最新资料、重评失败保留历史、金额精度、同键重放、账户变化和迟到回包;继续使用受控响应及显式隔离环境,不重复本轮匹配专项或自行正式验收、真实模型调用及生产发布。 + +### 0.70 2026-10-06 PRODUCT-004/005 匹配详情与对比历史版本组合开发检查 + +复现并修复四类问题:列表追加不同快照分页、未指定版本入口刷新切到新版、账户切换后发出旧产品解释请求、账户切换后仍能进入旧对比详情。匹配服务核对有效revisionId/resultVersion、产品编号与版本、三态、当前可用性、分组/重复ID/分页游标/统计及快照元数据;详情和解释复用冻结记录校验,公共产品独立核对编号与版本。列表分页校验前页快照/统计及重复行,失败保留首屏和原游标,新增局部重试;对比锁定首个成功快照,单列失败与重试不更换锚点。 + +三个页面补发起前账户核对、可见期账户守卫及离页/迟到响应清理。换账户清空旧选择和资料,旧401不清新会话。首次读取成功后固定revisionId并绑定选择缓存,H5地址保留版本、分组和实际选择,刷新、移除、补选、切栏保持同版。登录增加resumeMatch白名单,恢复匹配/详情/对比的版本、选择、产品、栏目及来源;历史产品解释只读,失败对比不以公共产品补齐。 + +Chrome H5 `http://localhost:5173`,390×844与1280×900共97项通过、104次受控请求。覆盖服务错版/错产品/无版本/缺快照/非法状态/错分组/游标,v1未执行与completed零候选、零利率、下架/unknown与冻结额度/材料、显式旧版及新版默认回包、跨组三项选择、补选/移除/刷新/切栏、404/503单列重试、分页503/错快照/重复行局部重试、换组迟到分页、账户变化/迟到401/立即旧动作/无操作清空、三个合成登录回跳、非法参数、解释原键重试/错快照轮询/查询恢复/次数上限和离页迟到详情。全部外部请求拦截,6次合成POST为3次解释及3次登录,无真实模型或后端连接;重评发布行为沿用0.65后端证据,本轮不生成真实重评任务。页面身份/非空/无遮罩/无横溢及两截图通过,pageerror=0,console仅刻意401/404/503。初期脚本require、正则分组、重复查询参数和按钮文案定位错误已修正,不计通过数。 + +HBuilderX5.26最终源码微信17:18:58、Android17:19:47编译成功,63任务/27页面不变;共享layout既有H5类型警告保留。Browser plugin not available,使用缓存Playwright CLI run-code --filename,无新增依赖。仓库外安全证据 `C:/Users/JUN/AppData/Local/Temp/airz-product-combo-verification.json`、`airz-product-combo-mobile.png`、`airz-product-combo-desktop.png`;临时脚本 `airz-product-combo-repro.js`、`airz-product-combo-qa.js` 和CLI日志含无服务权限的合成会话,不整体分享。浏览器存储/cookies/routes清空并关闭;本轮localhost预览停止,另一个17:12:56启动的127.0.0.1:5173 Vite进程并非本轮命令,保留。未启动数据库/Redis/后端/worker,未读默认.env、连接正式环境或修改后端源码;全部既有未提交及未跟踪工作保留,无新增未跟踪Vite缓存。 + +PRODUCT-004仍开发中、PRODUCT-005待验收,真实产品、跨浏览器/真机和正式验收未覆盖;本轮不提交/推送/部署或小程序发行。此前REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、REPORT-006、CHAT-004及本轮源码仍未配套发布。下一入口为匹配只读与产品解释后端的当前存储/历史版本隔离检查:`tests/match_records.php`、`tests/product_explanations.php` 在参数检查前初始化默认环境,仍有inputVersion=2及直接改match_result夹具;先改显式隔离bootstrap、当前AssessmentStore、子进程继承/HTTP路由及精确清理,再另建本机库/Redis并使用假模型,不能直接运行旧脚本或沿用历史发布授权。 + +### 0.69 2026-10-06 CHAT-004 后端消息幂等、并发额度与历史上下文隔离开发检查 + +`D:/AAdesk/202609/airz/tests/assistant_chats.php` 改为显式隔离 `--bootstrap=`,复用 `report_test_bootstrap.php` 的本机库/Redis/模型地址守卫;缺少入口时在框架初始化前拒绝。夹具采用当前inputVersion=3及AssessmentStore版本存储,并发子进程继承同一隔离入口、队列和显式作业文件。新增 `tests/assistant_http_router.php` 只允许本机专用标记,补PATH_INFO并接相同隔离配置;失败及清理错误返回非零,PASS在清理成功后输出。测试只删除本次账户、产品和随机队列,不修改默认.env。 + +助手专项165项通过,覆盖双进程同键创建/发送/失败重试、不同键串行、重复消费者仅一次假调用、原回执重放不重复预留、暂停/额度耗尽后成功回执仍可确认、助手/产品解释共享评估剩余额度、失败及软删除日志仍占当日次数、有效/过期租约、迟到用量、历史分页、脱敏及金额守卫。个人重评处理中、失败、重试成功后,旧显式/无指定版本会话继续引用冻结收入和产品;产品改名/下架不改旧上下文,新会话读取新版。失效会员及删除会话的待办不进入模型。18次真实本机HTTP请求检查Bearer、越权、回执丢失重放、同键改文409、额外字段422、错误方法按既有精确路由404、历史预览/恢复/冲突、非法数组版本404、撤销Token401及全部no-store;读取历史不预留调用。 + +组合检查复现并修复一处发布事务缺陷:`application/common/library/AssessmentStore.php` 原来在旧报告无queued/running解释时仍重写旧输入日志,同一秒的无变化UPDATE返回0,被误判为保存失败并最终标AI_INTERNAL。现在只在确实关闭旧解释时更新旧快照,无待关闭解释保留整条旧版本行;原锁定读取、结构校验、真实写故障回滚和待关闭解释日志要求保持。本轮增加旧日志同秒及逐列不变检查;报告持久化75项、评估版本58项、历史报告215项回归通过,合计513项,包含四处SQL写故障回滚及旧queued/running解释同事务关闭。三个本轮PHP文件7.4 lint、两仓库diff和UTF-8无BOM检查通过。 + +全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assistant-backend-20261006-1791275687879/`,MySQL5.7.26仅127.0.0.1:3310随机库 `airz_product_test_1791275687879`、Redis5.0.14.1仅127.0.0.1:6398/DB15;无默认.env、正式3306/6379、线上库或生产worker连接,真实模型0,供应商地址锁为不可用的127.0.0.1:1。初始MySQL回环认证、旧夹具断言及临时ROOT缺PDF依赖导致的失败已修正,未计入通过数;PDF使用复制的现有锁定运行依赖/字体,无安装或模板变更。收尾六业务表0、故障触发器0、Redis键0,库已DROP,MySQL/Redis正常停止、专用PHP HTTP停止,3310/6398/8098/5173无监听。安全证据为ROOT内 `verification.json`;结果日志为 `assistant-result.log`、`persistence-result.log`、`revisions-result.log`、`history-result.log`。其余临时runtime/工具文件保留,不整体分享或复用bootstrap,后续另建隔离环境。 + +CHAT-004保持开发中,CHAT-001—003待验收,63任务/27页面不变;真实语义、供应商费用对账、生产容量和真机未在本轮验证。前端源码未变,不重复微信/Android编译或浏览器检查,沿用0.68平台证据。两仓库全部既有工作保留,本轮未提交/推送/部署或小程序发行,新增后端修复尚未上线。下一开发入口为PRODUCT-004/005匹配列表、产品详情与对比的历史/重评版本组合检查,关注分页/补选/刷新/列失败重试、当前可用性与冻结值、账户变化及迟到回包,不重复本轮助手专项或自行正式验收、真实模型调用及生产发布。 + +### 0.68 2026-10-06 CHAT-004 历史版本上下文与异常会话组合开发检查 + +受控回包复现并修复五类问题:预览、历史恢复和创建会话接受错版上下文,发送接受另一请求的回执,以及账户切换后立即发送时旧草稿先携新Token发出。`packages/finance/services/assistant.uts` 统一核对评估、产品列表、显式版本、产品展示ID及版本有效性,创建时校验会话编号;没有显式绑定的历史入口仍恢复会话原冻结上下文。发送回执核对requestId、原文和尝试序号,拒绝旧尝试,允许原键重放返回已推进的尝试。`packages/finance/assistant/assistant.uvue` 在发送请求前核对页面代次和账户,立即切换账户后首次发送、已有会话发送及旧请求重试均不会发出。 + +Chrome H5 `http://localhost:5173` 手机390×844、桌面1280×900共62项通过,81次受控API请求、33次合成POST。覆盖普通/报告/产品上下文、错版/错评估/错产品/缺版本/非法会话、显式历史绑定与无绑定恢复、发送/刷新/来源返回、错回执及原键重放、429/503、断网回执丢失、排队阻止重复发送、轮询完成、确认失败后递增尝试和重试上限、历史分页、账户变化及迟到上下文/401、立即换账户发送与重试、合成登录恢复和非法参数。全部API在浏览器内拦截,无未定义请求或实际后端连接;本轮额度检查仅证明错误提示及原键恢复,不作为后端配额并发证据。 + +页面身份、非空、无框架遮罩、手机/桌面无横向溢出及截图通过;pageerror=0,console仅刻意429/503/401及net::ERR_FAILED。微信16:23:43、Android16:25:31 HBuilderX5.26最终源码编译成功,63任务/27页面不变,共享layout既有H5类型警告保留。Browser plugin not available,使用缓存Playwright CLI的 `run-code --filename`,未安装新依赖。 + +证据为仓库外 `C:/Users/JUN/AppData/Local/Temp/airz-chat004-result.json`、`airz-chat004-mobile.png`、`airz-chat004-desktop.png`,最终脚本为 `airz-chat004-qa.js`;初始复现脚本为 `airz-chat004-repro.js` 与 `airz-chat004-switch-repro.js`。结果JSON不含凭据,临时脚本/CLI日志含无服务器权限的合成会话,不整体分享。浏览器存储、cookies和拦截路由已清理,跳转about:blank后关闭专用浏览器,5173预览停止;本轮Vite生成的两个未跟踪缓存文件已清除。未启动数据库/Redis/后端/worker,未读取默认.env、连接生产或调用真实模型;后端源码只读,保留两仓库及前端 `%SystemDrive%/`、`scripts/` 全部既有工作,无提交/推送/部署或小程序发行。 + +CHAT-004保持开发中,CHAT-001—003仍待验收;真实语义、真机/跨浏览器及生产容量未在本轮验证。下一开发子项为助手后端消息幂等、并发额度与历史上下文的隔离检查,先将旧 `tests/assistant_chats.php` 改为显式隔离bootstrap,适配当前inputVersion=3/版本存储并核对并发子进程和精确清理,再在新建本机数据库/Redis及假模型中检查;不得直接运行旧脚本加载默认.env。前轮REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、本轮及REPORT-006前端源码尚未配套发布,不自行正式验收、真实模型调用或复用历史发布授权。 + +### 0.67 2026-10-06 REPORT-006 行动页与报告可用性组合开发检查 + +本轮修复 `packages/finance/next-step/next-step.uvue` 两处展示问题:行动页补报告版本及最新提交正在评估、失败保留上次成功结果或已有新版的提示;v1旧版报告及v2未完成产品匹配时,入口改为“查看准备说明”,材料区明确暂不提供产品材料,不引导选择不存在的匹配产品。版本和状态直接消费已保存报告,不重算历史。既有产品冻结版本、当前可用性、账户变化与迟到响应守卫保持。 + +Chrome H5在 `http://localhost:5173` 使用全量API受控合成响应,手机390×844、桌面1280×900共38项通过。覆盖个人/企业、显式历史版本、重评处理中/失败、v1兼容、匹配未就绪、可用产品冻结材料、产品下架/状态未知/条件不符/待核实、错版/错快照拒绝、无报告/404/409、账户切换及迟到响应。实际点击报告和AI入口保留revisionId=72,AI上下文请求同版;优化资料回填当前评估最新提交,不新建评估或自动提交;合成密码登录后恢复assessmentId/productId/section/revisionId,非法参数不发业务请求。全部业务请求仅GET与一次合成登录POST,无评估/会话创建、真实后端连接或模型调用。 + +页面身份、非空、无框架遮罩、手机/桌面无横溢及截图通过;pageerror=0,console仅刻意注入的404/409资源错误,无未定义请求。Browser plugin not available,使用缓存Playwright CLI `run-code --filename`。测试前期的长参数空输出、直接修改同页hash未触发onLoad、uni按钮角色及助手组合标题定位问题已修正,不计作业务通过。微信15:57:28、Android15:58:55 HBuilderX5.26本地编译成功,63任务/27页面不变;共享layout既有H5类型警告未改。 + +临时测试代码与证据均在仓库外:`C:/Users/JUN/AppData/Local/Temp/airz-report006-boundaries.js`、`airz-report006-verification.json`、`airz-report006-20261006-processing-mobile.png`、`airz-report006-20261006-actions-desktop.png`。本轮生成的CLI日志/快照移至 `C:/Users/JUN/AppData/Local/Temp/airz-report006-cli-artifacts/`。浏览器存储/路由已清理,专用浏览器关闭,5173预览停止;没有启动数据库/Redis/后端/worker,不读取默认.env、不连接生产。本轮仅行动页及两份台账新增改动,保留全部既有工作;未提交/推送/部署、未重新发行小程序。 + +REPORT-006仍待验收,真机、跨浏览器、真实产品材料/办理渠道及正式业务验收未覆盖。下一开发入口为CHAT-004历史版本上下文与异常会话组合检查,优先核对预览/创建/历史恢复绑定、账户变化与迟到响应、失败重试/额度错误;继续使用隔离数据和假模型,不自行真实调用、发布或正式验收。前轮REPORT-002/003/004后端及REPORT-005微信PDF源码尚未配套发布。 + +### 0.66 2026-10-06 REPORT-005 微信PDF下载与导出边界开发检查 + +用户反馈小程序导出提示“当前客户端暂未开放PDF下载”,原因是共享服务此前只开放H5。`packages/finance/services/report-export.uts` 新增MP-WEIXIN分支,经 `uni.downloadFile` 携带Bearer请求头和显式revisionId下载,再以 `uni.openDocument` 打开PDF并显示保存/转发菜单;报告页与下一步行动页共用入口,无新增页面或后端数据库改动。令牌不写URL/文件名;仅使用临时文件,预览期间保留,返回小程序或下次导出时清理,删除失败保留路径重试。其他原生端及微信内H5的既有提示保持。 + +下载边界包含HTTPS、评估/版本编号、HTTP状态、PDF MIME、头尾标志、未压缩Content-Length一致性及20 MiB上限;小程序通过响应头、下载进度和实际文件大小检查超限,PDF只读取5字节头及最多1024字节尾。下载中取消立即拒绝并abort,迟到文件清理;旧401不清新账户,换账户不打开旧报告。系统预览接管后忽略组件销毁的cancel,避免删除正在预览的文件;下载域名、网络、超时、服务端JSON与预览失败分别提示。H5同步增加显式版本及未压缩文件长度校验,并处理空响应。 + +新增 `scripts/test-report-export.cjs`,运行实际HBuilderX微信编译产物、注入隔离uni/API,无网络或数据库访问。执行 `D:/Develop/nvm/nodejs/node.exe scripts/test-report-export.cjs` 前须先编译MP-WEIXIN;38项通过,覆盖历史版本/鉴权、401和迟到回包、JSON/HTML/损坏PDF、三层超限及恰好20 MiB、取消、账户变化、预览/文件系统失败和临时文件清理重试。微信14:41:30、Android14:36:23 HBuilderX5.26编译成功;脚本语法及diff检查通过。 + +Chrome Playwright手机390×844/桌面1280×900实际报告页6项与H5服务边界17项通过;503错误保留报告,重试触发一次实际浏览器下载,两次导出请求保持鉴权及版本。边界采用浏览器内fake fetch,无实际网络;全部页面API为受控合成响应。pageerror=0、正常准备阶段console为空,业务console仅刻意503;首次裸UTS导入是测试工具路径错误,改为 `?import` 后17项通过。页面非空、身份/无框架错误浮层/桌面无横溢通过,截图已核对。Browser plugin not available,使用现有缓存Playwright;本轮PDF为头尾标志夹具,不证明PDF内容可渲染,分页证据沿用0.65与6.21。 + +ROOT `C:/Users/JUN/AppData/Local/Temp/airz-pdf-weixin-1791268574971/` 的 `verification.json` 为无凭据证据,截图为 `h5-download-mobile.png`、`h5-download-desktop.png`。浏览器存储清空、路由拦截撤销、专用浏览器关闭,前台5173预览已停止;未启动数据库/Redis/后端,不读取默认.env、不连接线上、不调用模型。临时脚本/日志含无服务器权限的合成会话,不整体分享。保留两仓库既有改动及前端未跟踪 `%SystemDrive%/`,无提交/推送/部署或正式验收。 + +发布前需在微信后台将 `https://airz.hqling.cloud` 加入downloadFile合法域名,已有request合法域名不能替代;本轮未修改微信后台。用户需用新增源码重新编译发行小程序,当前已发布版本不会自动获得支持。官方接口依据:[downloadFile](https://developers.weixin.qq.com/miniprogram/dev/api/network/download/wx.downloadFile.html)、[openDocument](https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.openDocument.html)。微信系统预览、保存/转发、真机域名校验及生产生成并发/容量未验证,REPORT-005仍待验收。下一开发入口为REPORT-006行动页与报告可用性的组合检查,不自行正式验收或复用历史发布授权。 + +### 0.65 2026-10-06 REPORT-004 历史报告与重评组合开发检查 + +完成个人/企业的初版成功、修改排队、模型失败、显式重试、新版成功和旧版显式读取组合检查。重评复用评估记录并增加输入版本;新版本未成功时默认报告、匹配和PDF仍使用上次成功版本,指定未完成版本返回409。新结果发布后历史输入/事实/匹配不重算,产品改名、额度变化、版本更新和下架不改冻结参数;历史解释只读,旧分页游标仍可用于原版,不能用于新版。保留REPORT-002/003及两仓库全部既有未提交改动,本轮不正式验收、部署或重复发布小程序。 + +发现并修复三处版本边界问题。后端 `application/api/controller/v1/Assessments.php` 保留 `revisionId` 原始类型交给统一归属/版本校验,数组参数从500改为404/REVISION_NOT_FOUND,越权仍优先404/ASSESSMENT_NOT_FOUND。前端 `packages/finance/services/records.uts` 的档案详情补评估ID/显式版本校验,档案完整度补显式版本校验;受控错版回包不会显示另一版收入或完整度,详情重新加载及完整度局部重试可恢复正确资料。 + +新增后端 `tests/report_history.php`、`tests/report_history_http_router.php`,沿用显式隔离 `report_test_bootstrap.php`。专项215项通过,覆盖五类读取端点的匿名/越权/跨记录版本/非法数组与0版本、no-store、只读/无模型预留、真实PDF完整二进制与私有响应头、v1兼容、导出引擎不可用503和Token撤销401。`tests/assessment_revisions.php` 适配显式bootstrap和并发子进程,精确清理本次产品/队列,58项版本集成通过;合计273项PHP检查,四个本轮PHP文件7.4 lint及两仓库diff检查通过。 + +Chrome Playwright手机390×844/桌面1280×900共32项、82次隔离GET请求通过,包含失败/处理中查看旧报告、三栏切换、本人历史收入、完整匹配列表/产品详情、错版拒绝与重试、新版默认读取及旧版深链、历史解释只读和三次实际PDF下载。pageerror和console error/warn均0,截图无横溢/遮挡;浏览器全部API转发本机8098,三类错版仅用受控响应注入。Browser plugin not available,复用已有缓存Playwright,无新增依赖。13份PDF(含浏览器下载)52项提取文字检查通过,核对收入、提交序号、冻结名称及身份脱敏;个人历史8页、企业新版3页经Poppler渲染核对中文/分页,未改变导出模板。微信10:08:29、Android10:08:53 HBuilderX5.26本地编译成功,27页/63任务不变;无真机、跨浏览器或正式模型验收。 + +本轮ROOT `C:/Users/JUN/AppData/Local/Temp/airz-report004-20261006-1791251466341/`,MySQL5.7.26在127.0.0.1:3310随机库 `airz_product_test_1791251466341`、Redis5.0.14.1在6398/DB15。未加载默认.env、未连接正式3306/6379/线上/生产worker,模型外呼0。收尾六张业务表0、故障触发器0、Redis键0,测试库已DROP;MySQL/Redis正常停止,8098 PHP停止,浏览器存储清空并关闭。后台常驻H5预览启动被自动审批以 `blocked by policy` 拒绝,无更具体原因,未重试或绕过,5173预览也已停止。安全证据为ROOT内 `verification.json`、`cleanup-result.json`、`ui-result.json`、`pdf-verification.json`;临时fixture/浏览器日志可能含已撤销的合成Token,不整体共享或重新启动bootstrap,后续另建隔离环境。 + +REPORT-004整体仍开发中,真实产品、外部渠道、业务人工签收及移动端正式验收状态不变。本轮源码未提交/推送/部署,小程序已发布的版本不包含本轮三处修复。下一开发入口为REPORT-005 PDF导出边界与容量检查,优先异常二进制、超限、取消/离页、登录状态变化和分页可读性,不自行正式验收或发布。 + +### 0.64 2026-10-06 REPORT-003 报告生成与持久化开发检查 + +后端 `Assessment::complete()` 与 `AssessmentStore::saveResult()` 加固报告发布事务:报告、匹配数组、当前输入快照、历史解释关闭、发布指针和 `result_version` 一起保存;写入失败抛错并全部回滚。发布前校验当前/历史日志归属、版本号、状态及匹配结构;历史 queued/running 解释必须有合法任务ID和对应未完成日志,否则安全失败。`AnalysisTasks` 不再重复写报告版本,迟到任务只能补记原用量,不能覆盖新结果。保留此前REPORT-002调度改动和全部既有未提交工作。 + +新增后端 `tests/report_persistence.php` 与显式隔离入口 `tests/report_test_bootstrap.php`。专项75项通过:历史v1与无目标标记v2不补算新报告;v2重试复用输入、执行策略、产品目录及哈希;最新资料、产品名称/版本/硬规则、准备度策略和当前开关变化不影响旧结果;eligible/ineligible/unknown统计与null rank/score正确落库;四类损坏快照在调用模型前失败;会话字段、历史输入、当前输入和发布指针四处真实SQL故障均完整回滚;旧queued/running解释日志缺失回滚;正常重评关闭旧解释;新任务先成功后旧任务迟到不覆盖。 + +旧回归 `assessment_readiness.php`、`product_matching_tasks.php` 和测试HTTP路由改为显式bootstrap及当前 `AssessmentStore` 状态读取。`readiness_fixtures.php` 仅在隔离测试中重建历史v2输入与需求策略,生产新建仍只接受inputVersion=3;未放开旧采集字段。准备度/报告58项(含随机端口HTTP鉴权、归属、no-store、v1兼容)、演示产品匹配19项、任务调度36项通过,连同专项共188项;10个相关PHP文件7.4 lint及diff检查通过。常规假模型调用,不发生收费模型请求;不重复平台编译或移动端验收。 + +本轮全新隔离ROOT为 `C:/Users/JUN/AppData/Local/Temp/airz-report003-20261006-1791249639741/`;MySQL5.7.26仅监听 `127.0.0.1:3310/airz_product_test_1791249639742`,从schema初始化26表;独立Redis5.0.14.1在6398/DB15、随机队列与专用Token前缀,模型地址锁定不可用的本机端口。未加载默认.env、未连接正式3306/6379、线上数据库或生产worker。收尾六张业务表为0、故障触发器为0、Redis键为0;测试库已DROP,MySQL/Redis已正常停止。无凭据证据为ROOT内 `verification.json`;临时目录保留,不整体共享或重新启动bootstrap,后续检查另建隔离环境。 + +自填报告、冻结策略与演示产品支线已实现,本次完成REPORT-003持久化的本地开发检查;完整任务仍阻塞于真实产品、外部查询、人工业务规则签收与生产容量/守护,不标整体验收完成。小程序已由用户发布,本轮未重复发行;未提交、推送、部署或正式验收。下一开发入口为REPORT-004历史报告、重评失败保留旧结果、匹配/PDF版本一致性组合检查。 + +### 0.63 2026-10-06 REPORT-002 异步任务与补偿链开发检查 + +后端 `application/common/library/AnalysisTasks.php` 加固任务ID、租约和补偿边界:非法或缺失 `task_id` 不进入 Redis、不被 `run()` 执行;运行中任务缺失/损坏租约或任务ID时明确失败为 `AI_TASK_INTERRUPTED`;失败日志只按当前合法任务ID精确更新,避免脏值误写历史 assistant 调用;有效未来租约保持 processing/running。queued 漏投仍由数据库扫描补投,不增加 `attempt_count`;Redis 暂时不可用时保留已接受任务,恢复后可补投;迟到结果继续只记录原任务用量,不能覆盖新任务。 + +`tests/analysis_tasks.php` 改为必须传入显式隔离 `--bootstrap`,子进程重试/消费沿用同一配置,夹具使用当前 `fa_ai_chat`/`AssessmentStore` 架构和 `inputVersion=3`。为把本轮范围限定在调度与补偿链,测试显式沿用v1报告结果格式;不代表v2报告语义或真实模型验收。 + +验证结果:PHP 7.4 lint(两个文件)通过;在 `C:/Users/JUN/AppData/Local/Temp/airz-analysis-report002-20261006/` 的独立 MySQL `127.0.0.1:3310/airz_product_test_2026100602`、Redis `127.0.0.1:6398`/DB15 环境运行,模型关闭、只用假客户端,`PASS: 36 analysis task checks.`。覆盖并发重试/消费者、过期与缺失租约、非法任务ID、迟到结果、用量保留、Redis 断开补投和旧日志保护。回归后仅停止本轮隔离 MySQL/Redis;未连接正式 `.env`、3306/6379、线上数据库或生产 worker。 + +本轮为本地开发检查,未正式验收、部署、提交、推送或发布;用户已发布的小程序状态不因本轮改变。REPORT-002整体仍按任务台账保持开发中,下一依赖项为REPORT-003报告生成与持久化,需继续区分v2策略/产品规则和真实业务验收边界。 ### 0.62 2026-10-05 反馈与消息后端生产发布 @@ -673,14 +866,14 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 | 产品详情 | packages/finance/product/product | PRODUCT-004 | 已接原型04/05、历史理由/参数、逐条DeepSeek解释与失败重试;08咨询待接 | | 产品对比 | packages/finance/compare/compare | PRODUCT-005 | 2—3项冻结对比本地联调通过,真实产品与平台待验收 | | 下一步行动 | packages/finance/next-step/next-step | REPORT-006 | 四项行动与上下文/返回本地联调通过,真实产品及平台待验收 | -| AI 助手 | packages/finance/assistant/assistant | CHAT-004 | 演示边界与三轮金额专项通过;真机/跨平台待验收 | +| AI 助手 | packages/finance/assistant/assistant | CHAT-004 | 演示边界、金额专项及0.68上下文/异常会话62项通过;真机/跨平台待验收 | | 融资档案 | packages/finance/archive/archive | ASSESS-004、REPORT-004 | 本人历史分页、脱敏只读详情、刷新恢复 | | 启动引导 | packages/account/index/index | BASE-003、AUTH-002 | 原型/本机引导 | | 登录 | packages/account/login/login | AUTH-002、LOGIN-004 | 未完成真实认证 | | 个人中心 | packages/account/profile/profile | AUTH-003、POINT-004、MSG-003 | 服务端昵称头像/入口 | | 修改资料 | packages/account/edit-profile/edit-profile | AUTH-003 | 昵称/头像已接服务端持久化 | | 账户安全 | packages/account/security/security | AUTH-004 | 入口与客户端校验 | -| 修改密码 | packages/account/password/password | AUTH-004 | 真实服务未接通,不模拟成功 | +| 修改密码 | packages/account/password/password | AUTH-004 | 原密码改密已接通;短信未开放 | | 换绑手机 | packages/account/change-phone/change-phone | AUTH-004 | 真实服务未接通,不模拟成功 | | 积分中心 | packages/account/points/points | POINT-004 | 服务端余额/规则/任务/流水及签到原键确认,隔离联调通过、未发行 | | 消息中心 | packages/account/messages/messages | MSG-004 | 服务端分页/已读与原版本跳转 | @@ -689,7 +882,7 @@ P0 表示核心流程、安全、首发外部能力或发布门槛;P1 表示 | 新闻列表 | packages/content/news/news | CONTENT-002 | 真实分类/分页接口 | | 文章详情 | packages/content/article/article | CONTENT-002 | 真实详情/不可用状态 | | 融资课堂 | packages/content/classroom/classroom | CONTENT-002、CONTENT-003 | 真实分类/分页接口 | -| 课程详情 | packages/content/lesson/lesson | CONTENT-003 | 服务端会员进度/版本保护 | +| 课程详情 | packages/content/lesson/lesson | CONTENT-003 | 整篇连续阅读/课程已读/版本保护 | ## 3. 里程碑与依赖顺序 @@ -744,8 +937,8 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | --- | --- | --- | --- | --- | | AUTH-001 | 全栈开发(待指定) | 发送成功才倒计时;验证码过期、复用、跨用途和频繁发送均拒绝。 | 未验收;无真实业务验收证据 | 2026-09-22 | | AUTH-002 | 全栈开发(待指定) | 真实账户登录成功;登录失败无假 Token;登出撤销当前 Token;旧散列兼容。 | 已实施子集和验证见第0节;完整任务未验收 | 2026-09-22 | -| AUTH-003 | 全栈开发(待指定) | 不同设备资料一致;昵称不覆盖评估实名;头像不依赖临时路径。 | 本地14项HTTP及昵称/头像持久化交互通过;正式环境跨设备验收待补 | 2026-09-22 | -| AUTH-004 | 全栈开发(待指定) | 跨账户或单个验证码不能换绑;修改后旧 Token 全失效;新密码8–32位且含字母和数字。 | 已实施子集和验证见第0节;完整任务未验收 | 2026-09-22 | +| AUTH-003 | 全栈开发(待指定) | 不同设备资料一致;昵称不覆盖评估实名;头像不依赖临时路径。 | 0.75后端资料268项/76次HTTP及0.74受控H5组合103项/微信Android编译通过;真机/跨设备/正式验收待补 | 2026-10-06 | +| AUTH-004 | 全栈开发(待指定) | 跨账户或单个验证码不能换绑;修改后旧 Token 全失效;新密码8–32位且含字母和数字。 | 0.75会话281项/69次HTTP含全Token撤销/故障回滚/并发及0.74前端检查通过;供应商双挑战/真机/正式验收待补 | 2026-10-06 | 直接阻塞:AUTH-001 → EXT-SMS。 @@ -798,14 +991,14 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | ASSESS-001 | 评估字段与增量模型 | 统一现有字典并补融资需求四字段、inputVersion及增量列;用途字典/必填规则按专项契约确认,保留附件和授权映射。 | P0 | BASE-001、DEC-DEMAND | 1–2 | 开发中 | | ASSESS-002 | 正式评估记录与历史 | 本人历史分页/只读详情及用户隔离;补v1/v2需求回显与旧未采集提示,无草稿保存或续填。 | P0 | ASSESS-001、AUTH-002 | 1–2 | 待验收 | | ASSESS-003 | 提交与生命周期API | 保留提交201及重试202幂等;补inputVersion切换、新需求校验、输入字典冻结、同键全字段比较和旧请求重放兼容。 | P0 | ASSESS-002、FILE-004 | 1.5–2 | 开发中 | -| ASSESS-004 | 评估全页面联调 | 评估/确认/分析/报告/档案贯穿assessmentId;新增资金需求分组和只读展示,保留金额、清理与并发回归。 | P0 | ASSESS-003 | 1.5–2 | 开发中 | +| ASSESS-004 | 评估全页面联调 | 评估/确认/分析/报告/档案贯穿assessmentId与revisionId;空白新建、最新资料修改、金额精度、幂等及账户/迟到响应组合联调。 | P0 | ASSESS-003 | 1.5–2 | 开发中 | | 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 | | --- | --- | --- | --- | --- | | ASSESS-001 | 全栈开发(待指定) | 现有与v2字段映射明确,元字符串/整数月/用途条件校验;历史新字段NULL,不新建评估表。 | 需求四字段/版本/用途字典及迁移已实现;金额/期限/other/信用卡一致性含于76项检查;私有附件与正式授权仍待接入 | 2026-09-24 | | ASSESS-002 | 全栈开发(待指定) | 同用户可多次评估;越权拒绝;历史v1不回填需求、不重算,v2显示冻结需求且不可编辑。 | v1未采集/v2冻结需求只读回显、HTTP越权检查及个人/企业H5刷新通过;待业务验收,旧54项仅作历史证据 | 2026-09-24 | | ASSESS-003 | 全栈开发(待指定) | 同键同内容原回执,合法需求或版本变化409、非法格式422;最低新建版本2或用途停用不阻断原键回放;旧重试返回原taskId。 | 76项覆盖新建最低2、旧v1键/旧用途回放、全字段冲突、并发唯一记录、重试原回执和输入快照不变;附件授权待接 | 2026-09-24 | -| ASSESS-004 | 全栈开发(待指定) | 个人/企业需求均能提交及回显;12.345678万元=123456.78元;无草稿,历史不串账户,处理中无假报告。 | H5个人12.345678万元及企业0.000001万元正确提交/刷新;确认编辑、other清理、字典失败恢复、刷新清空通过;真实渠道待验收 | 2026-09-24 | +| ASSESS-004 | 全栈开发(待指定) | 个人/企业新建空白,修改所选评估最新资料并保存新版本;12.345678万元=123456.78元;无草稿,历史不串账户,迟到响应不恢复旧资料。 | 0.73后端514项/158次本机HTTP及版本58项通过;0.72受控H5 96项及微信/Android27页面编译通过,真机/真实渠道及正式验收待完成 | 2026-10-06 | 直接外部/业务阻塞:无;仍须满足前置任务。 @@ -846,8 +1039,8 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | PRODUCT-001 | 全栈开发(待指定) | 发布规则与人工样例可审阅;非法字段/操作符阻止发布;fail优先于unknown,匹配指标不作为审批概率。 | 首版字段/操作符/来源门槛已形成规则契约;64项内存测试;真实产品发布依据与业务样例待验收 | 2026-09-24 | | PRODUCT-002 | 全栈开发(待指定) | 同输入/快照结果稳定;未知不当满足,配置错误不归咎用户;需求不拆额、不改期;未运行与零候选区分。 | 目录冻结/排序/理由已接正式worker;51项内存和19项任务测试通过;真实产品金标准、规模/生产验收仍待完成 | 2026-09-24 | | PRODUCT-003 | 全栈开发(待指定) | 产品用途/地区/额度/期限有真实依据;规则可配置并启停,版本变化留依据;公共详情无个人分数。 | 结构化编辑、来源/用途、只读预检、编辑冲突、上架/下架及公共列表本地联调通过,见0.32;真实资料/运营核对/发布验收待完成,6条演示产品不替代真实资料 | 2026-09-30 | -| PRODUCT-004 | 全栈开发(待指定) | 每条解释可追溯且不凑三正三反;当前产品变化不改历史;跨账户拒绝;unavailable/零候选/failed不混淆。 | 原型04/05和逐条DeepSeek解释本地完成;51项任务/输出检查、70项HTTP/快照检查与浏览器验证见6.18;真实机构资料及平台验收待完成 | 2026-09-28 | -| PRODUCT-005 | 全栈开发(待指定) | 不跨评估/混用现价;缺值不同于0;手机横向表格可读,单项失败明确;不重跑模型。 | compare页面及6.16本地编译/真实读取与异常注入证据;真实机构产品和微信内H5/真机待验收 | 2026-09-28 | +| PRODUCT-004 | 全栈开发(待指定) | 每条解释可追溯且不凑三正三反;当前产品变化不改历史;跨账户拒绝;unavailable/零候选/failed不混淆。 | 0.71当前存储匹配238项/101次本机HTTP及解释52项通过;0.70历史版本H5受控97项及微信/Android编译通过,真实产品/平台待验收 | 2026-10-06 | +| PRODUCT-005 | 全栈开发(待指定) | 不跨评估/混用现价;缺值不同于0;手机横向表格可读,单项失败明确;不重跑模型。 | 0.70跨组补选/移除/刷新/单列失败重试/账户变化受控检查及编译通过;6.16历史证据保留,真实机构产品及微信内H5/真机待验收 | 2026-10-06 | 剩余门槛:DEC-MATCH开发口径已采用既有契约,真实产品规则/金标准业务签收待完成;PRODUCT-003真实发布仍依赖DEC-PRODUCT。纯规则、后台模型预检及字段编译已实施,未解除整模块验收依赖。 @@ -861,17 +1054,17 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | REPORT-002 | 异步任务与补偿 | 保留Redis派发、补投、租约和taskId隔离;沿用提交时input_snapshot,一次性补入execution_snapshot并在重试时复用,支持跨部署v1/v2任务。 | P0 | ASSESS-003、REPORT-001 | 2.5–4 | 开发中 | | REPORT-003 | 报告生成与持久化 | 保留v1自填报告;补v2需求、完整度/准备等级、规则证据及定性AI区块;版本快照和正式结果原子落库。 | P0 | REPORT-002、DATA-004、PRODUCT-002、PRODUCT-003、DEC-MATCH、DEC-READINESS | 2–3 | 阻塞 | | REPORT-004 | 分析报告历史联调 | 保留轮询/重试和v1历史;接v2需求、完整度、准备等级、三态匹配及证据解释,不显示无规则分数/雷达。 | P0 | REPORT-003、PRODUCT-004、ASSESS-004 | 2–3 | 开发中 | -| REPORT-005 | 报告PDF导出 | 鉴权流式下载、受控中文模板、报告与产品冻结快照、H5保存与失败提示。 | P1 | REPORT-004 | 2.5–4 | 待验收 | +| REPORT-005 | 报告PDF导出 | 鉴权流式下载、受控中文模板、报告与产品冻结快照、H5保存、微信下载预览及失败提示。 | P1 | REPORT-004 | 2.5–4 | 待验收 | | REPORT-006 | 下一步行动 | 新增next-step页,准备材料、查看已存报告、优化资料、新评估、咨询及首页导航。 | P1 | PRODUCT-004、REPORT-004、CHAT-003 | 1–2 | 待验收 | | 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 | | --- | --- | --- | --- | --- | | REPORT-001 | 全栈开发(待指定) | 模型可配置;密钥不下发;失败与使用量可追踪;数值事实不被模型改写。 | 两个指定模型真实连通;v2修正后Flash3例/Pro1例格式及语义检查通过;合成输入隐私过滤,调用tokens已记录;商业预算/生产稳定性待验收 | 2026-09-24 | | REPORT-002 | 全栈开发(待指定) | 漏投/中断可恢复或明确失败;旧任务不可回写;输入/目标结果/策略/产品快照重试不隐式变化。 | 54项报告检查覆盖目标版本冻结、超时重试快照不变、旧v2输入仍v1、损坏快照先于模型失败;产品快照/生产守护未完成,旧29项任务证据保留 | 2026-09-24 | -| REPORT-003 | 全栈开发(待指定) | 完整度按发布字段集复算,等级有依据且非审批;null rank/score按状态验证;格式错误不成功,产品/规则更新不改旧报告。 | v2自填支线已实现;本轮58项回归及Flash3例/Pro1例真实样例通过;真实产品/外部查询、生产与业务人工签收待完成 | 2026-09-24 | -| REPORT-004 | 全栈开发(待指定) | 个人/企业真实链路按版本展示;未发布无分或等级,100%不等于授信;旧报告不重算;新复评新assessmentId。 | 6.17三栏/局部重试/旧版/权限及生命周期验证;真实产品与外部渠道仍待验收 | 2026-09-28 | -| REPORT-005 | 全栈开发(待指定) | 本人成功报告可导出;金额/理由与历史一致;不重跑模型/泄露身份;中文分页可读,JSON错误不保存成PDF。 | 鉴权接口/H5导出已实施,29项PDF+20项HTTP+24项浏览器检查通过;跨浏览器/真机和生产容量待验收,见6.21 | 2026-09-28 | -| REPORT-006 | 全栈开发(待指定) | 根据判定及当前可用性开放行动;无银行申请提交;新评估不改历史、无草稿;上下文和返回正确。 | 27页已注册;38项H5流程/边界检查、Android/微信编译通过,真实产品与平台待验收,见6.20 | 2026-09-28 | +| REPORT-003 | 全栈开发(待指定) | 完整度按发布字段集复算,等级有依据且非审批;null rank/score按状态验证;格式错误不成功,产品/规则更新不改旧报告。 | 自填/演示产品支线已实现;0.64隔离持久化75项及周边113项通过;历史Flash3例/Pro1例样例证据保留;真实产品/外部查询、生产与业务人工签收待完成 | 2026-10-06 | +| REPORT-004 | 全栈开发(待指定) | 个人/企业链路按版本展示;未发布无分或等级,100%不等于授信;旧报告不重算;修改重评复用记录新增输入版本,新建评估另建记录。 | 0.65历史/重评215项及版本58项、H5组合32项通过,修复非法版本500及档案两处错版回包;真实产品/外部渠道及正式验收未完成 | 2026-10-06 | +| REPORT-005 | 全栈开发(待指定) | 本人成功报告可导出;金额/理由与历史一致;不重跑模型/泄露身份;中文分页可读,JSON错误不保存成PDF。 | 0.66微信下载/预览源码及38项产物检查、H5页面6项/边界17项和平台编译通过;0.65的13文件52项内容证据保留;downloadFile域名需配置并重新发行,真机/跨浏览器及生产容量待验收,见6.21 | 2026-10-06 | +| REPORT-006 | 全栈开发(待指定) | 根据判定及当前可用性开放行动;无银行申请提交;新评估不改历史、无草稿;上下文和返回正确。 | 0.67历史版本/报告可用性H5组合38项及Android/微信编译通过;补版本/重评状态提示与无匹配降级;真实产品材料/渠道及平台待验收,历史基础见6.20 | 2026-10-06 | 剩余依赖:REPORT-001商业预算/生产额度待DEC-AI;REPORT-003完整报告仍依赖DATA、PRODUCT、DEC-MATCH;DEC-READINESS首版开发策略已发布,人工业务验收待完成。模型真实权限已验证。 @@ -888,10 +1081,10 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 | | --- | --- | --- | --- | --- | -| CHAT-001 | 全栈开发(待指定) | 用户只能读自身会话;评估会话与普通会话分离;重进恢复历史。 | 本地76项助手回归通过,H5前轮已联调;真实13例及金额专项通过边界见6.24,真机待验收 | 2026-09-29 | -| CHAT-002 | 全栈开发(待指定) | 同请求不重复建消息或记本地消耗;错误回复不标成功;不会发送无关证件资料。 | 本地76项助手回归通过,H5前轮已联调;真实13例及金额专项通过边界见6.24,真机待验收 | 2026-09-29 | -| CHAT-003 | 全栈开发(待指定) | 切换会话不串上下文;超时保留可重试消息;重进页面能继续。 | 本地76项助手回归通过,H5前轮已联调;真实13例及金额专项通过边界见6.24,真机待验收 | 2026-09-29 | -| CHAT-004 | 全栈开发(待指定) | 配额并发不超扣;供应商计费不明可对账;仅真实成功回复显示完成。 | 并发额度/超时/迟到/重试本地通过;真实13例、金额专项通过及未验收边界见6.24,容量待验收 | 2026-09-29 | +| CHAT-001 | 全栈开发(待指定) | 用户只能读自身会话;评估会话与普通会话分离;重进恢复历史。 | 0.69当前存储下后端165项及0.68 H5受控62项通过;真实13例边界见6.24,真机待验收 | 2026-10-06 | +| CHAT-002 | 全栈开发(待指定) | 同请求不重复建消息或记本地消耗;错误回复不标成功;不会发送无关证件资料。 | 0.69双进程幂等/消费/重试/共享额度及脱敏检查通过;真实13例边界见6.24,生产容量待验收 | 2026-10-06 | +| CHAT-003 | 全栈开发(待指定) | 切换会话不串上下文;超时保留可重试消息;重进页面能继续。 | 0.68 H5受控62项及微信/Android编译通过;既有后端/真实13例边界见6.24,真机待验收 | 2026-10-06 | +| CHAT-004 | 全栈开发(待指定) | 配额并发不超扣;供应商计费不明可对账;仅真实成功回复显示完成。 | 0.69后端165项/共享发布回归348项及0.68 H562项通过;真实13例边界见6.24,费用对账/容量/真机待验收 | 2026-10-06 | 直接外部/业务阻塞:无;仍须满足前置任务。 @@ -903,15 +1096,15 @@ DEC-DEMAND已确认并发布,需求录入/提交/历史子范围已实现; | --- | --- | --- | --- | --- | --- | --- | | CONTENT-001 | 内容模型与发布后台 | 补齐文章/课程结构、稳定章节ID、分类、封面/摘要、发布状态、FAQ类型及协议入口。 | P1 | BASE-001 | 1–1.5 | 开发中 | | CONTENT-002 | 列表详情与首页推荐 | 新闻/文章/课堂/详情真实API、分页、富文本清洗、缺失内容与首页推荐接入。 | P1 | CONTENT-001、BASE-004 | 1–1.5 | 待验收 | -| CONTENT-003 | 云端课程进度 | 按用户/课程/章节记录完成,章节版本兼容、跨设备恢复和本机缓存策略。 | P1 | CONTENT-002、AUTH-002 | 1–1.5 | 待验收 | +| CONTENT-003 | 云端课程已读 | 整篇连续阅读、一次标记课程已读,兼容历史记录与内容版本,跨设备恢复。 | P1 | CONTENT-002、AUTH-002 | 1–1.5 | 待验收 | | CONTENT-004 | 搜索与FAQ联调 | 真实全文字段检索、分类/分页、请求竞态、FAQ读取、无结果和断网恢复。 | P1 | CONTENT-002 | 1–1.5 | 开发中 | | 任务编号 | 负责人 | 验收条件 | 证据 | 更新时间 | | --- | --- | --- | --- | --- | | CONTENT-001 | 全栈开发(待指定) | 后台可发布/下架;章节重排不换ID;草稿不可公开;FAQ可维护。 | 40项数据库/13项后台检查、服务器验收通过;FAQ服务端与后台源码完成,尚未导入/部署,见0.39 | 2026-10-01 | -| CONTENT-002 | 全栈开发(待指定) | 首页/列表/详情ID一致;无模拟兜底内容;下架详情有明确不可用状态。 | 81项内容HTTP/页面及公网接口通过,微信/Android编译通过;真机待验收 | 2026-10-01 | -| CONTENT-003 | 全栈开发(待指定) | 用户隔离;重复完成幂等;章节排序变化不串进度;跨设备一致。 | 版本冲突/重排/正文变化及会员权限检查通过;多设备待验收 | 2026-10-01 | -| CONTENT-004 | 全栈开发(待指定) | 旧搜索响应不覆盖新关键词;返回ID可开详情;FAQ与实际业务行为一致。 | 分类/多词/分页/竞态/空错态通过,搜索正式部署;FAQ服务端与前端接入源码完成,尚未导入/部署 | 2026-10-01 | +| CONTENT-002 | 全栈开发(待指定) | 首页/列表/详情ID一致;无模拟兜底内容;下架详情有明确不可用状态。 | 0.76受控H5组合123项及微信/Android编译通过,详情归属/分页/下架重试已补;真实后端组合/真机待检查,未正式验收 | 2026-10-06 | +| CONTENT-003 | 全栈开发(待指定) | 整篇直接阅读;单一课程已读操作;账户隔离、失败可重试及跨设备一致。 | 0.77连续阅读/已读57项及微信Android编译通过;历史存储兼容,真实后端组合/真机/多设备待补 | 2026-10-07 | +| CONTENT-004 | 全栈开发(待指定) | 旧搜索响应不覆盖新关键词;返回ID可开详情;FAQ与实际业务行为一致。 | 0.76补关键词/分类竞争、分页错包/重复/429/断网恢复;搜索此前已部署,本轮修复未发布,FAQ接入源码仍未导入/部署 | 2026-10-06 | 直接外部/业务阻塞:无;仍须满足前置任务。 diff --git a/docs/新会话交接.md b/docs/新会话交接.md index 79400d4..3818db0 100644 --- a/docs/新会话交接.md +++ b/docs/新会话交接.md @@ -1,6 +1,175 @@ # AI融资项目新会话交接 -记录日期:2026-10-05。本文件为接续入口;当前存储与流程以[评估版本与最新资料](评估版本与最新资料.md)、[开发进度](开发进度.md)0.62节(反馈与消息后端生产发布)、0.61节(反馈与消息配套发布准备)、0.60节(反馈恢复与消息组合检查)、0.59节(反馈回复通知联动)、0.58节(会员反馈原键恢复)、0.57节(后台反馈处理及既有小程序发布状态)、0.55节(后端发布)及[开发文档](开发文档.md)v1.46为准。历史章节中的域名、部署及“待开发”以最新记录为准。 +记录日期:2026-10-07。本文件为接续入口;课程最新交互以[开发进度](开发进度.md)0.77节及下方课程简化检查点为准,整篇连续阅读、仅一次标记已读。其余当前存储与流程以[评估版本与最新资料](评估版本与最新资料.md)、[开发进度](开发进度.md)0.76节(CONTENT-002/003/004内容、课程进度与搜索组合开发检查)、0.75节(AUTH-003/004账户资料、头像及会话撤销后端隔离HTTP开发检查)、0.74节(AUTH-003/004账户资料、改密及退出组合开发检查)、0.73节(ASSESS-004评估新建/修改后端隔离HTTP开发检查)、0.72节(ASSESS-004资料填写、确认提交与档案回显组合开发检查)、0.71节(PRODUCT-004匹配读取与产品解释后端隔离开发检查)、0.70节(PRODUCT-004/005匹配详情与对比历史版本组合开发检查)、0.69节(CHAT-004后端幂等/额度/历史隔离开发检查)、0.68节(CHAT-004历史版本上下文与异常会话组合开发检查)、0.67节(REPORT-006行动页与报告可用性组合开发检查)、0.66节(REPORT-005微信PDF与导出边界开发检查)、0.65节(REPORT-004历史报告与重评组合开发检查)、0.64节(REPORT-003报告生成与持久化开发检查)、0.63节(REPORT-002异步任务与补偿链开发检查)、0.62节(反馈与消息后端生产发布)、0.61节(反馈与消息配套发布准备)、0.60节(反馈恢复与消息组合检查)、0.59节(反馈回复通知联动)、0.58节(会员反馈原键恢复)、0.57节(后台反馈处理及既有小程序发布状态)、0.55节(后端发布)及[开发文档](开发文档.md)v1.46为准。历史章节中的域名、部署及“待开发”以最新记录为准。 + +## 新会话接续检查点:2026-10-07(课程简化) + +用户要求课程不分章节,减少复杂度。已将 `packages/content/lesson/lesson.uvue` 改为整篇连续阅读,所有正文直接展示,只保留自然小标题;移除目录/折叠/编号/逐节完成/开始继续学习/进度条和节数。底部仅“我已读完”,已读后禁用并显示“已读完”。匿名直接阅读,点击标记时登录并回跳;已读状态加载慢或失败不阻止正文。 + +- 仅课程页业务源码修改,后台数据结构、已上线API及历史记录兼容,无后端变更或迁移。一次操作依次补齐旧接口未完成段落,全部成功才显示课程已读;途中失败重载服务器状态后仅补未完成部分。逐请求前后核对账户/版本/页面代次,换账户/离页停止余下请求,双击不重复。后台稳定ID属于存储兼容,不重新引入用户章节流程。 +- Chrome手机390×844/360×740、桌面1280×900最终57项/53业务请求/15合成PUT及1登录POST通过:整篇文本/无章节控件/滚动到末尾/单一已读、重复零写与刷新恢复、老部分记录、慢/失败状态仍阅读、部分保存失败恢复、双击、409停止、立即/保存中换账户、离页、匿名零GET与密码登录回跳、小屏适配。身份/非空/无遮罩/横溢/段落顺序/封面/三截图通过,pageerror=0、未定义API=0,console仅刻意503/409;全部外部API拦截。首轮截图图片等待误判空集合,补可见封面背景条件后最终通过。 +- HBuilderX5.26 Android08:36:34、微信08:37:08,27页面编译成功。初始CLI未打开HBuilderX,正常启动后成功;新5175初编译等待后运行。Browser plugin not available,沿用缓存Playwright CLI,无新增依赖;共享layout既有H5类型警告保留。业务页及四说明UTF-8无BOM/主要行尾、两仓库diff通过;保留既有未提交。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-reading-20261007/`,安全证据 `verification.json`、`reading-mobile.png`、`reading-end-mobile.png`、`reading-desktop.png`、`android-final.log`、`weixin-final.log`;临时脚本/CLI日志含合成会话,不整体分享。存储/cookies/routes清空、专用reading浏览器关闭,当前源码预览5175/PID15480保留。本轮开始5173/5174/旧5175无监听,未停止其他服务。未读正式.env/连生产/启数据库Redisworker/真实短信模型,后端只读,无发布/提交/推送/正式验收。 +- 台账1.67/0.77,63任务/27页面及状态保持;下一项仍为内容、课程已读与搜索后端隔离HTTP检查。当前需求覆盖0.76及更早用户章节学习描述;检查历史记录、幂等、内容版本、账户归属、失败恢复即可,不恢复章节目录或逐节完成。后台 `tests/content_catalog.php` 显式bootstrap但固定3309,先统一隔离守卫/随机HTTP/精确清理再另建本机环境。真机/跨设备/真实后端及正式验收待补,用户自行发布小程序,本轮源码未发行,不沿用历史生产授权。 + +## 新会话接续检查点:2026-10-06(CONTENT-002/003/004) + +本轮完成内容、课程进度与搜索组合开发检查,复现并修复六类问题。保留两仓库全部既有工作和用户既有小程序发布状态,未正式验收、部署、提交或推送。 + +- 五源码文件:`services/content.uts`、`packages/content/lesson/lesson.uvue`、`news/news.uvue`、`classroom/classroom.uvue`、`search/search.uvue`。共享解析校验详情ID/完整正文、课程章节/场景/数量/版本、分页页码/大小/总数/hasMore和同页唯一ID;保留合法列表/首页摘要及后端过滤坏行的不足20条响应。进度核对课程/版本/唯一章节及当前章节归属,完成回执须包含所选章节并保持版本。分页追加拒绝重复,错误保留旧列表和页码;搜索补可见性守卫。 +- 课程可见期每秒核对Token,操作/回包核对账户及代次,立即或无操作换账户清旧进度/展开状态并重新读取。离页停止检查;重复完成、加载/保存中或隐藏页不提交,迟到401不清新会话。原六缺陷为错详情ID、重复/外来进度、错误页码、旧页向新账户写进度、换账户闲置旧进度、不同版本完成回执;修复后六项复测均false。 +- Chrome手机390×844、桌面1280×900最终123项/107次全量拦截业务请求/9次合成PUT或登录POST通过,涵盖坏响应/非法参数、两条首页共享解析、下架重试/分页/分类竞争、重复完成/失败重试/版本/章节/账户/迟到响应/离页、匿名登录回跳,以及搜索关键词/类型竞争/分页429与重复/详情/空/断网恢复/清空/建议。场景检查含选择状态与新课程标题证据;身份/非空/无遮罩/横溢/图片及七截图通过,pageerror=0、未定义API=0,console仅刻意404/503/401/429和net::ERR_FAILED。无真实后端、短信或模型请求。 +- HBuilderX5.26最终Android21:27:44、微信21:34:02,27页面编译通过。UTS前向引用沿用回调;旧5174返回旧共享模块,另启5175补临时HX_APP_ROOT后确认新export。测试初期自定义uni-button禁用断言、登录定位/协议勾选及弱请求计数已修正,中断结果不计最终数。Browser plugin not available,复用缓存Playwright CLI,无新增依赖;共享layout既有H5类型警告保留。两仓库diff、五源码及两台账UTF-8无BOM/主要行尾约定通过。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-content-combo-20261006/`,安全证据为 `verification.json`、`repro-after.json`、七张截图、`android-final.log`、`weixin-final.log`。临时脚本/CLI日志含无服务器权限合成会话,不整体分享。浏览器存储/cookies/routes清空,专用content-combo会话关闭;当前源码H5预览5175/PID68580保留,旧5174/PID76784及另一项目5173保留,后续核对归属再复用/停止。未启动数据库/Redis/后端/worker,未读正式.env或连接生产,后端只读;前端 `%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库既有未提交保持。 +- 台账1.66/0.76,63任务/27页面不变;CONTENT-002/003待验收、CONTENT-004开发中保持。真实后端组合、真机/跨设备及正式验收未覆盖,此前及本轮新增源码仍未配套发布,不沿用历史生产授权。 +- 下一开发入口:CONTENT-002/003/004后端内容、课程进度与搜索隔离HTTP检查。`D:/AAdesk/202609/airz/tests/content_catalog.php` 已要求显式bootstrap但固定3309且未复用report_test_bootstrap;先统一隔离守卫、随机本机HTTP继承及精确清理,再另建本机库/Redis。检查发布/下架/坏行、列表/详情/首页/搜索契约、鉴权/账户隔离/重复完成、章节重排保持/正文改变失效、版本冲突及事务/并发失败。不重复前端组合、自行正式验收、接供应商、调用真实短信/模型、部署或重新发行小程序。 + +## 新会话接续检查点:2026-10-06(AUTH-003/004后端) + +本轮完成账户资料、头像及会话撤销后端隔离HTTP开发检查,仅修改四个后端测试文件,前后端业务源码未修改。两仓库全部既有工作及用户既有小程序发布状态保持,未正式验收、部署、提交或推送。 + +- `D:/AAdesk/202609/airz/tests/api_profile.php`、`tests/api_session.php` 接显式 `--bootstrap=`,缺参在框架初始化前拒绝;新增 `tests/account_http_test.php`、`tests/account_http_router.php`,随机本机HTTP和双进程继承相同隔离bootstrap/ROOT,头像写入独立临时目录。故障模式只从本次runtime文件读取,按归属精确清理,清理成功才PASS,异常非零。 +- 资料268项/76次真实本机HTTP通过:鉴权/越权/JSON/未知字段/no-store、昵称边界与持久化、个人及企业评估资料/历史日志字节保持、伪图片/GIF/原始和重编码大小/尺寸/像素拒绝,PNG/JPEG/WebP归一PNG与安全元数据、附件归属/路径/文件、上传不自动绑定、省略保持/null默认。触发器验证入库失败文件清理及昵称头像事务回滚,目录故障和移除故障后重试通过。 +- 会话281项/69次真实本机HTTP通过:入参/Bearer/过期/禁用、旧散列升级、退出故障保留与成功只撤当前Token、改密输入/旧密码/DB/Redis失败回滚、成功撤全部本账户会话且另一账户保持、晚Hook失败关闭及重新登录、登录Hook新Token清理、8/32位边界。双PHP及用户行锁验证三轮登录/改密竞争后旧密码无有效Token、同旧密码双改密仅一成功;短信503和未路由换绑404均无假成功。合计549项/145请求,属于开发检查。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-account-backend-20261006-1791290960616/`,MySQL5.7.26仅127.0.0.1:3323、Redis5.0.14.1仅127.0.0.1:6403/DB15,模型127.0.0.1:1且关闭,无worker。26表由schema初始化,无正式.env/生产连接/真实短信或模型/新增依赖。初期启动参数、ID类型、Token导入与空JSON预期已修正;收尾扩展不支持shutdown,使用已有redis-cli正常关闭,中断结果不计最终数。七业务表/故障触发器/Redis键/头像目录均0,测试库已DROP,专用HTTP/MySQL/Redis停止,3323/6403无监听。四PHP lint、两缺bootstrap拒绝、两仓库diff/UTF-8无BOM/LF通过。 +- 安全证据:ROOT内 `verification.json`、`cleanup.json`、`services.json`、`profile-final.out`/`profile-final.err`、`session-final.out`/`session-final.err`,最终stderr空。临时bootstrap/runtime/工具文件不整体分享或直接复用。前端未变,沿用0.74浏览器/微信/Android编译证据;5174/PID76784预览核对归属后保留,另一项目5173保持。前端 `%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库既有未提交保留。 +- 台账1.65/0.75,63任务/27页面不变,AUTH-003/004仍开发中;完整登录/换绑受短信供应商阻塞,真机/跨设备/正式验收未覆盖。此前新增业务源码仍未配套发布,不沿用历史发布授权。 +- 下一开发入口:CONTENT-002/003/004内容、课程进度与搜索组合开发检查。入口为 `packages/content/services/content.uts`、`services/search.uts` 和 `news/news.uvue`、`article/article.uvue`、`classroom/classroom.uvue`、`lesson/lesson.uvue`、`search/search.uvue`。核对列表/详情与下架状态、章节版本和账户隔离、重复完成/失败重试/迟到回包、搜索关键词/分类分页与旧响应竞争;先用受控API响应与现有H5预览,如需后端HTTP先适配显式隔离入口并另建本机环境。不要重复账户专项、自行接供应商、正式验收、真实短信/模型调用、部署或重新发行小程序。 + + +## 新会话接续检查点:2026-10-06(AUTH-003/004) + +本轮完成账户资料、改密及退出组合开发检查,修复五类已复现问题。两仓库全部既有工作及用户既有小程序发布状态保持,未正式验收、部署、提交或推送。 + +- 七个源码文件:`packages/account/services/account.uts`、`profile/profile.uvue`、`edit-profile/edit-profile.uvue`、`security/security.uvue`、`password/password.uvue`、`change-phone/change-phone.uvue`、`components/SecurityCode.uvue`。修复同手机号新Token提交旧页资料、个人中心保留旧账户内容、旧退出确认误退新账户、离页改密回包主动跳转、保存后迟到GET覆盖新昵称缓存。页面及弹窗/选图/回包校验账户和代次,可见期定时检查、离页停止;资料/头像/改密回执校验归属与完整性,写入使旧读取失效。昵称继续独立于评估实名。改密成功清理原账户本机会话但隐藏页不跳转;密码/验证码离页清空,短信目标变化/离页使旧发送响应失效,退出失败可重试,未确认签到/反馈命令仍按既有约定保留。 +- Chrome手机390×844、桌面1280×900最终103项/48次全量拦截业务请求/21次合成写请求通过。覆盖资料/头像/改密坏回执、账户切换/旧菜单/迟到读取保存与上传、昵称独立、资料失败重试、头像大小/过期选图/默认头像、退出确认/失败重试/会话与缓存清理、改密确认/可见性/切模式/成功与离页/迟到401、短信与换绑未开放及短信目标变化、安全页过期。pageerror=0、未定义API=0,console仅刻意401/409/422/503,身份/非空/无遮罩/横溢及六截图通过。无实际后端/短信/模型请求,合成改密回执不证明真实服务端全Token撤销。 +- HBuilderX5.26最终Android20:38:52、微信20:39:33,27页面编译通过。脚本初期返回页预期、uni-input事件等待、同名占位文字及隐藏组件定位已修正,早期中断结果不计入最终数。Browser plugin not available,复用缓存Playwright CLI,无新增依赖;共享layout既有H5类型警告保留。两仓库diff、七文件及两台账UTF-8无BOM/主要行尾约定通过。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-auth003004-20261006/`。安全证据:`verification.json`、`profile-mobile.png`、`phone-mobile.png`、`edit-mobile.png`、`password-mobile.png`、`edit-desktop.png`、`password-desktop.png`、`android-final.log`、`weixin-final.log`。脚本/CLI日志含无服务器权限合成会话,不整体分享。存储/cookies/routes清空、验证浏览器已关闭。本轮本地预览 `http://localhost:5174/#/packages/account/profile/profile`,5174/PID76784保留,Node命令属于本项目,输出ROOT/h5;下次先核对归属再复用或停止。另一项目5173/PID68536保持。后端只读,无正式.env/生产连接/数据库/Redis/worker或真实短信/模型。 +- 台账1.64/0.74,63任务/27页面不变,AUTH-003/004仍开发中。原密码改密已接通,账户短信/换绑没有正式路由,完整任务仍受供应商阻塞。真机/真实渠道/跨设备及正式验收未覆盖;此前及本轮新增源码仍未配套发布,不沿用历史发布授权。保留前端 `%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库既有未提交。 +- 下一开发入口:AUTH-003/004账户资料、头像及会话撤销后端隔离HTTP检查。旧 `D:/AAdesk/202609/airz/tests/api_profile.php`、`tests/api_session.php` 参数检查前初始化默认环境、HTTP固定127.0.0.1,不得直接运行;先适配显式隔离bootstrap、随机本机HTTP继承、独立头像目录及精确清理,再另建本机库/Redis。验证归属/字段/持久化/头像文件、昵称不改评估实名、事务失败、退出当前会话/改密全部会话撤销、未开放短信拒绝。不要自行接供应商、真实短信或模型调用、正式验收、部署或重新发行小程序。 + +## 新会话接续检查点:2026-10-06(ASSESS-004后端) + +本轮完成评估新建、修改接口的后端隔离HTTP开发检查,修正测试入口及过时夹具;前后端业务源码未修改。保留两仓库全部既有工作和用户既有小程序发布状态,未正式验收、部署、提交或推送。 + +- `D:/AAdesk/202609/airz/tests/api_assessments.php` 接显式 `--bootstrap=`,缺参在框架初始化前拒绝,复用report_test_bootstrap。采用inputVersion=3/AssessmentStore,删除旧资料主键/加密身份/任务落资料表假设;新增 `tests/assessment_http_router.php`,随机本机HTTP及双进程继承同一bootstrap/队列,分析开关只从隔离runtime读取。按本次账户/产品/队列/作业文件/故障触发器精确清理,清理成功才输出PASS,异常非零。 +- HTTP专项514项/158次请求通过:匿名/撤销Token/越权/no-store/非法输入及JSON大小、元金额精度/零数与未知、只读脱敏/完整回填、个人/企业独立新建和各一份最新资料、修改本评估最新版本、原键重放不回写最新资料、错内容/作用域/基准/类型冲突、旧版不变、同键新建/修改双进程各一输入、异键修改一成功一REVISION_CONFLICT。触发器注入资料更新失败验证新建/修改完整事务回滚,移除故障后原键可提交;处理中拒绝修改,同键不新增调用,个人/企业重评失败保留旧成功报告,重试成功才发布新版,迟到旧任务零调用;23版分页/独立记录分页/过滤/软删除拒绝通过。仅5次显式假调用,无真实模型/消费worker。版本专项58项通过,合计572项,不记作正式业务验收。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assessment-backend-20261006-1791288138879/`,MySQL5.7.26仅127.0.0.1:3322、Redis5.0.14.1仅127.0.0.1:6402/DB15,模型127.0.0.1:1。26表由schema初始化,PDF复制现有锁定依赖/字体,无安装或正式.env/生产连接。初期合成用户名长度、MySQL启动参数及ThinkPHP测试DDL未缓冲查询问题已修正,DDL改用独立PDO,早期未完成结果不计最终数。六业务表/故障触发器/Redis键均0,测试库已DROP,专用HTTP/MySQL/Redis停止,3322/6402无监听。两文件PHP7.4 lint、缺bootstrap拒绝、两仓库diff/UTF-8无BOM通过。 +- 安全证据ROOT内 `verification.json`,最终 `assessment-final.out`/`assessment-final.err`、`revisions-final.out`/`revisions-final.err`;临时bootstrap/runtime/工具文件不整体分享或直接复用,下次另建隔离环境。前端业务源码未变,不重复浏览器/平台编译,沿用0.72最终证据。`%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库既有未提交保持。 +- 台账1.63/0.73,63任务/27页面不变,ASSESS-004仍开发中;真实渠道、真机及正式验收未覆盖。此前新增业务源码仍未配套发布,不沿用历史生产授权。 +- 下一开发入口:AUTH-003/004账户资料、改密及退出组合开发检查。核对个人中心/编辑资料账户隔离和迟到响应、昵称不覆盖评估实名、保存失败重试、改密/退出会话撤销与旧页清理;短信/换绑未开放不产生假成功。优先受控响应,如需后端HTTP先核对脚本隔离入口,另建本机库/Redis。不重复评估/匹配/助手专项、自行真实短信或模型调用、正式验收、部署或重新发行小程序。 + +## 新会话接续检查点:2026-10-06(ASSESS-004) + +本轮完成资料填写、确认提交与档案回显组合开发检查,修复五类已复现问题。保留两仓库全部既有工作及用户此前小程序发布状态,新增源码尚未发行;本轮未正式验收、部署、提交或推送。 + +- 四个源码文件:`packages/finance/services/records.uts` 核对评估/版本/状态/回执/分页归属,修改回填须有有效版本与完整元单位资料,修改回执须属于原评估且生成新版本;`confirm/confirm.uvue` 补账户/可见性/请求代次守卫;`assessment/assessment.uvue`、`archive/archive.uvue` 补可见期账户检查和离页停止,旧操作及选图回调守卫。档案重新加载后重启检查,版本请求结束后再次核对详情,避免换账户清空后访问空详情。 +- Chrome手机390×844、桌面1280×900最终96项/72次受控业务请求/13次合成POST通过。覆盖个人/企业空白新建与最新资料修改、历史档案修改仍读最新、零经营月数/零负债、12.345678万元=123456.78元、原键重放/改内容换键、坏回执/版本/分页、附件授权拒绝、脱敏/完整度局部重试、失败保留旧成功结果入口、账户立即操作/无操作清空/重载及离页/迟到401。pageerror=0,console仅刻意401,未定义API=0;身份/非空/无遮罩/横溢/四截图通过。全部外部请求拦截,无实际后端或模型调用;真实失败持久化沿用0.65证据,不把本轮页面检查当正式验收。 +- HBuilderX5.26最终Android18:29:34、微信18:30:24,27页面编译成功。Number(string)不兼容Kotlin改为parseInt;初期脚本字段定位、锁定类型/自定义按钮断言、立即操作自动等待竞争、只读夹具脱敏及预览加载超时已修正,早期未完成结果不计入最终通过数。Browser plugin not available,缓存Playwright CLI,无新增依赖;共享layout既有H5类型警告保留。diff及变更文本UTF-8无BOM检查通过,保留行尾约定。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assess004-20261006/`,安全证据为 `verification.json` 与 `confirm-mobile.png`、`archive-mobile.png`、`confirm-desktop.png`、`archive-desktop.png`。`repro.js`、`verify.js` 和CLI日志含无服务器权限合成会话,不整体分享或直接复用。存储/cookies/routes清空,专用 `assess004`、`assess004-final` 浏览器已关闭,本轮5174/PID76016停止且无监听;另一项目5173/PID68536保留。未启动数据库/Redis/后端/worker,未读正式.env/连接生产/调用真实模型;后端仅只读。前端 `%SystemDrive%/`、`scripts/`、`.vite/` 及两仓库既有未提交工作保留。 +- 台账1.62/0.72,63任务/27页面不变,ASSESS-004仍开发中。真机、Safari/微信内H5、真实渠道及正式验收未覆盖;此前新增业务源码及本轮四文件仍未配套发布,不沿用历史发布授权。 +- 下一开发入口:评估新建/修改后端隔离HTTP检查。旧 `D:/AAdesk/202609/airz/tests/api_assessments.php` 在参数检查前初始化默认环境,夹具未声明inputVersion=3,不得直接运行;先适配显式隔离bootstrap、当前版本存储、子进程/本机HTTP继承及精确清理,再另建本机库/Redis和假模型。`tests/assessment_revisions.php` 已接显式report_test_bootstrap,可作版本行为回归入口。不要重复匹配/助手专项、自行正式验收、真实模型调用、部署或重新发行小程序。 + +## 新会话接续检查点:2026-10-06(PRODUCT-004后端) + +本轮完成匹配读取与产品解释在当前存储/历史版本下的后端隔离开发检查,仅修改测试脚本与夹具,未修改前后端业务源码。两仓库全部既有工作及用户既有小程序发布状态保持,本轮未正式验收、部署、提交或推送。 + +- `D:/AAdesk/202609/airz/tests/match_records.php`、`tests/product_explanations.php` 接显式 `--bootstrap=`,缺参时在框架初始化前退出;新增 `tests/match_test_fixtures.php` 复用inputVersion=3/AssessmentStore,故障注入同时更新已发布版本日志和最新镜像。双进程和新增 `tests/match_http_router.php` 继承隔离入口及随机队列,HTTP仅本机;精确清理本次账户、产品、队列,清理成功才输出PASS,异常非零。 +- 匹配238项/101次真实本机HTTP、产品解释52项,共290项通过。覆盖三态/分页/游标/鉴权/越权/非法参数/no-store/损坏快照/目录故障、个人及企业重评处理中/失败保留旧版、新版成功默认切换/旧游标继续原版、历史解释只读及无调用预留、同键HTTP重放只预留一次。解释覆盖双进程幂等、重复消费/缓存、冻结值与游标不变、脱敏/非法输出/reasonId重排、原键重放/新键重试/三次上限、租约/迟到用量/每日次数及删除记录。 +- 零候选旧夹具不适用v3资料模式,已临时给“普惠基础融资贷”加入必不满足的收入规则,验证completed的0 eligible/3 ineligible/1 unknown并finally恢复原配置。仅修正测试假设,无后端业务缺陷修复;早期未通过结果不计入最终通过数。四文件PHP7.4 lint、两缺bootstrap拒绝检查、两仓库diff及35个变更文本UTF-8无BOM检查通过。前端未变,不重复平台编译/浏览器检查,沿用0.70最终证据。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-match-backend-20261006-1791279449016/`,MySQL仅127.0.0.1:3321、Redis仅127.0.0.1:6401/DB15、模型地址127.0.0.1:1。隔离账户/产品/会话/日志均0、Redis DB15无键,专用HTTP及MySQL/Redis已停止,收尾再次核对3321/6401无监听。未读正式.env、连接生产数据库/Redis/worker或调用真实模型。安全证据为ROOT内 `verification.json`、最终 `match-final.out`/`explain-final.out`;临时bootstrap/runtime/工具文件不整体分享或直接复用,下次另建隔离环境。 +- 台账1.61/0.71,63任务/27页面不变,PRODUCT-004仍开发中、PRODUCT-005待验收。真实产品、跨浏览器/真机、生产容量和正式验收未覆盖;此前REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、REPORT-006、CHAT-004及0.70前端源码仍未配套发布,不沿用历史发布授权。前端既有 `%SystemDrive%/`、`scripts/` 和两仓库未提交工作保留。 +- 下一开发入口:ASSESS-004资料填写、确认提交与档案回显组合检查,核对个人/企业新建空白和修改最新资料、重评失败保留旧报告、金额精度、同键重放、账户变化和迟到回包。优先受控API响应;如需后端写夹具,先检查对应脚本隔离入口,另建本机库/Redis及假模型。不要重复匹配/助手专项、自行真实模型调用、正式验收、部署或重新发行小程序。 + +## 新会话接续检查点:2026-10-06(PRODUCT-004/005) + +本轮完成匹配列表、产品详情、对比的历史版本组合开发检查。保留两仓库全部既有工作,小程序既有发布状态保持,本轮未正式验收、部署、提交或推送。 + +- 修复已复现的错快照分页追加、默认入口刷新换版、换账户后旧产品解释请求/对比详情跳转。`matches.uts` 校验版本/产品快照/分组/重复ID/游标/状态/统计;解释与详情复用冻结记录核对,公共产品独立核对。列表分页失败保留首屏与原游标局部重试,对比锁定首次成功快照;三个页面操作前/可见期/迟到回包均核对账户并清旧资料。H5地址固定首次成功revisionId、分组和实际选择;选择缓存绑定版本。`compare.uts`、登录页增加resumeMatch白名单,三个入口登录后恢复同版产品/选择/栏目/来源;历史解释保持只读。 +- Chrome手机390×844、桌面1280×900共97项通过、104次全量拦截受控请求,6次合成POST(3解释、3登录)。覆盖服务坏响应、v1/零候选/零利率、冻结额度/材料与下架/unknown、旧版及新版默认回包、跨组选满三项/移除/补选/刷新/切栏、单列404/503/错快照重试、分页503/错快照/重复行原游标重试、换组迟到/换账户迟到401/立即旧动作/无操作清空、登录恢复/非法参数、解释原键重试/错快照轮询/查询恢复/次数上限及离页迟到详情。pageerror=0,console仅刻意401/404/503;身份/非空/无遮罩/横溢/截图通过。未生成真实重评任务,重评发布行为沿用0.65后端证据,不把合成回包当作真实业务验收。 +- HBuilderX5.26最终微信17:18:58、Android17:19:47编译成功,63任务/27页面不变。Browser plugin not available,缓存Playwright CLI run-code --filename,无新依赖;共享layout既有H5类型警告保留。测试脚本的require/正则分组/重复参数/按钮文案定位问题已修正,不计通过数。 +- 仓库外安全证据 `C:/Users/JUN/AppData/Local/Temp/airz-product-combo-verification.json`、`airz-product-combo-mobile.png`、`airz-product-combo-desktop.png`;临时repro/qa脚本和CLI日志含无服务权限的合成会话,不整体分享。存储/cookies/routes清空、专用浏览器关闭,本轮localhost预览停止;另一17:12:56启动的127.0.0.1:5173 Vite进程并非本轮启动命令,保留。无数据库/Redis/后端/worker/正式.env/正式连接/真实模型调用,后端源码只读。既有 `%SystemDrive%/`、`scripts/` 保留,无本轮新增未跟踪Vite缓存。 +- 台账1.60/0.70,PRODUCT-004开发中、PRODUCT-005待验收。真实产品、跨浏览器/真机与正式验收未覆盖;前轮REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、REPORT-006、CHAT-004及本轮源码仍未配套发布,不沿用历史发布授权。 +- 下一开发入口:匹配只读与产品解释后端的当前存储/历史版本隔离检查。`D:/AAdesk/202609/airz/tests/match_records.php`、`tests/product_explanations.php` 在校验参数前初始化默认环境,仍用inputVersion=2和直接修改match_result的旧夹具;先适配显式隔离bootstrap、当前AssessmentStore、子进程与HTTP路由继承及精确清理,再新建本机库/Redis和假模型。不要直接运行旧脚本、重跑助手专项、自行真实模型调用/正式验收/部署。 + +## 新会话接续检查点:2026-10-06(CHAT-004后端) + +本轮完成助手消息幂等、并发额度与历史上下文隔离开发检查,保留两仓库全部既有工作。前端源码未变,小程序已发布状态保持,本轮未正式验收、部署、提交或推送。 + +- 后端 `tests/assistant_chats.php` 改为显式 `--bootstrap=`,复用report_test_bootstrap守卫,在框架初始化前拒绝缺参;夹具采用inputVersion=3/AssessmentStore,双进程继承隔离入口、随机队列和作业文件。新增 `tests/assistant_http_router.php` 只接受本机专用标记和相同bootstrap,补PATH_INFO。失败/清理异常返回非零,清理成功才输出PASS,精确删除本次账户/产品/队列。 +- 专项165项通过:双进程同键创建/发送/失败重试、不同键互斥、重复消费、成功重放不重复预留、暂停/额度耗尽重放、助手/产品解释竞争评估剩余额度、失败和软删除日志保留额度、租约/迟到用量/分页/脱敏/金额。个人重评处理中/失败/新版成功均保留旧会话冻结收入和产品,新会话取新版本;改名/下架不改旧上下文,失效会员/删除会话的待办假调用0。18次真实本机HTTP覆盖鉴权、越权、原键重放/改文、历史预览/恢复/错版、非法数组版本、撤销Token及no-store;错误方法按既有精确路由404,无调用预留。 +- 复现并修复 `application/common/library/AssessmentStore.php` 一处问题:旧报告无待关闭解释时重写旧日志,同秒无变化UPDATE返回0被误判失败并标AI_INTERNAL。现在仅关闭旧queued/running解释时更新旧快照,其他情况保留旧行;真实故障回滚及缺失解释日志拒绝保持。报告持久化75、版本58、历史报告215项通过,加专项合计513;三个PHP7.4 lint、两仓库diff/UTF-8无BOM通过。前端未变,不重复平台编译/浏览器检查,沿用0.68最终证据。 +- 全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-assistant-backend-20261006-1791275687879/`;MySQL5.7.26仅127.0.0.1:3310/airz_product_test_1791275687879,Redis5.0.14.1仅127.0.0.1:6398/DB15,无正式.env/3306/6379/线上库/生产worker,真实模型0。初期回环认证、旧夹具断言及ROOT缺PDF依赖问题已修正,不计通过数;PDF复制现有锁定依赖/字体,无安装或模板修改。六业务表0、故障触发器0、Redis键0,库已DROP、MySQL/Redis及专用PHP正常停止,3310/6398/8098/5173无监听。 +- 安全证据为ROOT内 `verification.json`,四结果日志为 `assistant-result.log`、`persistence-result.log`、`revisions-result.log`、`history-result.log`;临时runtime/工具文件保留,不整体分享或直接复用bootstrap,下次另建隔离环境。前端 `%SystemDrive%/`、`scripts/` 及既有改动保留,本轮新增后端修复尚未上线。 +- 台账1.59/0.69,63任务/27页面不变,CHAT-004仍开发中,CHAT-001—003待验收。真实语义、供应商费用对账、生产容量及真机未覆盖;不将假模型结果记作正式验收。 +- 下一开发入口:PRODUCT-004/005匹配列表、产品详情及对比的历史/重评版本组合检查,重点分页/补选/刷新/单列失败重试、当前可用性与冻结值、账户变化及迟到回包。不要重复助手专项、自行启用真实模型、正式验收或沿用旧发布授权部署;前轮REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、REPORT-006及0.68前端源码也仍未配套发布。 + +## 新会话接续检查点:2026-10-06(CHAT-004) + +本轮完成历史版本上下文与异常会话的组合开发检查,保留两仓库全部既有工作。小程序此前已由用户发布,本轮新增源码未发行;暂不正式验收、部署、提交或推送。 + +- 修复五类问题:预览、历史恢复、创建接受错版,发送接受错误请求回执,账户切换后立即发送旧问题。`packages/finance/services/assistant.uts` 增加评估/产品/显式版本/展示ID及版本有效性校验、创建会话编号校验、发送requestId/正文/尝试序号校验;无绑定历史入口仍恢复原冻结上下文,同键重放允许更高尝试序号。`packages/finance/assistant/assistant.uvue` 发送前校验账户与页面代次,首次/已有会话发送及旧请求重试均阻止换账户后的旧内容外发。 +- Chrome手机390×844/桌面1280×900共62项通过,81次受控API请求、33次合成POST:上下文预览/创建/恢复、显式/无绑定历史、错版/回执、原键重放、429/503、断网、轮询、失败重试上限、历史分页、换账户/迟到401、立即换账户发送/重试、合成登录恢复及非法参数。页面身份/非空/无遮罩/横溢/截图通过,pageerror=0,console仅刻意429/503/401及net::ERR_FAILED;未定义请求0。全部API被拦截,本轮额度检查是提示/恢复检查,不证明后端并发额度。 +- 微信16:23:43、Android16:25:31 HBuilderX5.26最终源码编译成功,63任务/27页面不变。Browser plugin not available,使用缓存Playwright CLI的run-code --filename;共享layout既有H5类型警告保留,无新增依赖。 +- 仓库外证据为TEMP内 `airz-chat004-result.json`、`airz-chat004-mobile.png`、`airz-chat004-desktop.png`,最终脚本 `airz-chat004-qa.js`,初始复现脚本 `airz-chat004-repro.js` / `airz-chat004-switch-repro.js`。结果JSON无凭据,临时脚本/CLI日志含无服务权限的合成会话,不整体分享。存储/cookies/拦截路由清空,about:blank后关闭专用浏览器,5173停止;本轮生成的两个未跟踪Vite缓存文件已清除。未启动数据库/Redis/后端/worker,未读默认.env或连接生产,真实模型0;后端源码只读,既有 `%SystemDrive%/`、`scripts/` 保留。 +- CHAT-004仍开发中,CHAT-001—003待验收,台账1.58/0.68;真实语义、真机/跨浏览器及生产容量未覆盖。前轮REPORT-002/003/004后端、档案修复、REPORT-005微信PDF、REPORT-006及本轮源码仍未配套发布。 +- 下一开发入口:助手后端消息幂等、并发额度和历史上下文的隔离检查。旧 `D:/AAdesk/202609/airz/tests/assistant_chats.php` 会在校验参数前初始化默认环境,且夹具仍沿用旧inputVersion=2;先适配显式隔离bootstrap、当前版本存储、并发子进程与精确清理,再使用新建本机库/Redis及假模型,不直接运行旧脚本,不自行真实模型调用、正式验收或沿用历史授权发布。 + +## 新会话接续检查点:2026-10-06(REPORT-006) + +本轮完成行动页与报告可用性组合开发检查,保留两仓库全部既有工作。小程序此前已由用户发布,本轮源码未发行;暂不正式验收、部署、提交或推送。 + +- 修改 `packages/finance/next-step/next-step.uvue`:增加报告版本及重评处理中/失败/已有新版提示;v1旧版和v2无产品匹配结果时将入口改为“查看准备说明”,明确暂不提供产品材料。既有冻结版本与产品当前可用性守卫继续生效,不重算历史。 +- Chrome手机390×844/桌面1280×900共38项通过:个人/企业历史与当前版、处理中/失败、v1/无匹配、冻结材料、下架/未知/不符/待核实、错版/错快照、无报告/404/409、账户切换/迟到响应及合成登录恢复。报告与AI入口/请求保留同版revisionId=72;优化进入editId=45并回填最新资料,无新建/自动提交。页面非空、身份/遮罩/横溢/截图通过,pageerror=0、console仅刻意404/409,无未定义请求。全部API为受控合成响应,仅GET及一次合成登录POST,不连接实际后端或调用模型。 +- 微信15:57:28、Android15:58:55 HBuilderX5.26编译成功;63任务/27页面不变。Browser plugin not available,使用缓存Playwright CLI的run-code --filename;前期测试长参数/同页hash/onLoad/locator问题已修正,不计入业务通过。共享layout既有H5类型警告保留。 +- 证据为TEMP内 `airz-report006-verification.json`、`airz-report006-20261006-processing-mobile.png`、`airz-report006-20261006-actions-desktop.png`;临时脚本 `airz-report006-boundaries.js`,本轮CLI日志/快照移至 `airz-report006-cli-artifacts/`。含无服务权限的合成会话,不整体分享;浏览器存储/路由清空、专用浏览器关闭、5173停止。未启动数据库/Redis/后端/worker,未读取默认.env或连接生产;既有 `%SystemDrive%/` 和 `scripts/` 保留。 +- REPORT-006待验收状态保持,台账1.57/0.67。真机、跨浏览器、真实产品材料/办理渠道及正式业务验收未覆盖;前轮REPORT-002/003/004后端、档案修复、REPORT-005微信PDF及本轮源码仍未配套发布。 +- 下一开发入口:CHAT-004历史版本上下文与异常会话组合检查,核对预览/创建/历史恢复绑定、账户变化/迟到响应及失败重试/额度错误。继续使用隔离数据和假模型,不自行正式验收、收费模型调用或复用历史发布授权。 + +## 新会话接续检查点:2026-10-06(REPORT-005) + +本轮修复用户反馈的小程序“当前客户端暂未开放PDF下载”,并完成导出边界开发检查。保留两仓库及REPORT-002/003/004全部未提交工作;小程序此前已由用户发布,本轮新增源码尚未发行,暂不正式验收、提交/推送或部署。 + +- 前端 `packages/finance/services/report-export.uts` 新增MP-WEIXIN分支:HTTPS下载、本账户Bearer请求头、显式revisionId、PDF MIME/头尾/长度/20 MiB校验,下载后打开系统PDF预览并显示保存/转发菜单。下载中取消abort且清理迟到文件,旧401不清新账户、账户变化不打开旧文件;预览接管后保留临时文件,返回小程序或下次导出清理,删除失败重试。不调用saveFile,不把Token放URL或文件名;报告和行动页共用组件。 +- H5补显式版本编号、未压缩Content-Length与实际长度一致性及空响应防护。其他原生端/微信内H5的既有提示保持;本轮无后端/数据库变更。 +- 新增 `scripts/test-report-export.cjs`,先用HBuilderX编译微信,再执行 `D:/Develop/nvm/nodejs/node.exe scripts/test-report-export.cjs`;实际微信产物38项隔离API检查通过,无网络/数据库。微信14:41:30、Android14:36:23编译成功,脚本语法及diff检查通过。 +- Chrome手机390×844/桌面1280×900,实际报告页6项、H5服务边界17项通过;503保留报告并重试实际下载,鉴权/版本绑定及错误文件不下载。全部页面API为合成响应,边界fake fetch,无真实后端联调;pageerror=0、准备阶段console为空,业务console仅刻意503。首次裸UTS导入为测试路径错误,改 `?import` 后通过。Browser plugin not available,复用缓存Playwright。本轮PDF仅头尾标志夹具,未验证实际内容渲染;中文分页证据沿用0.65与6.21,不重复宣称本轮真机验证。 +- ROOT `C:/Users/JUN/AppData/Local/Temp/airz-pdf-weixin-1791268574971/`:无凭据 `verification.json` 及截图 `h5-download-mobile.png`、`h5-download-desktop.png`。浏览器存储清空/route撤销/关闭,前台5173预览停止;未启动数据库、Redis、后端或worker,未读取默认.env、连接线上或调用模型。临时工具文件包含无服务器权限合成会话,不整体分享;前端未跟踪 `%SystemDrive%/` 继续保留。 +- 发布前在微信后台单独配置downloadFile合法域名 `https://airz.hqling.cloud`,request合法域名不能替代;本轮未修改后台,用户需重新编译发行小程序。微信系统预览、保存/转发、真机域名及生产并发/容量仍未验证。REPORT-005待验收状态保持,当前台账1.56/0.66,63任务/27页面不变。 +- 下一开发入口为REPORT-006行动页与报告可用性组合检查,关注处理中/失败/历史版本、行动入口的版本上下文和账户变化;不重复实施微信PDF,不自行真实模型调用、正式验收或沿用历史授权部署。前轮REPORT-002/003/004后端及档案修复也仍未上线。 + +## 新会话接续检查点:2026-10-06(REPORT-004) + +本轮完成历史报告与重评组合开发检查,保留两仓库及REPORT-002/003全部未提交工作。小程序已由用户发布,暂不正式验收、不重复发行;本轮没有生产部署、提交或推送。 + +- 后端修复 `D:/AAdesk/202609/airz/application/api/controller/v1/Assessments.php` 的 `revisionId` 原始类型读取,非法数组统一返回404/REVISION_NOT_FOUND,不再由框架强转导致500;越权仍优先404/ASSESSMENT_NOT_FOUND。 +- 前端修复 `packages/finance/services/records.uts`:档案详情核对评估ID和显式版本,完整度核对显式版本。实际受控错版回包已复现并修复,错误不会展示另一版收入/完整度,重新加载和局部重试恢复正确资料。 +- 新增后端 `tests/report_history.php`、`tests/report_history_http_router.php`,必须显式隔离bootstrap;个人/企业初版成功、重评排队/失败/重试/新版成功、旧版显式读取、报告/匹配/PDF同版、冻结产品不变、历史解释只读、游标版本、v1兼容、匿名/越权/非法版本、引擎503与撤销Token401共215项通过。`assessment_revisions.php` 适配显式bootstrap、并发子进程及精确清理,58项通过,合计273项PHP检查;四个本轮PHP文件7.4 lint与diff检查通过。 +- Chrome手机390×844/桌面1280×900共32项、82次隔离GET请求通过,全部API转发本机8098,三类错版用受控响应注入。三栏/完整匹配列表/详情、失败与处理中旧报告、新版默认与历史深链、只读解释和三次PDF下载通过;pageerror/console error/warn均0。13文件PDF收入/序号/冻结名称/身份脱敏52项检查通过,个人历史8页、企业新版3页Poppler渲染核对;未改导出模板。微信10:08:29、Android10:08:53 HBuilderX5.26本地编译成功,27页/63任务不变。Browser plugin not available,沿用缓存Playwright;真机/跨浏览器/正式模型未验证。 +- 隔离ROOT `C:/Users/JUN/AppData/Local/Temp/airz-report004-20261006-1791251466341/`;MySQL5.7.26在3310随机库 `airz_product_test_1791251466341`、Redis5.0.14.1在6398/DB15。未加载正式.env、未连正式3306/6379/线上/生产worker,模型外呼0。六业务表0、故障触发器0、Redis键0,库已DROP,MySQL/Redis正常停止,8098 PHP停止,浏览器存储清空并关闭。后台常驻H5预览启动被自动审批 `blocked by policy` 拒绝,未提供更具体原因,未重试/绕过;5173也已停止。 +- 安全证据:ROOT内 `verification.json`、`cleanup-result.json`、`ui-result.json`、`pdf-verification.json`;截图 `archive-mismatch-fixed-mobile.png`、`historical-matches-desktop.png`、`historical-personal-product.png` 等。fixture和浏览器日志可能含已撤销的合成Token,不整体共享或重启bootstrap,后续另建隔离环境;前端未跟踪 `%SystemDrive%/` 继续保留。 +- REPORT-004整体仍开发中,本轮三处修复尚未上线;真实产品、外部查询、人工业务签收及正式验收状态不变。下一开发项为REPORT-005 PDF导出边界与容量检查,优先异常二进制、超限、取消/离页、登录状态变化和分页可读性;不要重复REPORT-004组合检查、自行真实模型调用或沿用历史授权部署。 + +## 新会话接续检查点:2026-10-06(REPORT-003) + +本轮继续完成报告持久化开发检查,保留前轮REPORT-002及当前两仓库全部未提交工作。小程序已由用户发布,暂不正式验收、重复发行、部署、提交或推送。 + +- 后端实现:`D:/AAdesk/202609/airz/application/common/library/Assessment.php`、`AssessmentStore.php` 与 `AnalysisTasks.php` 将报告、匹配、当前/历史输入快照、旧解释关闭、发布指针与result_version同事务保存;真实写故障全部回滚,缺失旧解释日志安全失败,迟到结果只记原用量。新建门槛仍inputVersion=3,v1报告与旧冻结v2继续兼容。 +- 新增 `tests/report_persistence.php`(75项)与 `tests/report_test_bootstrap.php`(必须显式隔离bootstrap,限制本机测试库、非正式端口及禁用的模型地址)。覆盖版本兼容、快照/模型事实复用、产品硬规则和当前配置变化、三态/null持久化、损坏哈希、四处真实SQL故障回滚、旧queued/running解释日志缺失、正常重评关闭旧解释及迟到任务保护。 +- 旧回归已适配当前存储:`assessment_readiness.php`、`product_matching_tasks.php`、`assessment_demand_router.php` 显式隔离加载;`readiness_fixtures.php` 在测试内构造历史v2需求及策略,不通过生产接口新建v2。准备度/报告58项、匹配19项、任务36项,加专项共188项通过;10个PHP文件7.4 lint与diff检查通过,模型外呼0。 +- 全新ROOT `C:/Users/JUN/AppData/Local/Temp/airz-report003-20261006-1791249639741/`,MySQL5.7.26在3310随机库 `airz_product_test_1791249639742`、Redis5.0.14.1在6398/DB15;未加载正式.env、未连正式3306/6379或线上/生产worker。六业务表已为0、故障触发器0、Redis键0,测试库已DROP,两个测试服务已正常停止;安全证据为ROOT内 `verification.json`。临时目录保留,不整体共享或直接重启bootstrap;下一轮另建隔离环境。 +- 状态:自填报告/演示产品支线已实现,REPORT-003持久化本地检查完成;完整任务仍阻塞于真实产品、外部查询、人工业务规则签收及生产容量/守护,不能标整体验收完成。前端源码本轮未变,不重复小程序或Android编译。 +- 下一开发项:REPORT-004历史报告与重评组合流程,优先检查重评处理中/失败保留旧结果、本人历史版本与匹配/PDF版本一致性,再按问题做最小修复。不要重复实施REPORT-003或运行旧版默认配置脚本,不自行启用真实模型或安排正式验收/生产发布。 + +## 新会话接续检查点:2026-10-06(REPORT-002) + +本轮继续开发后端异步任务与补偿链,暂不正式验收、部署、提交或推送;小程序已由用户自行发布,本轮不重复处理移动端发行。 + +- 后端改动:`D:/AAdesk/202609/airz/application/common/library/AnalysisTasks.php` 加强合法 `task_id`、租约和补偿判断。非法/缺失任务ID不投递、不执行;异常运行任务明确失败为 `AI_TASK_INTERRUPTED`;失败日志按当前合法任务ID精确更新;未来有效租约不被恢复器误失败;queued 漏投仍补投且不增加尝试次数;迟到结果只补记原调用用量。 +- 测试改动:`D:/AAdesk/202609/airz/tests/analysis_tasks.php` 必须传入显式隔离 `--bootstrap`,并改用当前 `fa_ai_chat`/`AssessmentStore` 读取状态;夹具使用 `inputVersion=3`,本轮测试显式把报告目标设为v1,只检查调度、租约、重试、Redis和日志边界。 +- 验证:两个PHP文件7.4 lint通过;独立隔离 MySQL `127.0.0.1:3310/airz_product_test_2026100602` 与 Redis `127.0.0.1:6398`/DB15 中,模型关闭、假客户端回归 `PASS: 36 analysis task checks.`。覆盖并发重试/消费者、过期/缺失租约、非法任务ID、迟到结果、Redis断开补投和历史日志保护。回归后已停止3310/6398隔离服务。 +- 边界:未读取或连接默认 `.env`、正式3306/6379、线上数据库或生产worker;未做真实模型、v2报告语义、生产守护/容量验收。临时ROOT含测试数据和日志,不整体共享或直接复用。 +- 当前状态:REPORT-002整体仍开发中,新增代码和测试均未提交/推送;下一开发项优先为REPORT-003报告生成与持久化,继续保留v1历史兼容并单独验证v2策略/产品快照。 ## 新会话接续检查点:2026-10-05 diff --git a/packages/account/change-phone/change-phone.uvue b/packages/account/change-phone/change-phone.uvue index 7926bc2..b54d418 100644 --- a/packages/account/change-phone/change-phone.uvue +++ b/packages/account/change-phone/change-phone.uvue @@ -2,8 +2,8 @@