You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.1 KiB
6.1 KiB
HANDOFF — customer-demo-ref wayfinder 全图收官(2026-09-12)
写给接续 agent:地图已 done,无剩余开发工作。本文档只覆盖「状态快照 + 用户回来后的可能动作 + 复跑速查 + 本会话新踩的坑」。细节一律引用落盘工件,不重复。
1. 状态快照(一句话)
e:\code\crm-backend-matt\.scratch\customer-demo-ref\ 的 15 票全部 resolved,map.md Status=done;票 14 冒烟第八跑 40/0 ALL_PASS(176.4s);票 15 四标准自检与双仓清单已落盘;唯一待办 = 用户审查双仓未提交变更并自行提交(agent 纪律不碰 git)。
- 权威状态:
map.md(Decisions 15 行 + Destination 验收对照块) - 各票结论:
issues/01..15-*.md的## Answer节(全部已写) - 验收自检:
assets/acceptance-selfcheck.md(四标准逐条 ✓) - 未提交清单:
assets/uncommitted-changes.md
2. 本段会话(收尾段)完成了什么
- 票 14 第七/八轮:诊断脚本
demo/_t14d7.py实锤三大根因(seed 联系人职务不在字典→batchEdit 被校验拦截;quickAdd 后 _contacts 旧快照;pool+ASSIGNED 视图与公海口径恒互斥)→ 第七轮 39/1;第八轮实锤 demo onclick 陷阱并修复 → 40/0 全绿。全程记录在issues/14-smoke-script.mdAnswer。 - 票 15:
assets/acceptance-selfcheck.md+assets/uncommitted-changes.md落盘 + map 收口(Status=done、验收对照块、Not yet specified 清空、Decisions 补 09/10/11/14 四行)。 - 环境:重建 fat jar 并重启 8080(旧 jar 落后源码导致 project/page 404);构建通道与 jar 文件锁坑已沉淀到记忆「crm-backend-matt 构建与脚本执行通道」。
3. 用户回来后最可能的动作(按概率排序)
| 动作 | 做法 |
|---|---|
| 审查未提交变更 | 打开 assets/uncommitted-changes.md:backend 51 行全属 .scratch/customer-demo-ref(M10+??37,其中诊断脚本/日志标注可删);文档仓 E:\code\crm-api-docs 仅 2 个前序迁移遗留目录。提交由用户执行 |
| 试跑 Demo | 直接浏览器打开 demo/index.html?api=http://localhost:8080(服务若已停,见 §4 起服);登录页 uid 填 739564171091247104(admin 罗伟健)debug 直登;验收指北同 assets/acceptance-selfcheck.md §4 |
| 复跑冒烟 | 见 §4 速查;脚本幂等(sweep→seed 自举),可重复执行 |
| 处置 8080 服务 | 本会话起的服务仍在后台运行(新 jar);若不需要可 taskkill,不影响任何落盘工件 |
4. 复跑速查(冒烟/起服)
- 解释器(唯一可用组合):
E:\code\crm-backend-matt\.scratch\customer-e2e\.venv10\Scripts\python.exe -X utf8 .scratch/customer-demo-ref/demo/smoke.py(playwright+pymysql+openpyxl 齐备;长任务必须前台跑,后台进程树会被会话压缩杀死)。 - 起服:
SPRING_PROFILES_ACTIVE=verify+ MinIO env(AK/SK 凭据已内置crm-app/src/main/resources/application.yml默认值,无需明文传入)+java -jar crm-app\target\crm-app-1.0.0-SNAPSHOT.jar(corretto-17)。 - DB=远程共享库(凭据同上内置);seed 幂等自举(sweep 先于 ensure_seeds,e2c-dr* 用后硬删;2d 把查重模式归位 FUZZY(2));报告落
demo/smoke-report.json。 - fat jar 重建:先 taskkill 占 8080 的 java(文件锁→repackage rename 失败),删 target 旧 jar,再走 IDEA bundled mvn(沙箱需越权;通道详见记忆「crm-backend-matt 构建与脚本执行通道」)。
5. 本会话新踩/复用的坑(未沉淀进记忆的部分)
- demo onclick 陷阱:
dlgOpen把fn直接挂btn.onclick→ 浏览器把 PointerEvent 作为首参传入。任何async function doX(confirmSimilar)形态的按钮回调都会把事件对象序列化进表单(如confirmSimilar=[object PointerEvent]→ 后端 400)。修法=首参防御:(cf === true || cf === 'true') ? true : undefined(qs 会跳过 undefined)。doEdit/doCreate 已修;给新对话框按钮回调加参数时必踩,先想这个。 - edit 的 L2 needConfirm 假成功:后端 edit 相似命中时返回 code=0 +
needConfirm:true不落库——demo 侧必须显式处理(doEdit 已补 simbox 分支,同 doCreate 契约),否则「toast 成功但 DB 没变」。 - pool 工作台视图互斥:
fViewType默认 ASSIGNED 与公海 owner IS NULL 恒冲突(CustomerMapper L83)——demo pool 页签在默认视图下恒空,冒烟侧先呈现现象再清视图。 - seed 自举顺序:sweep 必须先于 ensure_seeds,否则上轮 seed 被 find 命中不重建、随即被 sweep 清掉,整轮查重基线缺失(冒烟步 9/27 假阴)。
- 中文 URL:任何拼接中文查询参数必须
urllib.parse.quote(本 effort 已三次踩)。 - 诊断脚本临时文件:
demo/_t14d7.py(DB 职务+pool+edit 三合一取证)保留作证据,其余_quickcheck*/_q.py类可删。
6. Suggested skills(按场景)
| 场景 | skill |
|---|---|
| 用户要求把本次成果同步成 Bruno 文档/新 .bru | bruno-sync(注意 config sourceRoots 需含目标模块目录) |
| 用户要继续下一张 wayfinder 地图/大块工作 | wayfinder |
| 用户报 demo/后端行为异常要求诊断 | diagnosing-bugs;浏览器层验证用 webapp-testing |
| 用户要求 review 本次全部改动 | code-review(review_scope=explicit_target,指定 .scratch/customer-demo-ref) |
| 需要看图/截图(非多模态会话) | vision-mcp(AGENTS.md 有调用规范) |
7. 关键文件索引
- 地图/票/资产:
e:\code\crm-backend-matt\.scratch\customer-demo-ref\(map.md、issues/、assets/、demo/) - 冒烟报告:
demo/smoke-report.json(第八跑 40/0 + api_urls 91 路径 + http_fails 空) - 取证脚本:
demo/_t14d7.py、demo/_run7.log、demo/_run8.log、demo/_jarbuild.log - 契约权威:
.scratch/customer-module/API-SUMMARY.md(85 端点);原型树:.scratch/api-docs-reorg/lanhu-tree-v29.md - 缺陷台账:
.scratch/customer-frontend-handover/gap-report.md+customer-defectfix/FIX-REPORT.md