QA验收 #29
open旧会议、话题及专家关系增量同步
Added by Redmine Admin 15 days ago. Updated 9 days ago.
0%
Description
旧会议、话题及专家关系增量同步。主任务01a17c72-3172-74a1-94e2-c7ad3c8f20a7,唯一索引outputs/legacy-catalog-sync-20261027/index.md,QA最小影响矩阵qa-matrix.md。
本次用户已授权立即同步生产catalog缺口,Ops唯一生产DB写入负责人,QA仅独立审阅源收据,不直接查询DB/业务接口或重复全库扫描。无业务源码/分支/Git/部署变更,不新建Candidate、Task/Cost/Invoice/Payment或外发。
候选:旧会议73/74、话题163–170、必要项目及2附件;专家旧新ID不可等同。历史48会议专家关系因Task强制依赖暂不自动补建,话题10关系缺口9专家需身份/许可/黑名单确认。确切新增数量与关联以本批冻结plan为准。
CAT-01正文/时间/状态/来源映射;CAT-02附件归属/字节/引用;CAT-03跨库专家身份与关系;CAT-04平台可见性/角色/黑名单;CAT-05ledger幂等及只读重入;CAT-06既有数据保护;CAT-07无Task/财务/通知等副作用。后续逐例状态及证据按逻辑批次追加并全文读回,仅使用本记录及其子项,不修改历史工单。
当前阶段仅准备:只读canonical预检通过,preview/b5714bda工作区干净,已读取meetings/models.py和历史catalog报告。实际业务执行0、验收Pass0,Backend报告和Ops plan/dryrun待落盘;不得把历史clone/生产通过提升为本轮通过。原受限材料保存在主线程规定目录,Redmine只记非秘密ID/数量/摘要。
Files
| results.md (12.6 KB) results.md | Redmine Admin, 11/01/2026 02:32 PM | ||
| results-ledger.json (12.6 KB) results-ledger.json | Redmine Admin, 11/01/2026 02:32 PM | ||
| pg-http-results-r1.json (4.34 KB) pg-http-results-r1.json | Redmine Admin, 11/01/2026 02:32 PM | ||
| r2-results.json (4.72 KB) r2-results.json | Redmine Admin, 11/01/2026 02:32 PM | ||
| final-candidate-check.json (3.51 KB) final-candidate-check.json | Redmine Admin, 11/01/2026 02:32 PM | ||
| candidate-runtime-receipt.json (741 Bytes) candidate-runtime-receipt.json | Redmine Admin, 11/01/2026 02:32 PM | ||
| wechat-native-cards.png (443 KB) wechat-native-cards.png | Redmine Admin, 11/01/2026 02:32 PM | ||
| h5-mobile-two.png (24.7 KB) h5-mobile-two.png | Redmine Admin, 11/01/2026 02:32 PM | ||
| h5-mobile-error-clear.png (10.3 KB) h5-mobile-error-clear.png | Redmine Admin, 11/01/2026 02:32 PM | ||
| supplement-results.md (5.23 KB) supplement-results.md | Redmine Admin, 11/01/2026 02:40 PM | ||
| supplement-api.json (1.17 KB) supplement-api.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| supplement-http.jsonl (1.87 KB) supplement-http.jsonl | Redmine Admin, 11/01/2026 02:40 PM | ||
| supplement-cleanup.json (660 Bytes) supplement-cleanup.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| supplement-candidate-check.json (2.45 KB) supplement-candidate-check.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| wechat-coexist-interaction.json (393 Bytes) wechat-coexist-interaction.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| native-retry-service.json (390 Bytes) native-retry-service.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| native-retry-http-error.json (314 Bytes) native-retry-http-error.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| native-retry-ui-recovery.json (357 Bytes) native-retry-ui-recovery.json | Redmine Admin, 11/01/2026 02:40 PM | ||
| wechat-coexist.png (250 KB) wechat-coexist.png | Redmine Admin, 11/01/2026 02:40 PM | ||
| wechat-native-upstream-error.png (193 KB) wechat-native-upstream-error.png | Redmine Admin, 11/01/2026 02:40 PM | ||
| wechat-native-retry-recovered.png (252 KB) wechat-native-retry-recovered.png | Redmine Admin, 11/01/2026 02:40 PM | ||
| results.md (10.3 KB) results.md | Redmine Admin, 11/01/2026 03:49 PM | ||
| results-ledger.json (10.1 KB) results-ledger.json | Redmine Admin, 11/01/2026 03:49 PM | ||
| evidence-bundle.json (6.54 KB) evidence-bundle.json | Redmine Admin, 11/01/2026 03:49 PM | ||
| final-candidate-check.json (5.14 KB) final-candidate-check.json | Redmine Admin, 11/01/2026 03:49 PM | ||
| supplement-cleanup.json (654 Bytes) supplement-cleanup.json | Redmine Admin, 11/01/2026 03:49 PM | ||
| network.jsonl (13.7 KB) network.jsonl | Redmine Admin, 11/01/2026 03:49 PM | ||
| wechat-list-mixed.png (297 KB) wechat-list-mixed.png | Redmine Admin, 11/01/2026 03:49 PM | ||
| wechat-list-real503.png (285 KB) wechat-list-real503.png | Redmine Admin, 11/01/2026 03:49 PM | ||
| wechat-list-retry-recovered.png (298 KB) wechat-list-retry-recovered.png | Redmine Admin, 11/01/2026 03:49 PM | ||
| h5-list-mixed.png (61 KB) h5-list-mixed.png | Redmine Admin, 11/01/2026 03:49 PM | ||
| gather-real503.png (85.6 KB) gather-real503.png | Redmine Admin, 11/01/2026 03:49 PM | ||
| support-corrections.md (1.25 KB) support-corrections.md | Redmine Admin, 11/01/2026 03:49 PM | ||
| r2-results.md (5.8 KB) r2-results.md | Redmine Admin, 11/01/2026 04:02 PM | ||
| r2-evidence-bundle.json (2.87 KB) r2-evidence-bundle.json | Redmine Admin, 11/01/2026 04:02 PM | ||
| session-supplement-findings.json (1.6 KB) session-supplement-findings.json | Redmine Admin, 11/01/2026 04:02 PM | ||
| topic-http.jsonl (7.05 KB) topic-http.jsonl | Redmine Admin, 11/01/2026 04:02 PM | ||
| topic-cleanup.json (659 Bytes) topic-cleanup.json | Redmine Admin, 11/01/2026 04:02 PM | ||
| r2-final-candidate-check.json (3.71 KB) r2-final-candidate-check.json | Redmine Admin, 11/01/2026 04:02 PM | ||
| wechat-topic-list-r2.png (245 KB) wechat-topic-list-r2.png | Redmine Admin, 11/01/2026 04:02 PM | ||
| wechat-topic-detail-r2.png (240 KB) wechat-topic-detail-r2.png | Redmine Admin, 11/01/2026 04:02 PM | ||
| wechat-topic-real503-r2.png (234 KB) wechat-topic-real503-r2.png | Redmine Admin, 11/01/2026 04:02 PM | ||
| wechat-topic-recovered-r2.png (240 KB) wechat-topic-recovered-r2.png | Redmine Admin, 11/01/2026 04:02 PM | ||
| wechat-topic-404-r2.png (181 KB) wechat-topic-404-r2.png | Redmine Admin, 11/01/2026 04:02 PM | ||
| receipt-review.md (7.36 KB) receipt-review.md | Redmine Admin, 11/01/2026 05:26 PM | ||
| review-results.json (6.57 KB) review-results.json | Redmine Admin, 11/01/2026 05:26 PM |
RA Updated by Redmine Admin 15 days ago Actions #1
旧catalog:准备阶段独立审阅¶
2026-10-27。专属Redmine #29,当前仅准备;QA未运行工具、DB、API或浏览器。此报告审阅本地Backend报告、Ops计划构建源码及必要模型/投影代码,不是生产执行结果。
Backend报告与静态交叉核对¶
已读取backend-review.md;当前源码models.py的MeetingExpert.task为必填一对一,TopicExpert依赖PublicExpertProfile。public_experts.py及Topic预取确实将话题专家展示绑定到同应用、WECHAT_MINI_APP许可、Profile published/时间及黑名单排除;普通导入命令会删除再重建TopicExpert。这支持Backend的下列边界:
- 旧public=0不是禁止原话题/会议关联展示的证据;其旧代码语义由Backend报告提供,QA未重新读取全部旧Nest源码,也未读取专家PII。因此不能以public=0自动拒迁,也不能据旧关联推导独立目录许可。
- 当前没有“仅原内容展示、独立目录/详情/申请不开放”的纯数据路径是代码事实;但用户最新已明确允许5位在身份核验后公开,且只用旧公开信息。此前“不得增加这5人平台许可”的未授权边界被本次具体授权覆盖,不重复申请。授权不等于整档案公开,也不扩大到其他专家/其他app。
- 已读Backend追加的最终受限文本语义复核:65→356837、66→428566、67→572777、82→204554、99→457736为5强映射,覆盖6关系;保留源版本年份差异、不改主档。其余59/84/86/87四人四关系未确认。正式写前仍需Ops新鲜有效性、同人黑名单和漂移guard。QA只消费脱敏比较证据,不声称亲自完成所有PII比对。
- 不走会覆盖现有34条关系/更新Profile默认值的整包import_content_catalog。若后续有可写子集,必须按application+旧topic来源键解析目标、精确增补关系且保留原字段/顺序;同人多话题display_name差异目前无关系级字段,不能改全局姓名假装保真。
- 48条历史会议专家关系保持本轮不自动恢复,不能调用会造应付Task的add_expert或复用无关Task。新增会议73/74与话题163–170源专家关系为0,不推配专家。
Backend报告有“49个Profile”陈述,当前共享index基线为68。QA不以旧49覆盖当前68;冻结Ops摘要须说明计数口径/快照,避免把历史获grant49、源公开资料数与当前Profile总数混用。此项是基线证据待对齐,不代表已发现数据库错写。
Ops计划构建源码审阅¶
已读取ops-build-plan.cjs与ops-extract.cjs相关字段。仅有计划构建器,未运行;尚无QA可消费的正式脱敏plan/dryrun/执行收据。
- 构建器预期2Project+2Meeting+8Topic+2Content=14实体及14ledger/1run;明确executable=false、noExistingRowUpdate/noPlatformGrant,专家写集合为空。这是计划常量,不能当实际源行计数或创建结果。
- app/来源ledger、旧项目code冲突、Meeting发布/类型/删除/时间顺序以及新增记录无专家/话题会议关系有前置guard。附件构建要求实际HTTP PDF/size并计算SHA;QA未执行这些下载,必须等Ops原probe收据。
- 时区规则明确标primary review required,按旧naive墙钟+08生成,不以MySQL epoch差8小时自行修正;须在冻结plan中绑定解释,并提交后按当前serializer证实返回语义。
- join_url目前直接取源meeting字段,未在构建器里显示HTTP URL检查。冻结输入需证明值为有效HTTP(S),否则按历史normalizer规则留空并记录JOIN_LINK_UNPROVEN,不能把整段会议邀请文字直接当URL。
- Content.published_at使用本批referenceTime。历史最终文件方案采用“NEW_PLATFORM_OPERATION_TIME_NOT_HISTORICAL”,所以本身不自动判错;本批必须明确同样语义/绑定固定操作时刻,不能称为保持历史发布时间。Topic则应保持源publish_at,二者不得混用。
- 当前prohibitedTables列表不是实际写保护证明。正式SQL/事务必须明确候选写表/新增行/既有行前后保护,以及Task/财务/平台/黑名单相关对象无变化;需要后验收据,不凭配置标志判Pass。
下一步及当前结果¶
待主线程/Ops提供:固定候选/源与目标身份、脱敏冻结plan及hash、时间/URL/Content发布时间解释、只读dryrun、保护与提交后验、只读重入规划。涉及专家补缺的未满足身份/展示范围应单列,不阻止有完整守卫的2会议/8话题子包独立审查,也不把子包完成说成专家缺口全完成。
本轮实际业务执行0,正式用例Pass0;CAT-01~07仅计划,未伪记Blocked/Pass计数。QA仅创建新工单及qa-*准备文件、共享index的QA行;未改历史工单、凭据、业务源码或生产数据。
已落盘14实体plan独立读取¶
已在本机受限目录读取ops-catalog-plan.json并仅输出ID/数量/摘要;目录0700、文件0600。sourceFileSha与实际源文件字节hash、targetPreflightSha与目标前像文件字节hash均匹配。候选为project327/328、meeting73/74、topic163–170、conference_file125/126两Content,合计14,预期ledger14/run1。executable=false,尚非可执行生产授权产物。
会议时间分别2026-10-16和10-21的15:00–16:00+08;两join_url实际均空,构建器直接复制字段的风险在本批值上未触发。Content发布时间等于固定referenceTime,明确是新平台操作时刻,不能对外称保持旧发布时间。附件各1条并带SHA;Opsprobe由其提供,QA未重新下载文件。
当前14实体plan noPlatformGrant=true、无Profile/专家关系,适合独立catalog子包;不能作为后续5专家+6关系的许可/白名单/跨app影响证据。ops-dryrun.cjs已读,计划采用READ ONLY快照与collision guard,但脚本本身不证明实际dryrun通过;仍待落盘原收据。其既有approved49常量不代表本次5人获准名单,14实体无Profile时不触此新增权限,后续专家包必须用精确5人候选契约。
公开白名单优先审查¶
QA直接读取旧consultant.entity.ts及topic.service.ts:name/first_name/last_name/company/position/background是database组,email/mobile/telephone/wechat被Exclude;旧公开称呼是nickname,关系非空display_name通过pickBy覆盖nickname。新PublicExpertProfileSerializer只输出Profile字段;TopicSerializer只有公司/职位/背景3个关系覆盖,未看到Candidate回退,因此数据装载时的字段来源白名单是关键门禁。
- 新5Profile.display_name只能来自旧公开nickname或获核对的原话题display_name,不得fallback到旧consultant.name或NDB姓名。公司/职位/背景同理仅旧display_*或关系快照,不能从旧database组/NDB履历补全。
- share_topics/tags/头像/行业等也须逐字段证明旧公开来源;当前缺nickname/share_topic/tags提取时不能先用内部字段替代,缺失留空/待补。
- 同一专家多话题显示名可能不同,TopicExpert无display_name字段;必须比较6关系名称与拟全局Profile.display_name,若不一致须保留差异/缺口,不以一个关系名覆盖所有展示后称完全保真。
- public_platforms为Candidate全局字段。正式增量前需列5人在所有app的Profile及其状态/发布时间/门禁,防止给app1加平台后间接开放其他app已发布资料。5个Candidate全局字段外的列不改,既有平台集合保留,未批准对象不变。
这些是已获授权包的精确安全条件,不是要求再次批准5人公开;当前仍不执行任何DB或业务请求。
RA Updated by Redmine Admin 15 days ago Actions #2
旧catalog:准备阶段独立审阅¶
2026-10-27。专属Redmine #29,当前仅准备;QA未运行工具、DB、API或浏览器。此报告审阅本地Backend报告、Ops计划构建源码及必要模型/投影代码,不是生产执行结果。
Backend报告与静态交叉核对¶
已读取backend-review.md;当前源码models.py的MeetingExpert.task为必填一对一,TopicExpert依赖PublicExpertProfile。public_experts.py及Topic预取确实将话题专家展示绑定到同应用、WECHAT_MINI_APP许可、Profile published/时间及黑名单排除;普通导入命令会删除再重建TopicExpert。这支持Backend的下列边界:
- 旧public=0不是禁止原话题/会议关联展示的证据;其旧代码语义由Backend报告提供,QA未重新读取全部旧Nest源码,也未读取专家PII。因此不能以public=0自动拒迁,也不能据旧关联推导独立目录许可。
- 当前没有“仅原内容展示、独立目录/详情/申请不开放”的纯数据路径是代码事实;但用户最新已明确允许5位在身份核验后公开,且只用旧公开信息。此前“不得增加这5人平台许可”的未授权边界被本次具体授权覆盖,不重复申请。授权不等于整档案公开,也不扩大到其他专家/其他app。
- 已读Backend追加的最终受限文本语义复核:65→356837、66→428566、67→572777、82→204554、99→457736为5强映射,覆盖6关系;保留源版本年份差异、不改主档。其余59/84/86/87四人四关系未确认。正式写前仍需Ops新鲜有效性、同人黑名单和漂移guard。QA只消费脱敏比较证据,不声称亲自完成所有PII比对。
- 不走会覆盖现有34条关系/更新Profile默认值的整包import_content_catalog。若后续有可写子集,必须按application+旧topic来源键解析目标、精确增补关系且保留原字段/顺序;同人多话题display_name差异目前无关系级字段,不能改全局姓名假装保真。
- 48条历史会议专家关系保持本轮不自动恢复,不能调用会造应付Task的add_expert或复用无关Task。新增会议73/74与话题163–170源专家关系为0,不推配专家。
Backend报告有“49个Profile”陈述,当前共享index基线为68。QA不以旧49覆盖当前68;冻结Ops摘要须说明计数口径/快照,避免把历史获grant49、源公开资料数与当前Profile总数混用。此项是基线证据待对齐,不代表已发现数据库错写。
主线程随后已明确:68为全库当前Profile,49为旧namespace范围,计数差异已按scope解释,非当前阻断。
Ops计划构建源码审阅¶
已读取ops-build-plan.cjs与ops-extract.cjs相关字段。仅有计划构建器,未运行;尚无QA可消费的正式脱敏plan/dryrun/执行收据。
- 构建器预期2Project+2Meeting+8Topic+2Content=14实体及14ledger/1run;明确executable=false、noExistingRowUpdate/noPlatformGrant,专家写集合为空。这是计划常量,不能当实际源行计数或创建结果。
- app/来源ledger、旧项目code冲突、Meeting发布/类型/删除/时间顺序以及新增记录无专家/话题会议关系有前置guard。附件构建要求实际HTTP PDF/size并计算SHA;QA未执行这些下载,必须等Ops原probe收据。
- 时区规则明确标primary review required,按旧naive墙钟+08生成,不以MySQL epoch差8小时自行修正;须在冻结plan中绑定解释,并提交后按当前serializer证实返回语义。
- join_url目前直接取源meeting字段,未在构建器里显示HTTP URL检查。冻结输入需证明值为有效HTTP(S),否则按历史normalizer规则留空并记录JOIN_LINK_UNPROVEN,不能把整段会议邀请文字直接当URL。
- Content.published_at使用本批referenceTime。历史最终文件方案采用“NEW_PLATFORM_OPERATION_TIME_NOT_HISTORICAL”,所以本身不自动判错;本批必须明确同样语义/绑定固定操作时刻,不能称为保持历史发布时间。Topic则应保持源publish_at,二者不得混用。
- 当前prohibitedTables列表不是实际写保护证明。正式SQL/事务必须明确候选写表/新增行/既有行前后保护,以及Task/财务/平台/黑名单相关对象无变化;需要后验收据,不凭配置标志判Pass。
下一步及当前结果¶
待主线程/Ops提供:固定候选/源与目标身份、脱敏冻结plan及hash、时间/URL/Content发布时间解释、只读dryrun、保护与提交后验、只读重入规划。涉及专家补缺的未满足身份/展示范围应单列,不阻止有完整守卫的2会议/8话题子包独立审查,也不把子包完成说成专家缺口全完成。
本轮实际业务执行0,正式用例Pass0;CAT-01~07仅计划,未伪记Blocked/Pass计数。QA仅创建新工单及qa-*准备文件、共享index的QA行;未改历史工单、凭据、业务源码或生产数据。
已落盘14实体plan独立读取¶
已在本机受限目录读取ops-catalog-plan.json并仅输出ID/数量/摘要;目录0700、文件0600。sourceFileSha与实际源文件字节hash、targetPreflightSha与目标前像文件字节hash均匹配。候选为project327/328、meeting73/74、topic163–170、conference_file125/126两Content,合计14,预期ledger14/run1。executable=false,尚非可执行生产授权产物。
会议时间分别2026-10-16和10-21的15:00–16:00+08;两join_url实际均空,构建器直接复制字段的风险在本批值上未触发。Content发布时间等于固定referenceTime,明确是新平台操作时刻,不能对外称保持旧发布时间。附件各1条并带SHA;Opsprobe由其提供,QA未重新下载文件。
当前14实体plan noPlatformGrant=true、无Profile/专家关系,适合独立catalog子包;不能作为后续5专家+6关系的许可/白名单/跨app影响证据。ops-dryrun.cjs已读,计划采用READ ONLY快照与collision guard,但脚本本身不证明实际dryrun通过;仍待落盘原收据。其既有approved49常量不代表本次5人获准名单,14实体无Profile时不触此新增权限,后续专家包必须用精确5人候选契约。
公开白名单优先审查¶
QA直接读取旧consultant.entity.ts及topic.service.ts:name/first_name/last_name/company/position/background是database组,email/mobile/telephone/wechat被Exclude;旧公开称呼是nickname,关系非空display_name通过pickBy覆盖nickname。新PublicExpertProfileSerializer只输出Profile字段;TopicSerializer只有公司/职位/背景3个关系覆盖,未看到Candidate回退,因此数据装载时的字段来源白名单是关键门禁。
- 新5Profile.display_name只能来自旧公开nickname或获核对的原话题display_name,不得fallback到旧consultant.name或NDB姓名。公司/职位/背景同理仅旧display_*或关系快照,不能从旧database组/NDB履历补全。
- share_topics/tags/头像/行业等也须逐字段证明旧公开来源;当前缺nickname/share_topic/tags提取时不能先用内部字段替代,缺失留空/待补。
- 同一专家多话题显示名可能不同,TopicExpert无display_name字段;必须比较6关系名称与拟全局Profile.display_name,若不一致须保留差异/缺口,不以一个关系名覆盖所有展示后称完全保真。
- public_platforms为Candidate全局字段。正式增量前需列5人在所有app的Profile及其状态/发布时间/门禁,防止给app1加平台后间接开放其他app已发布资料。5个Candidate全局字段外的列不改,既有平台集合保留,未批准对象不变。
这些是已获授权包的精确安全条件,不是要求再次批准5人公开;当前仍不执行任何DB或业务请求。
主线程已接受项及最新冻结缺口¶
主线程接受本批墙钟+08映射(73为10月16日15:00–16:00、74为10月21日15:00–16:00),也接受Content referenceTime作为新平台操作时间。两join_url在实际冻结plan均空,不存在邀请整段当链接的当前问题。上述项不再反复作为待授权门禁。
已读取Ops真实只读dryrun:planFileSha256与冻结plan实际字节匹配,transactionReadOnly=true、rolledBack=true、业务/ledger写0,offline校验通过,五类collision全0、目标触发器0。当前基线Meeting64/Topic163/Content63/Project2371/ledger484/run1,保护计数Task6448/Cost6590/Profile68/MeetingExpert0。Candidate373569较早target前像373568多1,说明准备期间库并非全局静止;不归因本批(dryrun写0),执行保护须绑定fresh dryrun基线,不宣称旧全库始终无变化。
需在冻结可执行plan前补齐:行业引用。 源会议73/74均industry_id102、关联行业名称非空;实际目标Meeting refs.industry=null,且Meeting没有文本行业字段保留该值。8Topic保留industry文本但其refs.industry也为null,公开industry_id/行业筛选因此未保真。要求Ops按目标Industries确切映射补plan/dryrun,或主线程明确接受本批行业引用缺口;不能以整体实体数通过掩盖字段丢失。QA不自行查询DB或改plan。
最少冻结/后验清单:outputs/legacy-catalog-sync-20261027/qa-catalog-freeze-requirements.md。当前本批行业引用缺口待处置,未执行生产。
RA Updated by Redmine Admin 15 days ago Actions #3
catalog执行器首写前独立审阅¶
2026-10-27,Redmine#29。只读检查当前本地脚本/受限冻结计划、SQL和Ops源收据,未运行执行器、未连接DB/API。当前结论:按主线程已接受的行业映射缺口,本精确14实体catalog首写可放;ledger兼容修正已关闭。不是生产已执行/验收完成。
精确绑定¶
- plan canonical SHA
98708e1426058d5702920fb9fd166c590f6e795cdb3c95d17eb60af4acbac6a3。 - plan文件SHA
65c5a3de6bcf3cd834d33125e8dedd1eeb6bc707f4ce82a9ed7f414d85ea6038。 - 执行器SHA
82a8daa8daeeca62bdd05b41e0298c170a465149c45a268dbad66343af8d6c25;SQL SHA5d9661c5348f8eea678aeb3f4145d603121a6c8b2addf9b382c310270cdc0c51。 - 上述均独立复算,与ops-catalog-release-package.json一致;最新dryrun的两个plan摘要也匹配。先前准备报告中的3b88…是旧版本历史,不作当前执行依据。
已核关闭/具备的守卫¶
- 14实体均含原evidenceSha;逐实体canonical(kind/sourceTable/sourceId/origin/evidenceSha/payload/refs)的tool.sha与e.sourceSha一致。ledger.source_sha实际写tool.sha(canonical),匹配旧importer sha(r)重入判定;未再写不兼容的局部payload摘要。
- post_sha为PG to_jsonb(row)::text的UTF8 SHA256,与旧rowHash对相同字符串直接SHA256一致。受控SQL通过精确lit转义,standard_conforming_strings=on,表名白名单;对象/数组以JSONB写,日期在Asia/Shanghai下按已受审+08输入。
- writes精确Project/Meeting/Topic/Content共14、对应ledger14/run1;valuesFor保留原默认meeting类型项目/NULL公司及负责人,不含Profile/Candidate平台、TopicExpert、MeetingExpert或Task/财务写。生成SQL只INSERT,无业务UPDATE/DELETE。
- SERIALIZABLE、限定超时、精确catalog/ledger表锁、advisory lock、目标DB/system/app/trigger守卫,以及前像/排除本批新增后的旧行后像保护;Candidate平台摘要及候选/Task/Cost/Profile/MeetingExpert计数前后对照。此为本包保护,不声称所有并发业务全库静止。
- 首次写必须有primary release且绑定plan/SQL/executor摘要;state已存在即拒绝重放。COMMIT前结果持久化,COMMIT结果未知时保留unknown并先独立回查,不自动重试;未到COMMIT才尝试rollback。
- Ops transaction-transport-proof明确READ ONLY会话跨RPC持久、rollback、业务写0。ops-api-time-review.json allRoundtripsMatch=true;QA仅复用该源收据,没有重跑API时间检查。
当前具体阻断与后验¶
主线程已明确接受两Meeting及8Topic的industry refs为空:旧101/102/103/105为父类,当前PG只有细分叶子,不猜映射、不新增行业;Topic/Content保留行业文本,Meeting源分类留受限快照。分类字段未保真与筛选缺口作为后续待办,不再阻塞本批同步,不改写为全字段一致。时间/Content发布时间与精确5人公开批准同样已继承,不重复请示。
本执行器有SOURCE_ALREADY_IMPORTED拒绝,不是可重复execute脚本。生产后只需一份独立READ ONLY原收据:exact COMMIT和14映射/计数、payload/时间/附件后像相等、旧行/Task财务与平台保护相等、新只读重入plan 0create/0update/all14skip。不得为了证明幂等再执行写脚本;异常先解析当前transaction/ledger,不复跑全量历史测试。
后续5专家/6关系是另一精确包,不在当前SQL范围。必须先证明旧公开字段白名单、其他app Profile不间接开放及新鲜黑名单等守卫;旧内部name和NDB资料只供身份核验,缺字段不fallback。
已读ops-catalog-readback.cjs:独立READ ONLY事务,读取本manifest14ledger及目标行,旧行/平台/保护计数对比,使用未改历史ledgerState对精确本批输入判all14skip,不扫描/执行全部历史;不做第二次生产execute。这符合最小后验范围。其postimagesMatch证明DB当前行与提交时ledger post_sha相等,不独立等于每字段源保真;后续QA可消费ops-catalog-postcommit-private.json,将实际字段与冻结valuesFor映射逐项对照(时间按已接受语义归一),不需Ops或QA重查DB。
Backend最新白名单段及主线程已确认:旧5位nickname均为“专家”、display3/share_topic齐备、6关系覆盖值为空,5人跨全部app当前Profile/TopicExpert/MeetingExpert为0;这可作为后续专家包输入来源,禁止再用内部字段补空。此处不把尚未冻结的专家包计入当前14实体首写结论。
RA Updated by Redmine Admin 15 days ago Actions #4
旧会议、话题及专家关系增量同步:最终QA结果¶
2026-10-27,Asia/Shanghai;Redmine#29,主任务01a17c72-3172-74a1-94e2-c7ad3c8f20a7。本轮授权增量已完成:2会议、8话题、2纪要/附件、5公开专家资料、6话题专家关系、5精确平台增量;另新增必要项目2。 这是生产纯数据同步及实际API收据验收,不是小程序正式发布、代码上线或全部历史迁移完成。
层级、候选与汇总¶
- Ops负责实际生产DML、独立READ ONLY后验及签名GET;Backend负责身份/白名单及专家包。QA只读本地源收据与必要源码/受限对照,QA SQL/HTTP/浏览器/取密钥均0,没有重复数据库/API。
- catalog manifest:98708e1426058d5702920fb9fd166c590f6e795cdb3c95d17eb60af4acbac6a3;成功attempt3 SQL20784b94…/executor32280d57…,14实体。
- expert manifest:d6d8cd4f6657c750278a31e33923b5b4c40f10034edcfdb29f1110ab27768564;SQL15e1c686…/scripta6d49937…,11实体+5grant。
- 最终唯一API逻辑用例:23 Pass / 0 Fail / 0 Blocked / 0 Skipped。 本轮更正后实际验证21项,复用同一任务最初已通过的2会议项;不将23全部说成更正后新请求。
- 跨所有轮次实际GET42次=首轮18+诊断3+末轮三批21(8+7+6)。诊断不另计业务Pass,不把42次请求计为42条唯一用例。来源ops-api-final.json(2026-10-27 17:31:25 Asia/Shanghai)。
- CAT-01~07下表是这23项及DB/静态源证据的影响覆盖结论,不额外加成7条API Pass或凑成30项。Backend离线10项、历史clone/导入证据仅复用原层级,不加入本轮实际分母。
23项逐例实际结果¶
前置:两包COMMIT已确认,独立生产READ ONLY后验通过;同应用1/精确映射,候选黑名单/锁定/跨app guard通过。操作均由Ops实际GET,按冻结公开白名单及时间契约比较。每项完整摘要见ops-api-final.json;本表不复制正文、专家内档或凭据。
| 用例 | 实际操作 | 预期/实际核对 | 结果 |
|---|---|---|---|
| CAT-meeting-73 | GET /internal/v1/meetings/65 | HTTP200;19字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-meeting-74 | GET /internal/v1/meetings/66 | HTTP200;19字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-163 | GET /internal/v1/catalog/topics/164 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-164 | GET /internal/v1/catalog/topics/165 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-165 | GET /internal/v1/catalog/topics/166 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-166 | GET /internal/v1/catalog/topics/167 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-167 | GET /internal/v1/catalog/topics/168 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-168 | GET /internal/v1/catalog/topics/169 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-169 | GET /internal/v1/catalog/topics/170 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-topic-170 | GET /internal/v1/catalog/topics/171 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-content-125 | GET /internal/v1/catalog/content/64 | HTTP200;14字段,expected/actual SHA一致;公开白名单符合 | Pass |
| CAT-content-126 | GET /internal/v1/catalog/content/65 | HTTP200;14字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-65 | GET /internal/v1/catalog/experts/69 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-66 | GET /internal/v1/catalog/experts/70 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-67 | GET /internal/v1/catalog/experts/71 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-82 | GET /internal/v1/catalog/experts/72 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-99 | GET /internal/v1/catalog/experts/73 | HTTP200;12字段,expected/actual SHA一致;公开白名单符合 | Pass |
| EXP-directory | GET /internal/v1/catalog/experts?page=1&page_size=5 | HTTP200;5份投影字段/摘要一致;公开白名单符合 | Pass |
| EXP-topic-4 | GET /internal/v1/catalog/topics/4 | HTTP200;1份投影字段/摘要一致;1条新关系;公开白名单符合 | Pass |
| EXP-topic-6 | GET /internal/v1/catalog/topics/6 | HTTP200;1份投影字段/摘要一致;1条新关系;公开白名单符合 | Pass |
| EXP-topic-7 | GET /internal/v1/catalog/topics/7 | HTTP200;2份投影字段/摘要一致;2条新关系;公开白名单符合 | Pass |
| EXP-topic-10 | GET /internal/v1/catalog/topics/10 | HTTP200;1份投影字段/摘要一致;1条新关系;公开白名单符合 | Pass |
| EXP-topic-16 | GET /internal/v1/catalog/topics/16 | HTTP200;1份投影字段/摘要一致;1条新关系;公开白名单符合 | Pass |
CAT-01~07影响覆盖结论¶
| 编号 | 层级/操作与预期 | 实际结果及证据 | 判定 |
|---|---|---|---|
| CAT-01 正文/时间/状态/映射 | 生产DB与实际API源收据;冻结payload及已接受时间语义正确 | 14行146字段/引用相等;2Meeting+8Topic详情实际GET字段摘要一致;源73/74→65/66,163–170→164–171。行业FK未保真按明确风险处置保留,不称全字段保真。ops-catalog-contract-check.json、ops-api-final.json | Pass(授权范围) |
| CAT-02 附件 | 两真实PDF探针与DB/API附件映射/URL/字节/SHA一致 | conference_file125/126→Content64/65、对应Meeting65/66,file127/129各自稳定引用和探针一致;2Content实际GET公开字段/附件投影一致。复用原真实下载探针,QA没有重新下载 | Pass |
| CAT-03 身份与关系 | 5强映射/6关系、target端点/order按来源映射,不能oldID=targetID猜配 | 65→356837、66→428566、67→572777、82→204554、99→457736,Profile69–73;6关系35–40。5旧Topic实际GET准确投影1/1/2/1/1共6关系。ops-expert-readback.json、ops-api-final.json | Pass |
| CAT-04 公开白名单/权限/黑名单 | 公开信息仅旧公开源;新鲜5族/平台/跨app约束;不能暴露内档 | 5昵称均“专家”,仅旧nickname/display3/share_topic;QA先前25值直接源对照,DB84字段及实际5详情/目录/6关系投影均吻合。平台仅5个WECHAT增量,旧平台[]守卫、全5族无黑名单、跨appProfile0/Meeting引用0,无NDB/旧DB内部字段fallback | Pass |
| CAT-05 ledger与只读重入 | canonical source/postimage/grant兼容,来源不重复,无二次写重入 | catalog14skip/create0;专家11catalog+5grant skip/create0;最终ledger514/run3。仅只读新鲜重入规划/旧ledgerState验证,不声称再次生产execute。ops-catalog-readback.json、ops-expert-readback.json | Pass |
| CAT-06 既有保护/主档 | 事务锁内fresh旧行相等;专家仅5平台字段改变 | catalog旧行/平台/保护计数保全;专家原34关系、其他Profile/关系和5候选非平台列不变,grantpostimage一致;两包postcommitConcurrentTables=[]。旧失败前像历史不覆盖 | Pass |
| CAT-07 无Task/财务/外发副作用 | 精确SQL集合、无触发器/规则、新Task/财务/MeetingExpert/身份报名录制通知0 | 两包SQL和事务/后验保护通过;MeetingExpert仍0,未造应付Task,不调用开票/付款/通知。Ops API仅GET,认证nonce/last_used正常审计写可能发生,不夸称整个系统严格零写。QA业务请求0 | Pass |
提交与保护源回执¶
- catalog:attempt3 confirmed/postcommitVerified;ops-catalog-readback.json、ops-catalog-contract-check.json,14行146字段/引用、ledger498/run2、只读重入skip14/create0,事务及后验旧行/平台/计数保全。
- expert:ops-expert-readback.json,5Profile/6关系/5grant、84字段、原34关系保全、候选非平台列保全;只读重入skip11+grant5/create0。最终Profile73/TopicExpert40、ledger514/run3、当前可见5/跨app0/Meeting引用0,SQL_IDLE。
- 公开白名单证据:qa-expert-static-review.json、backend-review.md最终白名单节、backend-expert-readonly-receipt.json;完整源值只留受限0700/0600产物,不贴到Redmine。
真实失败/停止及更正轨迹(保留,不改写)¶
- Catalog attempt1在COMMIT前APP_DRIFT停止,原全App摘要把正常last_used_at变化当漂移;独立reconcile新ledger/run0、ROLLBACK、旧基线不变。attempt2仅排除last_used_at/ip后,仍因离线全Projects摘要PREIMAGE_DRIFT停止;再次ROLLBACK、新ledger/run0,平台及保护计数保全。两次不是成功写入,状态/release/错误轨迹保留。
- attempt3经主线程明确接受改为锁内fresh前像、来源/自然键guard、仅INSERT14、同事务排除新ID后旧行相等;一次COMMIT及独立后验成功。未盲fresh+retry、未冻结writer、未重置sequence或篡改旧行。
- API首轮18个实际GET:2Pass/16Fail保留在ops-api-runtime-attempt1.json。15条HTTP200因published_at比较失败;目录1次超时。不能把HTTP200当字段Pass,也不把首轮Fail删掉。
- 3个受控诊断样本(Topic/Content/Profile)及DATETIME_FORMAT=None、USE_TZ=False/TIME_ZONE=Asia/Shanghai证明实际published_at为上海naive字符串,原runner误按UTC读,偏移28800秒;Meeting显式+08原2Pass复用。仅修runner解释,未改DB/公开payload/产品代码,不称数据修复。详见ops-api-diagnostic.json、ops-api-oracle-correction.md。
- 目录改page_size5,21受影响/关系投影逻辑项分8/7/6三批通过(ops-api-batch1/2/3.json),最终目录含全5位。原page_size50/8秒预算下超时历史仍保留,未证明大页性能已修复;本轮接受有界page_size5功能验证。
明确保留范围与风险¶
- 4专家59/84/86/87身份仍未确认,4条话题关系不猜配、不造Candidate;当前仅补5人6关系,不称全部历史专家补齐。
- 48历史会议专家关系受MeetingExpert必填Task模型约束未恢复,不造零额应付Task、不借无关Task。
- 历史4会议(旧7/SUMMARY已由内容表示、9时间倒置、18零时长、37未发布/N_A)按原分类保留;不能按缺ledger当漏迁;26/27同名异时按来源区分,不重复旧实体。
- 旧行业101/102/103/105是父类,目标仅细分叶子,行业FK未映射:Topic/Content保留原文本,Meeting源分类留受限快照,分类筛选缺口为明确接受后续事项。不新增行业/schema或假称完全保真。
- 本轮实际验证是生产DB收据和实际应用API投影;不宣称微信/BFF完整端到端、小程序新版本发布、正式用户手册完成或所有历史迁移完成。未新增手册/上线门禁。
- 未改业务源代码/环境配置/分支/commit/push/部署,未新增发布备份。QA没有生产DML/SQL/API/浏览器/密钥操作;实际DML/GET属于Ops授权包。
回写¶
本报告及全部23逐例/CAT01–07在Redmine#29单一最终批次追加、全文读回;原准备journal301/302保留。唯一writeback receipt为qa-final-writeback-receipt.json,读取匹配后才算最终QA记账闭环。
RA Updated by Redmine Admin 15 days ago Actions #5
客户身份及旧授权增量同步:QA阶段计划¶
2026-10-27,Redmine#29沿用本任务。此为catalog/专家同步完成后的新阶段,不改journal303原23Pass,也不把原结果作为客户授权通过证据。
用户已授权立即同步已核验客户主档、同AppID微信身份及可继承真实旧授权。Ops唯一生产DB写,QA当前仅离线准备;不SQL/业务请求/真实用户登录/外发/源码或现有user修改。
共享索引outputs/client-auth-sync-20261027/index.md,最小矩阵qa-boundary-matrix.md,CA01–08覆盖来源口径、实际AppID、公司联系人映射、空phone撤销与授权继承、首次号码/replacement门禁、历史done/pending、跨库阶段/旧3user保护、来源幂等及无额外业务权益。
已知:旧175user、28bound均done字符串1,29done含1无绑定,22pending;27bound phone为空,oldContact260为失去源联系人的orphan,不得授权。新3user与28bound openid无交集,仍需真实AppID核实后才准身份写。
关键准入:BFF无phone直接refresh返回,而contact/profile可凭绑定授权;contact-events按号码查用户,不能仅直接填client_contact_id就宣称继承安全。保全真实旧授权证据,不伪造verified_phone/full_auth_at;有效客户可首次真实微信号码验证后resolve恢复,无需一刀切完整名片认证,但原replacement/换号撤销门禁不得解除。
当前Backend/BFF脚本准备中,Ops实际AppID待核;正式候选未冻结,实际业务测试0、正式Pass0。本计划不构成生产首写放行。后续只审既有源收据,按本阶段逻辑批次记所有实际结果并全文读回,不新增issue、不触历史ticket。
RA Updated by Redmine Admin 15 days ago Actions #6
客户主档与同渠道身份增量同步:本阶段最终QA结果¶
2026-10-27,Asia/Shanghai;主任务01a17c72-3172-74a1-94e2-c7ad3c8f20a7,Redmine#29。用户授权的本批生产纯数据增量同步及有界resolve验证完成;不代表小程序发布、真实微信登录验证或28人权限全恢复。与原catalog/专家journal303的23Pass及无关#13完全分开,journal304为本阶段计划。
已执行范围与实际结果¶
- Ops唯一SQL/API执行负责人;Backend与渠道分别COMMIT confirmed并独立READ ONLY readback通过,QA仅消费本地源收据、受限数据和必要源码,QA数据库/业务HTTP/浏览器/取密钥均0。
- Backend:新增5公司、15联系人,复用5联系人;新增30来源ledger、1run。当前companies143、clients1051、ledger544、runs4;原公司/联系人/既有ledger及run保全,20条新主档完整行、30项来源映射/后像hash通过。QA离线另比对255个payload/default/引用字段及原行摘要;只有bonus_rate/credit_rate按数据库数值投影比较,不改原phone等字符串。
- 渠道:同实际AppID保全28个旧绑定身份,新增28ledger/1run;原3用户完整保全,现31用户。28新行phone/contact/full_auth_at/authenticated_replacement_since均NULL,runtime认证申请0、直接联系人授权0、其他runtime表保全。175源身份(其中147不进入runtime)和51历史申请(29done/22pending)持久受限归档,不称为新版申请或恢复授权。
- 本阶段实际生产API为20次POST /internal/v1/clients/resolve/,业务只读,20 Pass / 0 Fail / 0 Blocked / 0 Skipped。覆盖本批15新增+5复用,逐条精确联系人ID/布尔/重新认证时间验证。HMAC认证nonce/last-used审计写可能发生,不能称整个HTTP链绝对零写;不绑定用户,不模拟微信取号。
- SQL readback、离线评审和已有合成tests按自身层级记证,不再加进20项生产API分母;未重跑旧catalog23项或#13手册。
精确候选与源证据¶
- Backend manifest d8b46f88c3c39f62570bebeb8b63e2f6529736d2c82fb6c90f38dc15fab64c77;sourceSQL2707e852a115b714318480d4cee2215d789cd91770538cb006024ece4973fdcc;applySQLc3308aa647b79f267e250783af20ea739c34787e3e6d223dfad90162e00d72a4;executor311d0a392f65b831db845c1ac1db6fecde9934ed043daa9f9b327a1e1d58f402。
- BFF V2 manifest a77798c58a3b549f3045552e8772cea1961a42514c32b51be106e9759cca5c48;pureSQL8b6d3ebcec9a31cbb589b1261957ce431b1bd23a22e5957989e3b4b9ba56bdf8;executor96754d42058577e07ca093bedc26454523f66aa1af1dc11ee9ee2ae5dbe972fd。V1未执行,V2仅修3个integer前像表示,业务插入/原始前像/历史归档均未变。
- 相对根目录 outputs/client-auth-sync-20261027/:ops-final-operation-receipt.json、ops-channel-readback-receipt.json、ops-backend-readback-receipt.json、ops-resolve-final.json、ops-resolve-batch1.json、ops-resolve-batch2.json;QA后验见qa-channel-post-review.json、qa-backend-post-review.json。
- QA已复算Ops最终证据链及API batch hash,20个目标ID全覆盖本次映射;两套持久归档文件hash及目录0700/文件0600实核一致。原始PII只留受限归档,不贴Redmine。
CA01–08影响覆盖与层级边界¶
| 影响 | 本阶段实际证据/结论 | 未测或适用边界 |
|---|---|---|
| CA-01 来源覆盖 | 冻结snapshot/plan逐项评审;175/28/51与29done/22pending分开对账;孤儿260不授权 | 不是175用户都迁入runtime |
| CA-02 同渠道身份 | Ops实际AppID相同、主进程匹配;渠道readback原3+新28完整 | 未执行真实WeChat登录 |
| CA-03 主档 | 5公司+15联系人INSERT/5reuse与30ledger落库后验通过;CA-D01证据缺口已闭合,保留原15scope | 7冲突及1orphan仍不入本批 |
| CA-04 空phone权限 | 新28四项敏感绑定字段NULL、0直接授权,原3及runtime其他表保全 | 保全旧授权来源证据,不宣称已完成28个业务授权 |
| CA-05 手机号/replacement | 20实际resolve精确匹配;旧主/备用号码及替换标记未改,静态门禁评审保留 | 真getPhoneNumber、号码替换/撤销动态全链未测;未改角色/号码制造场景,不新增整轮发布门禁 |
| CA-06 认证历史 | 175身份/51申请与实际映射受限持久归档;runtime申请/outbox不新增 | done不升级verified_phone,pending不激活 |
| CA-07 事务/保全 | 两独立数据库事务分别COMMIT confirmed,旧行/ledger/run完整保全;精确release/state防重审阅通过 | 不称跨库原子;无故障注入未知COMMIT实验 |
| CA-08 幂等/权益 | 渠道只读重入预测create0/skip28,无重复DML;Backend来源键/自然键/前后像守卫保留;无合同/财务/任务/通知权益写入 | Backend不再重复执行验证幂等;替换门禁动态未测范围同CA05 |
CA01–08是影响覆盖索引,含静态、SQL源收据与API层级,不另虚增8条生产业务Pass。
实际20条API结果¶
每条输入为本批映射联系人号码,HMAC签名;预期为冻结准备中的目标联系人ID及既有重新认证字段。实际返回均HTTP200/code200、精确目标ID、布尔false及时间NULL。号码、body、token/secret和完整原始响应不入普通报告。
| 编号 | 目标联系人ID | 预期/实际 | 状态 | 源证据 |
|---|---|---|---|---|
| CA-RESOLVE-01 | 1050 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-02 | 1042 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-03 | 1041 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-04 | 1046 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-05 | 1048 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-06 | 1051 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-07 | 1045 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-08 | 1040 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-09 | 1037 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-10 | 1043 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch1.json |
| CA-RESOLVE-11 | 1049 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-12 | 1039 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-13 | 1038 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-14 | 1047 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-15 | 1044 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-16 | 16 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-17 | 145 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-18 | 19 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-19 | 62 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
| CA-RESOLVE-20 | 49 | HTTP200,requires_reauthentication=false、since=NULL,精确匹配预期 | Pass | ops-resolve-batch2.json |
残余范围、收尾与安全¶
- 7个hold源联系人3/12/127/34/83/267/15保留冲突,孤儿260不建立主档授权。CA-D01是别名证据缺口而非确认错误客户,已由本地品牌、逐人mobile等证据及主线程裁决闭合,见qa-ca-d01-closure.json;旧阻断历史保留。
- 旧POST info可任意更新phone/client_contact_id,故唯一旧非空phone不构成微信取号证明;本批不伪造verified_phone/full_auth_at。有效客户首次真实微信验证号码后可走现有resolve,不统一要求完整名片再认证;现行替换/撤销重新认证保护不解除。
- 真实WeChat getPhoneNumber按钮、真实用户登录和小程序UI未测。本阶段交付是纯数据同步+20条resolve,不是小程序全流程验收或新发布;无新增源码或部署,不因未测UI重启整轮release门禁。
- Ops最终收据确认SQL/API停止、sqlIdle,Space3已结束,归档与数据保留。Backend preview干净,BFF chore/production-release-20261010原contact-events.service.ts及identity.spec.ts dirty保留;无源码修改/commit/push/部署/新增数据库备份。
- 本阶段结果按一次逻辑批次追加并读回;后续执行真实取号/动态替换时另记录该层结果,不覆盖本次生产数据与API证据。
RA Updated by Redmine Admin 10 days ago Actions #7
- File results.md results.md added
- File results-ledger.json results-ledger.json added
- File pg-http-results-r1.json pg-http-results-r1.json added
- File r2-results.json r2-results.json added
- File final-candidate-check.json final-candidate-check.json added
- File candidate-runtime-receipt.json candidate-runtime-receipt.json added
- File wechat-native-cards.png wechat-native-cards.png added
- File h5-mobile-two.png h5-mobile-two.png added
- File h5-mobile-error-clear.png h5-mobile-error-clear.png added
LEGACY-MEETING-EXPERT-01 独立QA收口 — R2¶
记录时间:2026-11-01T22:32:03+08:00(Asia/Shanghai)。主任务01a192ac-9cf0-7953-952b-caf9170e234b;唯一工单Redmine NDB #29。
恢复纠正及写入审计¶
错误恢复旧Issue102期间,仅exec读取旧QA/手册文件、规则及memory关键词,调用旧#13/#15 get_issue只读工具。没有旧任务文件/Redmine写入、浏览器操作、凭据读取或业务请求。错误final不属于本任务验收结论。当前遵循主任务最新纠正消息;未收到另一个要求切换业务任务的新的人类指令。该纠正后只写本任务qa产物及#29结果。
环境、候选和计数¶
本地独占真实PG55439,Backend8019→BFF3019,H5 QA代理8897。无生产。三仓bugfix/legacy-meeting-expert-display;candidate-r2.json共17文件哈希全部匹配,final-candidate-check.json含逐文件摘要、分支/HEAD/status及三仓diff --check=0。candidate-runtime-receipt.json记录授权的Backend精确重启及真实R2行为;没有仅以磁盘hash冒充已加载代码。
- R1历史实际执行:11 Pass / 1 Fail;LEGACY-IDENTITY-01由主任务确认真实缺陷,原Fail保留。早期checkpoint中的Blocked为未裁决中间记录,最终pg-http-results-r1.json明确Fail。
- R2实际执行:核心10 Pass,另BOUND-OR-LATE相邻补充1 Pass;合计11 Pass / 0 Fail。
- 界面实际执行:6 Pass / 3 Blocked / 0 Fail / 0 Skipped。此处不把API、视觉、MCP自动化层级混合。
- R2+界面收口执行记录为17 Pass / 3 Blocked;R1的11项有效证据另列复用,不算新执行。开发Backend52/BFF80/Mini34及43详情全量相等仅引用开发层证据,不加独立QA数量。
- 不声称完整验收、微信自动化/真机、生产迁移或上线完成。
R1历史逐项(原证据不改写)¶
共同前置:任务隔离PG和应用、明确自有fixture;操作/预期结合independent_pg_http.py及逐项actual复现;HTTP见http-observations.jsonl。
| 编号 | 结果 | 实际/可判定检查点 | 证据 |
|---|---|---|---|
| LEGACY-QA-SOURCE-BOUNDARIES | Pass | {"mappedMeetings": 43, "independentBoundaryDetails": [9, 46], "full43Equality": "developer evidence reused, not rerun", "missing5NotCreated": true} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-PREVIEW-ZERO-WRITE | Pass | {"accepted": true, "result": {"mode": "preview", "sha256": "db2670f845b846ccc140e63a21024c3d3bd6f7c0bfaccca952fe63fad89e0dca", "create": 2, "skip": 0, "rows": 2, "tasks_created": 0}} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-APPLY-NO-FINANCE | Pass | {"created": 2, "protectedFullModelsSame": true, "financeCounts": [0, 0, 0]} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-REPLAY-IDEMPOTENT | Pass | {"accepted": true, "result": {"mode": "apply", "sha256": "db2670f845b846ccc140e63a21024c3d3bd6f7c0bfaccca952fe63fad89e0dca", "create": 0, "skip": 2, "rows": 2, "tasks_created": 0}} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-CONFLICT-ATOMIC | Pass | {"newThenConflictRollback": true, "error": "Imported snapshot conflict; no rows were applied"} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-REJECT-WHITELIST-DIGEST-MAP | Pass | {"negativeInputs": 4, "unchanged": true} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-CROSS-APP | Pass | {"importRejected": true, "foreignMeetingHTTP": 404} | pg-http-results-r1.json;2026-11-01T14:07:24Z |
| LEGACY-QA-LIVE-SNAPSHOT-BOUNDARY | Pass | {"cards": 2, "boundOnlyViaProfile": true, "unknownNotGuessed": true, "noPrivateFallback": true, "ordinaryExpertsUnchanged": []} | pg-http-results-r1.json;2026-11-01T14:07:59Z |
| LEGACY-QA-NO-CATALOG-EXPANSION | Pass | {"profileDraftNoPlatforms": true, "publicExpertDirectoryTotal": 0} | pg-http-results-r1.json;2026-11-01T14:08:47Z |
| LEGACY-QA-LIVE-SUPPRESSION-REFRESH | Pass | {"blacklistAndDelete": true, "freshRequestRestoresAfterOwnFixtureReset": true, "noExistingCandidateModified": true} | pg-http-results-r1.json;2026-11-01T14:08:47Z |
| LEGACY-QA-WEB-INHERITED-PROJECTION | Pass | {"serializerOnlyNotWebHTTP": true, "historicalCards": 2} | pg-http-results-r1.json;2026-11-01T14:08:47Z |
| LEGACY-QA-FUTURE-IDENTITY | Fail | {"stableId": "LEGACY-IDENTITY-01", "lateVerifiedProfileNowBlacklisted": true, "unknownSnapshotStillVisible": true, "storedExpertRemainsNull": true, "reimportRejected": true, "error": "Imported snapshot conflict; no rows were applied", "needsPolicyDecision": false, "existingProductionRowsTouched": false, "confirmedDefectByMain": true, "repairOwner": "task main Backend owner"} | pg-http-results-r1.json;2026-11-01T14:08:47Z |
R1失败关联本#29中的稳定缺陷LEGACY-IDENTITY-01:未绑定历史快照导入→晚出现同应用明确legacy Profile且Candidate已拉黑→卡片仍可见,重入误报来源冲突。预期立即抑制且来源未变重入skip。唯一修复负责人为主任务Backend;R2仅相关三文件变化;不抹去R1失败,不自动关闭工单。
R2定向回归逐项¶
共同预期:既有绑定或同应用晚到的已核验身份任一受抑制就隐藏;跨应用不关联;公开字段/原快照/财务不变;重入skip。实际操作见r2_identity_http.py、r2-http-observations.jsonl及r2-results.json。执行时间原样保留UTC,报告时区上海UTC+8。
| 编号 | 影响 | 结果 | 实际 | 证据 |
|---|---|---|---|---|
| LEGACY-QA-R2-LATE-BLACKLIST | IMP-01/02/03 | Pass | {"lateSameAppVerifiedProfileSuppresses": true, "readDoesNotBindOrWriteSnapshot": true, "remainingOtherUnboundVisible": true} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-LATE-DELETED | IMP-01/02/03 | Pass | {"lateDeletedExpertSuppresses": true} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-REACTIVATE-SNAPSHOT | IMP-01/02/03 | Pass | {"originalPublicFieldsUnchanged": true, "noPrivateFallback": true, "freshHTTPRestoresTwo": true} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-LATE-REPLAY-SKIP | IMP-01/02/03 | Pass | {"skip": 2, "create": 0, "allStoredSourceAndPublicFieldsSame": true, "storedExpertStillNull": true} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-CROSSAPP-NULL-SAFETY | IMP-01/02/03 | Pass | {"sameLegacyIdOtherAppBlacklistedDeletedDoesNotSuppress": true, "unknownStillUnbound": true} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-LIST-PROJECTION | IMP-01/02/03 | Pass | {"sameSuppressionOnSignedList": true, "ordinaryExpertsUnchanged": []} | r2-results.json;2026-11-01T14:16:02Z |
| LEGACY-QA-R2-MY-MEETINGS | IMP-01/02/03 | Pass | {"realSignedHTTPNestedMeetingSuppression": true, "registrationFixtureWithoutTask": true} | r2-results.json;2026-11-01T14:16:03Z |
| LEGACY-QA-R2-TOPIC-WEB-PROJECTIONS | IMP-01/02/03 | Pass | {"topicRealSignedHTTP": true, "webSerializerOnlyNotWebLoginHTTP": true, "suppressedConsistently": true} | r2-results.json;2026-11-01T14:16:52Z |
| LEGACY-QA-R2-BATCH-QUERY-BOUND | IMP-01/02/03 | Pass | {"uniqueMeetings": [1, 2], "queryCounts": [4, 4], "notLoadOrLargePageBenchmark": true} | r2-results.json;2026-11-01T14:16:52Z |
| LEGACY-QA-R2-NO-FINANCE-DIRECTORY-WRITE | IMP-01/02/03 | Pass | {"taskCostMeetingExpert": [0, 0, 0], "snapshotFullRowsSame": true, "publicPlatformsUnchanged": []} | r2-results.json;2026-11-01T14:16:52Z |
| LEGACY-QA-R2-BOUND-OR-LATE | IMP-01/02/03 | Pass | [{"storedBoundBlacklisted": true, "lateMappedDeleted": false, "visibleCards": 0, "http": 200, "publicSnapshotAndStoredBindingUnchanged": true}, {"storedBoundBlacklisted": false, "lateMappedDeleted": true, "visibleCards": 0, "http": 200, "publicSnapshotAndStoredBindingUnchanged": true}, {"storedBoundBlacklisted": false, "lateMappedDeleted": false, "visibleCards": 1, "http": 200, "publicSnapshotAndStoredBindingUnchanged": true}] | r2-results.json;r2-bound-or-late.json |
批量查询仅1与2个不同会议比较4/4,不是大页或负载性能通过。Web只测继承serializer,未冒称Web登录HTTP;我的会议/专题为真实签名HTTP。
实际界面与未闭环项¶
前置:ego-browser Space7/p1,实际本地应用与自有合成fixture;H5构建仅QA输出和模板projectName补参,不改产品配置/源文件、不替换weapp dist。PNG窄屏390x844;单卡旧截图1200宽另标。
| 编号 | 影响 | 结果 | 操作/预期及实际 | 证据 |
|---|---|---|---|---|
| H5-SINGLE | IMP-04 | Pass | 旧会议9单卡仅旧公开字段,actions=0;1200宽桌面证据,不称390窄屏 | h5-single-card.json; h5-single-card.png |
| H5-MULTI-MOBILE | IMP-04 | Pass | 100002两卡、空名为专家、长文本;viewport/scrollWidth均390,无卡内动作控件 | h5-mobile-two.json; h5-mobile-two.png |
| H5-EMPTY | IMP-04 | Pass | 100001无卡且无特邀专家区 | h5-empty.json; h5-mobile-empty.png |
| H5-PLAIN-TEXT | IMP-04 | Pass | 自有900104字面渲染HTML样式文本;0 b/0 img,脚本标记false;390无溢出 | h5-plain-text.json; h5-mobile-plain-text.png |
| H5-FAULT-CLEAR | IMP-04 | Pass | QA本地代理受控503后旧卡清空并显示错误/重试;不是自然后端失败或恢复通过 | h5-fault-clear.json; h5-mobile-error-clear.png; h5-network.jsonl |
| WECHAT-NATIVE-VISUAL | IMP-04 | Pass | 已打开canonical项目,原生AX+只读滚动+真实窗口截图看到双卡;不证明MCP恢复/真机 | wechat-native-visual.json; wechat-native-cards.png |
| H5-MANUAL-RETRY | IMP-04 | Blocked | 重试点击目标在Taro刷新/焦点变化中消失或detach,未保存一次成功手动重试闭环;不再盲重试,后续仅补此项 | h5-fault-clear.json; h5-network.jsonl |
| WECHAT-MCP-AUTOMATION | IMP-04 | Blocked | querySelectorAll和simulator_screenshot均APPID_ERROR/TLS socket断开;未换AppID/登录或重发auth;原生视觉另项通过 | wechat-blocker.json |
| ORDINARY-HISTORY-COEXIST | IMP-04 | Blocked | 本地普通MeetingExpert=0,模型要求财务Task;未为展示造Task。普通/历史同页真实界面共存未测,需安全非财务前置或主任务处置 | ui-cleanup.json; developer Mini34 tests at developer layer only |
Blocked由主任务决定前置/处置,QA不新增财务fixture、不改AppID/环境绕过。手动重试未成功不记产品Fail或恢复Pass。卡内DOM无链接/按钮有证据,但一次点击detach,不声称完成真实点击无跳转验证。
影响覆盖及复用边界¶
唯一影响矩阵:docs/specs/cross-project/2026-11-01-legacy-meeting-expert-display.md。这里只关联证据,不另造第二套需求矩阵。
- IMP-01:真实签名详情/列表/我的会议/专题,以及Web serializer;晚到/已有身份、跨应用、黑名单/删除R2通过。Web完整登录交互及未独立测嵌套入口仅开发层证据。
- IMP-02:R1预览零写、两条apply无财务、skip、原子冲突、四负例、跨应用有真实PG证据;R2重入及原字段不变另测。模型/迁移未改,复用开发PG迁移收据。
- IMP-03:真实BFF六字段和目录不扩展;adapter未变,开发80/build/lint复用。
- IMP-04:上述H5及微信原生视觉独立证据;Mini34/weapp构建复用;普通共存、手动重试、MCP自动化仍Blocked;未测真机。
- IMP-05:48源关系中的43既有目标映射;独立详情首尾9/46对照,完整43逐字段HTTP用开发local-http-results.json,不伪称QA重跑43。5条无目标保留,不造异常/未发布会议;生产fresh预览/导入/运行读回全未执行且无授权。
复用审核:本QA本次对照R1/R2候选,仅Backend三文件变;BFF/Mini和模型/迁移不变。11项R1通过记录保持原执行时间,不当作本轮新Pass;R2已补受影响读投影、身份重入及相邻查询。
保全与收尾¶
cleanup-receipt.json和r2-cleanup.json前后原完整行摘要相同;ui-cleanup.json确认仅自有fixture删除,原开发fixture保留。最终Meeting45、HistoricalMeetingExpert45、Candidates2、PublicExpertProfile0,Task/Cost/MeetingExpert均0。代理注入标记已移除。认证last_used正常技术日志不在保护业务行中,不夸称所有表绝对零写。
Backend8019按明确授权加载R2;BFF3019、PG55439、原H5/weapp产物保留。QA自有8897及Space7收尾以writeback-receipt.json记录为准;不关闭原生开发工具窗口。无真实账号登录/取凭据,无业务源码/配置修改、切分支、commit/push/部署或生产操作。
补充:QA runner序列号碰撞、对象属性索引、目录路径及专题published_at前置纠正均保留原日志;属支持脚本/fixture纠正,不冒称产品修复轮次或删除真实Fail。
回写¶
本报告以一次逻辑批次追加#29并附原结构化R1/R2及截图证据;写回及读回匹配见writeback-receipt.json。保留原#29历史journal,不更改issue状态。
RA Updated by Redmine Admin 10 days ago Actions #8
- File supplement-results.md supplement-results.md added
- File supplement-api.json supplement-api.json added
- File supplement-http.jsonl supplement-http.jsonl added
- File supplement-cleanup.json supplement-cleanup.json added
- File supplement-candidate-check.json supplement-candidate-check.json added
- File wechat-coexist-interaction.json wechat-coexist-interaction.json added
- File native-retry-service.json native-retry-service.json added
- File native-retry-http-error.json native-retry-http-error.json added
- File native-retry-ui-recovery.json native-retry-ui-recovery.json added
- File wechat-coexist.png wechat-coexist.png added
- File wechat-native-upstream-error.png wechat-native-upstream-error.png added
- File wechat-native-retry-recovered.png wechat-native-retry-recovered.png added
LEGACY-MEETING-EXPERT-01 R2补充验收 — 两个业务缺口闭环¶
- 记录时间:2026-11-01T22:40:18+08:00,Asia/Shanghai;执行2026-11-01 22:37–22:39。
- 正确任务/工单:01a192ac-9cf0-7953-952b-caf9170e234b / Redmine NDB #29。
- 候选:candidate-r2.json三仓bugfix/legacy-meeting-expert-display,17文件完全不变,supplement-candidate-check.json逐文件复核;三仓diff --check通过。没有新实现或产品修复。
- 范围:主任务明确追加的正常业务合成前置和本任务8019短停/恢复;未认领或新建已结束ego空间,未恢复旧102,未重跑既有通过项。
- 本批实际执行:2 Pass / 0 Fail / 0 Blocked / 0 Skipped。原journal359及R1 Fail/R2回归不覆盖、不重复计数;原H5手动点击和微信MCP自动化Blocked仍保留。
用例逐项¶
| 编号 | 影响/入口 | 前置与操作 | 预期 | 实际 | 状态 | 证据 |
|---|---|---|---|---|---|---|
| ORDINARY-HISTORY-COEXIST | IMP-02/04,正常业务关系→历史导入→BFF详情→真实微信页面 | 在独占PG55439内先建立合成普通候选/公开Profile/Task/MeetingExpert,作为已存在正常业务状态;导入独立历史快照;GET与微信同页检查;原生点击历史卡标题 | 历史导入Task增量0,普通业务行不改;两类公开卡同时显示;历史卡无约访/详情跳转 | 普通基线Task1/Cost0/MeetingExpert1,导入后仍1/0/1,原正常业务行完整摘要不变;BFF各1卡;微信普通卡有单独约访、历史卡无;点击历史卡后仍会议详情且两卡保留 | Pass | supplement-api.json、supplement-http.jsonl、wechat-coexist-interaction.json、wechat-coexist.png |
| WECHAT-NATIVE-MANUAL-RETRY | IMP-04,真实微信失败页→原生重试→本地BFF/NDB | 核PID26105/cwd/端口/原参数后仅SIGTERM本任务8019;加载合成会议900106;保存失败页及真实HTTP503;按原settings/55439/--noreload恢复;确认页面仍错误态后原生点击重试一次 | 失败不保留卡片;服务恢复后手动重试加载实际会议及两类卡 | 失败显示NDB暂时不可用/重新加载会议,无卡;独立BFF GET503;恢复PID34115后BFF200、原生点击一次后两卡恢复且错误消失;不是代理假响应 | Pass | native-retry-ui-error.json、native-retry-http-error.json、native-retry-service.json、native-retry-ui-recovery.json、wechat-native-upstream-error.png、wechat-native-retry-recovered.png、backend-native-retry-restored.log |
安全、归属和保全¶
- 只对任务自有合成库ndb_blacklist_synthetic/127.0.0.1:55439做fixture;静态检查模型/CooperationModel和接收器,无post/pre save/delete接收器。fixture runner阻断非localhost网络,不调用服务层通知/录制/审批/付款/开票路径。普通Task为finished、不录制、无需支付/收费、无成本,未创建真实财务动作。
- 本批明确的正常业务测试前置与历史展示分离。Task不绑定历史快照;HistoricalMeetingExpert.expert_id仍null,历史卡不是普通公开Profile,不能借普通Candidate内档填公开内容。公开字段均显式合成公开值。
- 精确本批ID:{"meeting": 900106, "run": "QA_LEGACY_COEXIST_20261101", "signals": {"Meeting": 0, "HistoricalMeetingExpert": 0, "MeetingExpert": 0, "ProjectTasks": 0, "ProjectTaskCosts": 0, "Candidates": 0, "PublicExpertProfile": 0}, "candidate": 12, "profile": 9, "task": 1, "meetingExpert": 1, "history": 59}。
- 原有45 Meeting/45 HistoricalMeetingExpert及原Candidates2/Profile0行hash逐行保全;仅自有fixture按归属删除,最终恢复45/45及Task0/Cost0/MeetingExpert0。证据supplement-baseline.json/supplement-cleanup.json。没有清理开发原fixture、重置序列或变动生产/共享业务。
- 8019恢复PID34115,原settings和PG55439、--noreload不变;真实GET恢复200。PG/BFF及其他服务未停止。微信工具返回原100002页面,保留原生窗口;ego Space7保持已结束,无新空间。
当前覆盖结论与层级¶
本次要求补充的两个本地业务缺口已由真实微信目标平台证据覆盖:同页共存及历史卡点击边界、真实上游失败→原生手动重试恢复。此前ORDINARY-HISTORY-COEXIST Blocked新增本批Pass,保留旧原因历史;H5-MANUAL-RETRY仍是H5工具路径未闭环、WECHAT-MCP-AUTOMATION仍是APPID_ERROR/TLS阻塞,均不冒称工具已修复。业务手动重试由新增WECHAT-NATIVE-MANUAL-RETRY Pass覆盖,不将H5/MCP升级为Pass。
R1历史11Pass/1Fail、R2核心10+补充1Pass、前批UI6Pass均沿用#29 journal359。本批只新增2Pass;按最新唯一用例,旧共存条目更新Pass、增加微信原生重试项;跨轮计数不代表重跑。开发52/80/34及43全量详情复用层级不变。未做微信真机、Web完整登录、生产迁移/导入/上线;原5条无目标会议不补造。这些不因本次局部闭环被宣称完成。
回写与工作区¶
本报告单批追加正确#29,原journal359完整保留;读回收据见writeback-receipt.json。共享影响矩阵同路径docs/specs/cross-project/2026-11-01-legacy-meeting-expert-display.md已更新本批证据及旧缺口处置,不新增第二套矩阵。无业务源代码/配置/分支变化、commit/push/deploy或生产写入。全部已有dirty保留。
RA Updated by Redmine Admin 9 days ago Actions #9
- File results.md results.md added
- File results-ledger.json results-ledger.json added
- File evidence-bundle.json evidence-bundle.json added
- File final-candidate-check.json final-candidate-check.json added
- File supplement-cleanup.json supplement-cleanup.json added
- File network.jsonl network.jsonl added
- File wechat-list-mixed.png wechat-list-mixed.png added
- File wechat-list-real503.png wechat-list-real503.png added
- File wechat-list-retry-recovered.png wechat-list-retry-recovered.png added
- File h5-list-mixed.png h5-list-mixed.png added
- File gather-real503.png gather-real503.png added
- File support-corrections.md support-corrections.md added
MP-LIST-REFRESH-01 独立QA R1结果¶
记录时间:2026-11-01T23:48:38+08:00(Asia/Shanghai);实际证据时间见JSON UTC时间,上海为UTC+8。执行日期2026-11-01。
主任务01a192ac-9cf0-7953-952b-caf9170e234b;正确工单NDB #29。当前索引与candidate.json写前重新核对,16文件候选21bff02523d974b3f81384e8b32d7c497757af2c5d1f2168cbf7e61731be1cd2;三仓bugfix/legacy-meeting-expert-display,原Backend8/BFF4不变,最终逐文件hash/HEAD/status/diff --check见final-candidate-check.json。无旧102/106/13/15操作或热点数据补写。
结论与层级¶
本轮实际:12 Pass / 0 Fail / 2 Blocked / 0 Skipped。列表摘要、目录/首页保留内容刷新、不同关键词/空结果/晚到查询、真实503清理及微信原生重试、专家撤回404、匿名私有门禁均有独立应用证据。真实双账号切换、正向热点页面未闭环,不能宣称所有影响项全层级通过。
复用开发53项(12项控时Promise/摘要+41相邻),目标lint和weapp构建;不算新QA运行。Backend/BFF/迁移与原R2相同,复用#29 journals359/360及原开发证据,不重跑、不把旧任务数量加入本轮。
环境:任务独占真实PG55439、Backend8019、BFF3019;已打开微信项目原生观察/交互,ego-browser唯一Space8/p1。H5为QA副本,仅QA脚本补模板projectName、H5组件自动解析,dts:false/输出qa/h5-dist,未修改产品配置/源码或weapp dist;不宣称标准H5构建已经修复。H5真实响应由只读localhost8896转发实际3019;受控延迟仅传输层,不替换业务响应。503通过真实短停8019产生,404由仅自有Profile撤回产生。
逐条结果¶
共同前置为上述候选、匿名公开UI和明确自有fixture,步骤及预期/实际如下;接口仅保存method/path/status和公开响应,不含Token/secret/header。
| 编号 | 影响 | 层级 | 操作/预期 | 实际 | 状态 | 证据(本qa目录) |
|---|---|---|---|---|---|---|
| MPQA-LIST-MIXED | LIST-01 | 真实微信+H5/HTTP | 目录打开900107,预期同时显示两类公开摘要且无额外专家入口 | 微信与H5均显示QA列表普通公司/QA公开职位及QA列表历史公司/QA旧公开职位;390宽无横溢,卡内a/button=0 | Pass | wechat-list-mixed.png; h5-list-mixed.json/.png |
| MPQA-LIST-VARIANTS | LIST-01 | 真实H5/HTTP | 仅改自有fixture公开状态/移除自有历史快照后刷新,预期普通/历史/无专家及空公开字段分别正确 | 历史仅1摘要→无公开专家0摘要但会议保留→普通仅1摘要;开发原100002空名为专家、长文本截断,100001无专家摘要 | Pass | list-history-only.json; list-no-public-experts.json; list-ordinary-only.json; list-public-fallback-empty.json; supplement-http.jsonl |
| MPQA-LIST-NAV | LIST-01 | 真实微信原生+H5 | 点会议行应打开会议900107并可返回,历史snapshot不作Profile目标 | 原生实际点列表行进入同合成会议详情,返回仍有摘要;H5列表行亦进入900107,不新增专家级链接/约访 | Pass | wechat-navigation.json; network.jsonl; h5-list-mixed.json |
| MPQA-RETURN-REFRESH | LOAD-01 | 真实H5+受控传输延迟 | 列表加载后点详情再返回,同关键词后台真实GET期间不清空旧卡/重现骨架 | 仅QA localhost延迟4秒真实上游GET;返回待响应时1卡/0骨架,完成HTTP200后仍1卡;DOM观察轨迹无骨架记录,不声称逐帧录像 | Pass | return-refresh-pending.json; return-refresh-complete.json; network.jsonl |
| MPQA-KEYWORD-EMPTY | LOAD-01 | 真实H5/HTTP | 不同关键词立即清旧结果;真实空数组应显示空态 | 新关键词时0卡/3骨架,真实HTTP200空结果后0卡/暂无数据,未保留旧专家 | Pass | new-keyword-pending.json; new-keyword-empty.json; network.jsonl |
| MPQA-STALE-QUERY | LOAD-01 | 真实H5+受控传输延迟 | 较慢旧查询在新空查询后返回,不得覆盖新结果 | 先QA关键词5秒延迟、随后不同无匹配关键词快速返回;首个旧GET在5.06秒后HTTP200,之后采样仍是新关键词/0卡/空态。额外GET及轮询辅助误选最新start造成超时已保留,不加测试数量 | Pass | stale-network-pair.json; stale-response-rejected.json; network.jsonl |
| MPQA-SEARCH-LIST | LOAD-01 | 真实H5/HTTP | 独立搜索列表页应读取公开会议摘要 | 搜索页10张会议且包含合成普通公开摘要;仅该页读取通过。H5输入宽0阻断该页实际输入,不冒称搜索页关键词/竞争全路径通过;控时单测仅复用 | Pass | search-real-list.json; network.jsonl |
| MPQA-HOME-RETURN | LOAD-02 | 真实H5+受控传输延迟 | 首页已加载后切tab返回,刷新期间保留内容 | 真实GET延迟3秒,首页5卡/0骨架且正在刷新提示;完成后提示消失并以新响应显示 | Pass | home-refresh-pending.json; network.jsonl |
| MPQA-FAILURE-CLEAR | LOAD-01/02 | 真实H5/HTTP | 实际上游503后应显示错误/重试且去除不可复核专家,保留会议外壳 | 精确核cwd/端口后短停本任务8019;首页5卡、目录2卡保持,摘要均0;实际BFF503。恢复8019后新onShow真实GET重验恢复摘要,不伪称H5手动按钮点击成功 | Pass | home-real503.json; gather-real503.json/.png; gather-recovery-onshow.json; failure-service.json; network.jsonl |
| MPQA-EXPERT-REVOKED | LOAD-02 | 真实H5/HTTP | 原公开专家详情离开后撤回,再返回应清除旧内容 | 自有Profile10初始公开加载成功;仅该合成Profile改draft;返回真实404后旧名清除并显示记录不存在/重新加载专家。未改热点数据 | Pass | expert-before-revoked.json; expert-revoked404.json; network.jsonl |
| MPQA-NATIVE-RETRY | LOAD-01/02 | 真实微信原生/本地HTTP | 列表真实503且清摘要;恢复服务后原生点重试应重验恢复 | H5跨调用聚焦使重试按钮被onShow重验替换,未盲重试;另在微信目标平台验证:错误态在服务恢复后保持,原生点击一次重新加载,错误消失/历史摘要恢复;不宣称MCP截图工具恢复 | Pass | native-list-retry.json; native-list-retry-service.json; wechat-list-real503.png; wechat-list-retry-recovered.png |
| MPQA-ANONYMOUS-PRIVATE | LOAD-03 | 真实H5匿名页面 | 未登录不得展示收藏/订阅私有列表 | 两页均前往登录,私有conference-list内0卡;页面缓存中其他公开页全局5卡已排除,不能把其计成私有泄露 | Pass | anonymous-collection.json; anonymous-subscribe.json |
| MPQA-REAL-SESSION-SWITCH | LOAD-03 | 真实会话层未执行 | 有效身份A列表→B/退出,旧响应不得串账号 | 没有两份已核验可用的本地BFF合成会话/绑定身份;未借真实账号、伪造JWT或新造授权。开发collection/subscribe的token同步watch及迟到Promise拒绝测试有效,仅受控层,不升级真实账号Pass。需主任务提供安全两会话fixture或明确接受该层未测 | Blocked | tests.log (developer controlled tests); qa-task-package.md |
| MPQA-TOPIC-POSITIVE-UI | LOAD-01/02 | 真实热点正向内容层未执行 | 已有热点/专家列表及热点详情返回时保留正向内容,并验证失败/撤回 | 当前本地无正向热点fixture,本任务明确不改热点数据;未新造/激活热点。开发热点/专家列表、热点详情Promise/404测试复用,真实专家404已另测;热点正向页面仍需合规fixture或主任务接受层级边界 | Blocked | tests.log; tests/list-refresh.test.cjs (developer evidence only) |
复用、缺口与处置¶
- 唯一影响矩阵docs/specs/cross-project/2026-11-01-mini-list-refresh.md保持四项;LIST-01由普通/历史/混合/空及导航证据覆盖;LOAD-01目录控时与搜索读取实测,热点/搜索完整控时在开发层;LOAD-02首页/503/专家404和原生重试实测,热点正向未测;LOAD-03匿名实测,A/B真实会话仍Blocked。
- 复用审核人本QA:Mini候选16文件精确匹配,开发53项来自同候选;Backend/BFF字节不变。开发mock/Promise不提升为真实账号、供应商或生产通过。
- 两个Blocked交主任务决定前置/具体未测风险,不变更账号/绑定权限,不触发微信真实登录/取号/通知。没有新确认产品Fail,无新增缺陷或自动产品修复;H5构建支撑/输入宽0和重试目标消失只作为辅助路径限制,微信真实列表及原生重试另有证据。
- H5混合列表及503图为390x844并已目视检查;其他JSON若宽1200如fallback按桌面层,不一律冒称窄屏。原生截图为微信开发工具,非真机。返回刷新为待响应采样/DOM轨迹与实际网络对照,不夸称逐帧录像。
fixture、服务及写入保全¶
QA_MP_LIST_20261101唯一合成会议900107、Candidate13/Profile10、正常Task2/MeetingExpert2、历史快照60;仅正常业务前置创建普通Task。历史导入前后1/0/1完全一致,导入Task增量0;无Cost、真实付款、开票、审批、录制或通知。无模型信号接收器,fixture阻断非localhost网络。
自有fixture已按确切ID/归属清除,原逐行SHA相同;恢复Meeting45/Historical45/Candidates2/Profile0,Task/Cost/MeetingExpert0/0/0。见supplement-baseline.json/supplement-cleanup.json。未重置sequence或清理原开发数据。
Backend仅精确8019进程为本地负例两次串行短停,并原settings/PG55439/--noreload恢复;最终PID53538,真实BFF200。PG/BFF及其他旧服务未停。新8896 QA辅助代理/Space8按最终writeback-receipt.json收尾。正常公开GET认证审计写可能发生,不声称整个系统绝对零写。
QA支持错误见support-corrections.md:旧前缀自检、错误构建cwd、H5组件解析模块路径、CDP后stale ref、观察器错选最新start、全局缓存卡数误用均保留并仅修QA支撑;没有因此重放setup或自动改产品。fixture阶段中同名状态摘要文件为最新快照,原各阶段公开响应保留在supplement-http.jsonl,UI分阶段JSON单列。
未登录真实账号/取BW凭据;本地合成签名应用参数仅沿用受限env在进程内,不输出秘密。无业务源码/配置/版本/分支修改、commit/push/deploy或生产操作。全部既有dirty保留。
回写¶
本报告及结构化逐项/脱敏关键截图向正确#29一次批量追加并读回,journal/附件/全文匹配见writeback-receipt.json。原journals359/360不改写;本批不自动改工单状态。
RA Updated by Redmine Admin 9 days ago Actions #10
- File r2-results.md r2-results.md added
- File r2-evidence-bundle.json r2-evidence-bundle.json added
- File session-supplement-findings.json session-supplement-findings.json added
- File topic-http.jsonl topic-http.jsonl added
- File topic-cleanup.json topic-cleanup.json added
- File r2-final-candidate-check.json r2-final-candidate-check.json added
- File wechat-topic-list-r2.png wechat-topic-list-r2.png added
- File wechat-topic-detail-r2.png wechat-topic-detail-r2.png added
- File wechat-topic-real503-r2.png wechat-topic-real503-r2.png added
- File wechat-topic-recovered-r2.png wechat-topic-recovered-r2.png added
- File wechat-topic-404-r2.png wechat-topic-404-r2.png added
MP-LIST-REFRESH-01 R2两项Blocked定向补测¶
记录时间:2026-11-02T00:01:31+08:00,Asia/Shanghai。执行证据为2026-11-01 23:53–23:59,原JSON保留UTC时间。主任务01a192ac-9cf0-7953-952b-caf9170e234b;正确工单NDB #29;候选仍Mini16文件21bff02523d974b3f81384e8b32d7c497757af2c5d1f2168cbf7e61731be1cd2,Backend8/BFF4无漂移,三仓分支/diff --check均保持。见r2-final-candidate-check.json。
本批仅处理journal361两条Blocked,未重跑原12 Pass。新增实际补测1 Pass / 0 Fail / 1 Blocked / 0 Skipped;最新唯一14项为13 Pass / 1 Blocked。原journal361的12 Pass/2 Blocked及开发53项不改写、不新计为执行。
| 原稳定编号 | 影响/层级 | 操作与预期 | 实际 | 状态 | 证据 |
|---|---|---|---|---|---|
| MPQA-TOPIC-POSITIVE-UI | LOAD-01/02;真实独占PG、实际BFF→签名Backend、微信原生列表/详情交互 | 按本次追加边界建立纯合成Topic及公开专家关联;打开热点列表/详情,返回刷新保持内容;真实503清除专家、恢复后原生重试;归档404清除主体和列表旧卡 | Topic900109在真实列表/详情显示,关联公开专家1位。列表返回刷新在Backend受控暂停窗口内8.52秒采样仍有旧卡/无骨架/无错误,恢复后实际HTTP200。真实短停8019后详情保留标题/背景/提纲、专家清除,HTTP503;恢复后原生点击重新加载话题一次,专家恢复/错误消失。仅自有Topic归档后真实404且列表total0,微信旧主体/专家/列表卡均移除 | Pass(本次明确的正向热点子范围) | topic-http.jsonl、topic-list-return-pending-r2.json、topic-list-delay-service.json、topic-real503-r2.json、topic-retry-recovered-r2.json、topic-archived.json、topic-archived-ui-r2.json、topic-list-archived-r2.json及真实微信截图 |
| MPQA-REAL-SESSION-SWITCH | LOAD-03;标准登录机制只读分析,真实双账号UI未执行 | 定位已有正常本地账号/会话fixture;不得外呼、访问BW/密钥或绕鉴权,正常机制必需真实供应商时停止并列确切前置 | AuthController公开登录首先await微信exchangeCode,再users.login及JwtService签发;exchangeCode必需api.weixin.qq.com/sns/jscode2session。未找到普通本地dev/session登录入口。test/http.spec.ts的session helper直接建用户/绑定并signAsync,处于测试app及上游mock语境,不能冒称实际正常微信登录。按本次停止边界未调用供应商、未读JWT密钥/BW、未生成JWT、未创建用户/绑定/会话;A/B真实隔离仍未测 | Blocked | session-supplement-findings.json;src/auth/auth.controller.ts:20–36、src/auth/wechat.service.ts:15–19/51–63、test/http.spec.ts:213–228 |
会话最小不可达前置¶
现有公开路径POST /api/v2/auth/wechat/login需要与该非生产应用匹配的两份不同已验证微信身份code,并由正常供应商交换后发会话,或由应用正常认证建立且已核实归属的两份本地有限A/B会话。当前边界禁止外呼;单独创建users行不能完成该公开登录。没有盲试供应商、没有请求线上JWT或真实用户、没有把测试helper直接签发说成真实登录。开发collection/subscribe同步watch与generation/token迟到拒绝的受控Promise证据继续仅按journal361开发层复用。若主任务接受该层未测风险需明确记录,QA不自行升级Pass。
隔离、归属与恢复¶
本批仅自有PG55439/ndb_blacklist_synthetic、唯一标记QA_MP_LIST_20261101_TOPIC_R2。确切归属:{"run": "QA_MP_LIST_20261101_TOPIC_R2", "topic": 900109, "signals": {"Topic": 0, "TopicExpert": 0, "PublicExpertProfile": 0, "Candidates": 0}, "candidate": 14, "profile": 11, "topicExpert": 1}。Topic及TopicExpert/公开Profile/Candidate无模型信号接收器;fixture脚本阻断非localhost网络。没有创建任何Task/Cost/MeetingExpert、联系方式、报名、约访、外发或审批。不是修改线上/原业务热点关联。
所有自有Topic/TopicExpert/Profile/Candidate已按ID及标记清理,12个受保护模型原逐行SHA一致;最终Topic/TopicExpert/TopicMeeting/TopicContent/Profile/InterviewRequest均0,Meeting45/Historical45/Candidates2,Task/Cost/MeetingExpert0/0/0。见topic-baseline.json/topic-cleanup.json。
延迟仅精确本地8019进程SIGSTOP/SIGCONT,带6/12秒自动恢复保护;真实失败仅该进程SIGTERM并原settings、PG55439、--noreload重启,当前PID56323,真实BFF读回200。PG/BFF及其他服务未停,源码/配置完全不变。无浏览器新空间、认领或恢复已结束Space8;只用已打开微信项目,保留原生窗口。
证据边界¶
- 初次详情返回采样发生在6秒自动恢复后(7.07秒),仅证明返回内容可见,未作为加载中通过;保留topic-return-observation-attempt1.json。有效加载中证据为后一次列表8.52秒/12秒窗口采样,不重复计用例。
- 原生专家tab点击尝试未完成独立专家页切换,文件wechat-topic-expert-list-r2.png实际仍是热点列表,不作为专家列表通过证据。本次按追加明确范围只关闭热点正向列表/详情子缺口;独立专家列表的控时证据仍是原开发层,不新增真实专家列表Pass。原R1专家详情真实撤回404结果不重测。
- 微信截图均实际本地模拟器,非真机;MCP导航可用不等于其读卡/截图APPID/TLS工具修复。未新增mock业务响应,真实HTTP200/503/404均单列。正常技术认证审计可能写入,不声称所有表绝对零写。
共享唯一矩阵docs/specs/cross-project/2026-11-01-mini-list-refresh.md及本任务index.md更新本批差异;不建第二套矩阵。无产品源码/配置/分支变化、commit/push/deploy/生产操作,无旧102/106/13/15动作。仅把本报告一次追加正确#29并全文读回,原journal361保留,见writeback-receipt.json。
RA Updated by Redmine Admin 9 days ago Actions #11
- File receipt-review.md receipt-review.md added
- File review-results.json review-results.json added
#29 发布源回执适用性审查 — R1¶
审查时间:2026-11-02T01:25:41+08:00(Asia/Shanghai);编号REL-29-RECEIPT-REVIEW-20261102-R1。
任务LEGACY-MEETING-EXPERT-01 / MP-LIST-REFRESH-01,正确工单NDB #29。默认pwd已只读确认canonical;依指令复用原握手,只审Operations现有release/index.md、receipt.json及其明确引用的源JSON。用户“现在就上”“别测试了”:本轮功能执行0、功能Pass新增0,原开发53及QA13仅复用,不重跑28源码hash/Git/环境/CI/页面,不操作浏览器/凭据/DB。
结论:现有源回执足以支持已完成的Backend/BFF生产、43快照导入、Mini开发版上传及三仓收尾声明,未发现需Ops重抓的确切证据缺项。微信平台仍Waiting/NotReleased,未提审、未正式发布,不能宣称完整线上小程序已更新。
下表是来源适用性结论,不是新增业务验收矩阵或功能用例结果。Supported等只表示源回执相互支持;不把CI、上传、审查提升为线上用户路径测试。
| 审查项 | 结论 | 源回执(相对release/) | 核对结果/边界 |
|---|---|---|---|
| REL-SOURCE | Supported | package.md、candidate.json、operations-preflight.json、source-commits.json | 来源记录8/4/16文件hash匹配,三个sourceCommit有归属;只读复用53开发+13QA,未重算28代码hash、未运行功能测试;真实双会话未测已由最新发布授权明确接受,不升级为Pass。 |
| REL-BACKEND | Supported | backend-production-git.json、cnb-transport-diagnostic.json、backend-preflight.json、backend-runtime.json | 精确f1aadbdf与v1.20.15 CI success一致;旧1.20.14预检仅新0011 CreateModel/AddConstraint;新runtime1.20.15、8文件hash匹配、0011 OK/表存在/剩余计划空;三处DB指纹一致;5服务记录同imageId,不扩称五服务全量健康测试。 |
| REL-SNAPSHOT | Supported | manifest-recovery.json、snapshot-import-preview.json、snapshot-import-receipt.json | 恢复/preview/apply均同dd5d409c…a8428;43 create/43 committed readback,公开字段和目标映射匹配;保护前后Task6530/Cost6686/MeetingExpert0/Profile73一致、增量全0;只快照INSERT,未补5条无目标、无热点写/新备份。源文件恢复与导入未再导出源数据是不同动作,不将sourcePersistedToFile=false误作原批准manifest不存在。 |
| REL-BFF-STAGING | Supported | bff-staging-git.json、bff-staging-ci.json、bff-staging-runtime.json | b2533f81候选/tag/CI/runtime revision一致,实际package0.1.2-beta.0及编译历史快照适配存在;运行镜像staging alias与CI语义一致,旧version-tag支持脚本guard失败保留。 |
| REL-BFF-PRODUCTION | Supported | bff-production-git.json、bff-production-ci.json、bff-production-runtime-diagnostic.json、bff-production-fixed-tag-deploy.json、coolify-transport-diagnostic.json、bff-production-fixed-tag-api.json、bff-production-runtime.json | 旧实际v0.1.1的诊断与CLI mutation失败保留;context/auth只读核验后,官方PATCH仅docker_registry_image_tag与POST deploy各200;最终v0.1.2实际revision27f4b09a等于批准候选,编译适配存在。CI成功本身不当作运行生效;未改原生产15秒/测试30秒上游参数。 |
| REL-MINI-UPLOAD | SupportedDevelopmentUploadOnly | mini-prepared-git.json、mini-staging-ci.json、mini-staging-upload.json、mini-production-git.json、mini-production-ci.json、mini-production-upload.json | ea3436d7/robot1/test与1c10796b/robot2/production分别精确对应CI候选,上传开发版stage success,built API隔离guard已核,Mini请求20秒;两份upload均明确未提审、未发布。不能标小程序线上已更新。 |
| REL-GIT-CLOSURE | SupportedAtOpsReceiptTime | receipt.json backendGitClosure、backend-production-git.json、bff-mini-git-closure.json | Backend closure passed、local/live main同f1aadbdf,生产Git来源clean=true;BFF/Mini显式clean、无进行中Git操作、本地/实时remote main同27f4b09a/1c10796b。仅审Ops记录时点,不重跑Git或推断之后永不漂移。 |
| REL-WECHAT | Waiting/NotReleased | browser-replacement.json、wechat-platform-state.json、mini-production-upload.json | 唯一替代Space1/p3已handOff用户,源状态为登录前且扫码区未显示二维码;reviewSubmitted=false/published=false。未操作浏览器、未再次催扫码。该项不是Fail,正式小程序版本尚不能宣称生效。 |
| REL-BACKEND-STAGING | NotExecutedScopeBlocked | backend-staging-blocker.json、package.md | preview两条无关销售提交保留,未创建beta3/推送/部署测试Backend;最新授权准许停止该扩范围动作并独立推进生产。不能将BFF staging和Mini测试上传概括为整套Backend测试部署已完成。 |
源SHA、运行候选与顺序¶
- 原批准manifest SHA256:
dd5d409c9cb8e482281548afd960fd9ada3195cd5f7c9dce4c601ee9643a8428。恢复→preview→apply同SHA;43公开关系对应43既有会议,剩余5条无目标未补造;不是全部48条已恢复。提交后readback43及保护四类增量0均来自同一Ops回执、同生产DB指纹。本QA未读取受限源PII或重新执行preview/apply/readback。 - Backend正式v1.20.15 / f1aadbdf12ccdaab79fac748baa03ff06d99c380;BFF staging0.1.2-beta.0 / b2533f813557b458c0d7235448d52a88c5b97e2c;BFF production0.1.2 / 27f4b09aeb24e125c2ab680be355b59799387b44。源CI与实际运行revision/版本、编译适配能衔接。
- Mini测试开发版1.0.8 / ea3436d73696c7524e30202bac4ec61f4629752a(robot1),生产API开发版1.0.8 / 1c10796b4430d386cacac69301a4aabbfe6eeb90(robot2);生产上传不是正式发布。receipt的productionRuntimeVerified=true只用于Backend/BFF,不覆盖Mini平台发布。
失败、偏离和未执行历史保留¶
- operations-deviation.json明确保留两次被禁止的Coolify service读取偏离;源处置为停止该查询并采用已核主机容器只读证据。本次未重做查询,不因后续成功抹去偏离。
- Backend初次AssertionError仅有笼统异常,最终源runtime通过;无法由此倒推出旧断言的具体根因,不写成已证明的某个数据库问题。
- BFF staging最初image-tag guard失败为支持脚本按version tag与CI staging alias不符;最终以运行revision/编译适配核对,旧guard原件保留。
- BFF production原CI仅更新production alias,固定v0.1.1仍运行,实际修正链为CLI失败→context/auth只读诊断→官方API仅镜像tag PATCH/普通deploy→最终runtime0.1.2。保留失败和修正,不能只以流水线success略过。
- Backend staging因无关销售提交未执行;用户已接受不补测和真实双账号未测,原Blocked历史不改Pass。人类最新授权优先于package底部准备阶段的旧“未授权/未发布”描述。
写入与后续边界¶
Operations仍是唯一Git/部署/导入写入者;QA仅写本qa-review文档与现有总index当前审查状态,并把本审查一次追加#29/全文读回。没有产品源码/环境/分支写入,没有提交、推送、部署或生产验证。源Git收尾为Ops当时实时remote证据,本QA不重复查询。
微信Space1/p3已交用户,无需再次请求扫码;保持Waiting/NotReleased。登录、提审、审核或正式发布有新结果时,由原执行负责人仅追加实际差异,不能把本源回执审查视为平台发布授权或完成证明。
本次审查批次/全文匹配收据见writeback-receipt.json。