edit | blame | history | raw

2026-06-23 MV6touch 起步

用户目标

从最新稳定基线拉出包含 MV6touch 关键词的新分支,目标版本 2.1.0 / 20100,实现触摸功能链路:

App 收到触摸片上报 -> 前端计算快/中/慢 -> 按速度和部位给后端 -> 后端返回对应叫床声音频 -> 插入当前通话播放链路。

已完成事项

  • 已重新读取全局与项目入口规则。
  • 已读取研发前置讨论、代码治理、任务连续推进、交付门禁、发布版本、QA 规则。
  • 已确认 App 稳定基线 worktree:/Users/ar/Projects/langmei/.worktrees/lm-app-dev-app-shell-merge-2064,分支 dev-app-shell
  • 已确认 SDK 稳定基线 worktree:/Users/ar/Projects/langmei/lm-sdk,分支 dev-sdk
  • 已对 App 与 SDK 基线执行 fetch --prunepull --ff-only,两者均为最新。
  • 已创建 App 功能 worktree:
  • 路径:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210
  • 分支:codex/20260623-MV6touch-210
  • 起点:origin/dev-app-shell,HEAD 48cb9dd
  • 已创建 SDK 功能 worktree:
  • 路径:/Users/ar/Projects/langmei/.worktrees/lm-sdk-MV6touch-210
  • 分支:codex/20260623-MV6touch-210
  • 起点:origin/dev-sdk,HEAD 5b892b1
  • 已创建本轮 TODO:
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/TODO.md
  • 已检测 Android 设备:ADB 识别到 cec384cb,状态为 unauthorized
  • 已完成本轮版本口径纠偏:当前线上/稳定版本为 2.0.64 / 20065,本轮目标为 2.1.0 / 20100,不得使用低于线上版本的目标号。
  • 已新增后端触摸过滤目标单测 TouchSensor2AudioFilterTest,覆盖触摸快/中/慢速度标签、部位标签和 TouchYin + ThreeAxis 同包回退三轴处理;目标测试通过。
  • 已完成 DEV 音频数据只读检查:候选角色存在速度标签音频,但没有验证到 1胸2B部位0 与速度标签交集命中,因此后端必须保留速度标签 fallback。

关键决策与发现

  • 触摸逻辑源头应优先改 SDK,再同步/集成到 App。
  • 当前 App worktree 的 AGENTS.md 仍是旧 logo-only-restart UI-only 规则,和本轮触摸功能目标冲突;代码实现前需要更新或明确废止旧规则。
  • 当前 App manifest.json 起点是 2.0.64 / 20065;用户已纠正目标版本应为 2.1.0 / 20100,因为本轮是重大功能变化,不应生成低于线上版本的安装包。
  • 版本纠偏:此前提到的任何低于当前线上版本的目标号都是错误口径;正确判断是当前线上版本 2.0.64 / 20065,本轮重大功能更新目标 2.1.0 / 20100
  • 当前触摸逻辑已存在 0x31/0x32/0x33 路由,但发给后端的 timeIntervalMs 固定为 400,不能表达真实快/中/慢。
  • App 目标版本已同步为 2.1.0 / 20100
  • SDK 源头 noStory.vue 与 App ignored 运行副本 noStory.vue 当前一致。
  • 后端 Java 本地编译和触摸过滤目标单测通过,但本轮 Java 后端逻辑尚未部署到 DEV,不能把真实 /engine/input 响应验证标记为完成。
  • 真实 QA 中需要用户操作触摸片时,先播放提醒音频 /Users/ar/.codex/audioalert/Langmei-真机测试提醒.mp3,再提示用户开始触摸。
  • 本机当前没有可用的 lmrobot-app 全链路运行环境:11002/11012/8088/18088/3306/6379 均无监听,且未发现 dockermysqlredis-server 命令;真实 /engine/input 验证需要先补齐本地依赖或部署到等价 DEV 环境。
  • 历史状态:Android 手机当时安装包仍是 2.0.64 / 20065,不是本轮 2.1.0 / 20100;该状态已在 17:49 更新中解决。
  • 历史状态:HBuilderX 当时无法生成 Android 测试包,表现为登录/云端队列阻塞;后续已确认登录并等待云打包队列完成,详见 17:49 更新。
  • 已新增 App 打包交付说明:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/PACKAGING_HANDOFF.md
  • 已新增后端部署联调说明:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/BACKEND_DEPLOYMENT_HANDOFF.md

