# 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状态。