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

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. 本段会话(收尾段)完成了什么

  1. 票 14 第七/八轮:诊断脚本 demo/_t14d7.py 实锤三大根因(seed 联系人职务不在字典→batchEdit 被校验拦截;quickAdd 后 _contacts 旧快照;pool+ASSIGNED 视图与公海口径恒互斥)→ 第七轮 39/1;第八轮实锤 demo onclick 陷阱并修复 → 40/0 全绿。全程记录在 issues/14-smoke-script.md Answer。
  2. 票 15assets/acceptance-selfcheck.md + assets/uncommitted-changes.md 落盘 + map 收口(Status=done、验收对照块、Not yet specified 清空、Decisions 补 09/10/11/14 四行)。
  3. 环境:重建 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 陷阱dlgOpenfn 直接挂 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.pydemo/_run7.logdemo/_run8.logdemo/_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