文件变更

  • 新增:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/TODO.md
  • 新增:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/DEV_AUDIO_DATA_CHECK.md
  • 新增:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/PACKAGING_HANDOFF.md
  • 新增:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/BACKEND_DEPLOYMENT_HANDOFF.md
  • 新增:/Users/ar/Projects/langmei/.worktrees/dudu-java-MV6touch-210/yudao-module-lmrobot/yudao-module-lmrobot-engine/src/test/java/cn/iocoder/yudao/module/engine/service/core/filter/read/TouchSensor2AudioFilterTest.java
  • 新增:本会话记录文件。

未决问题

  • 后端本轮改动需要部署到 DEV 或等价测试环境后,才能验证真实 /engine/input 是否返回触摸快/中/慢音频。
  • 如继续本地联调,需要先准备本地 MySQL、Redis 和 lmrobot-app,否则只能做编译/单测/只读数据验证。
  • 如继续真机触摸 QA,需要先通过已登录 HBuilderX/LM-APP 打包员生成并安装 2.1.0 / 20100 Android 测试包。
  • 需要 Android 真机进入辛灵通话页,验证触摸日志、后端响应、音频播放、无异常震动和无白页。
  • 需要确认辛灵在 DEV/目标环境中的准确 roleId;当前只读音频检查覆盖了候选 roleId,尚未证明具体“辛灵”身份。

后续建议

  1. 先处理分支规则冲突和版本策略。
  2. 再在 SDK 分支实现触摸速度采样与 timeIntervalMs 计算。
  3. 同步 SDK 编译产物到 App 分支。
  4. 用 Android 真机和硬件完成触摸慢/中/快 QA。

2026-06-23 17:49 更新

新增完成

  • HBuilderX 已确认登录账号:shanghai3168@gmail.com
  • Android 云打包已完成,产物:
  • /Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/unpackage/release/apk/__UNI__693A991__20260623171600.apk
  • 大小:49M
  • SHA256:f78e4aaa4cfaea95c63d26a4e7d204310ed0b8263e3690316943859b68ef4c63
  • 包内 UniApp manifest 验证通过:
  • versionName=2.1.0
  • versionCode=20100
  • 包内触摸关键标记验证:
  • handleTouchSensor
  • sdk.touch.sample
  • speedLabel
  • timeIntervalMs
  • mainAudio
  • feedbackAudio
  • 已通过 adb install -r 覆盖安装到 Android 真机,没有卸载旧包。
  • 手机当前实际安装版本:
  • versionName=2.1.0
  • versionCode=20100
  • lastUpdateTime=2026-06-23 17:49:06
  • App 启动 smoke 通过:
  • App 进程已启动,PID 9622
  • 前台窗口为 langmei.boborobots.com/io.dcloud.PandoraEntryActivity
  • 截图证据:/Users/ar/Projects/langmei/.worktrees/lm-app-MV6touch-210/docs/round5/evidence/android-2.1.0-launch-smoke.png
  • 截图显示启动到设备连接页,非白屏。

最新未决

  • 仍需做 Android 真机触摸慢/中/快三档 QA。
  • 仍需确认后端本轮 Java 改动是否已部署到 DEV;未部署前,端到端 /engine/input 返回快/中/慢音频不能标记为通过。
  • 需要用户真实操作触摸片前,必须先播放 /Users/ar/.codex/audioalert/Langmei-真机测试提醒.mp3

2026-06-23 18:04 侧会话更新

0x30 协议含义确认

  • 0x30 不是震动命令,而是设备上行的传感器事件。
  • 项目协议映射中 0x30 = CMD_SCREAM,历史注释为“尖叫指令(晃动感应)”。
  • 业务含义:三轴传感器 / 晃动 / JJ 冲击。
  • 十进制值:48
  • 对应后端 sensor:sensorType = ThreeAxisoperationType = JJImpact
  • 0x30 的触发间隔 timeIntervalMs 用于判断快/中/慢。
  • 对比:
  • 0x31:触摸胸。
  • 0x32:触摸腿。
  • 0x33:触摸 B 点。
  • 0x45:震动强度控制,才是真正下发给硬件的震动命令。

异常震动判定边界

  • 如果日志中先出现 0x30,随后客户端本地进入 CMD_SCREAM / ThreeAxis / JJImpact,再下发 0x45 ...,则震动来源不是 0x30 协议本身,而是 App 当前代码在收到 0x30 后触发了本地震动逻辑。
  • 该结论仅确认协议含义与事件链路边界,侧会话没有修改代码、配置、Git 状态或主线程 TODO。