docs(05): 锚点补记三十三 —— 续接锚点(仓库现状/本轮八项已完成及其真机证据/保活长跑在跑/待主人拍板四条/环境与两个会踩空的地方/两条教训)
This commit is contained in:
1 parent
827f0e61a4
commit
33c320219a
1 file changed
+44
@@ -1744,3 +1744,47 @@ adb shell dumpsys activity services top.yeij.cyrene | grep -E "KeepAliveService|
|
||||
- ⚠️ **一条待主人定的观感取舍**:预览正文仍只给 3 行(`SHARE_PREVIEW_TEXT_LINES = 3`),而输入框不再承载全文 ⇒ **发送前读不到整段正文**。两条路:让预览那块可滚动/展开,或接受只能看开头。
|
||||
- 附一条**测量教训(我的锅)**:`adb shell am start … --es android.intent.extra.TEXT "带空格的值"` 里的值会被**空格拆开**(我那次 URL 就是这样丢的,不是 App 吞的);要传带空格/URL 的值得先转义,或换成 `file://` + `--eu`。
|
||||
2. **保活长跑重新起跑**(第 1 次被「装新包」打断 —— `adb install -r` 必然杀掉 App,这是必然的、不是 bug):新基线 **20:13:35**、pid **25584**、对端 WS **1**、App 已在后台;新的 2 小时复查已挂上(到点自动叫醒我)。
|
||||
|
||||
---
|
||||
|
||||
## ★★ 锚点补记三十三 · 续接锚点(2026-10-06 深夜 · 上下文将满前落地)
|
||||
|
||||
> 压缩或换会话后**先读这一节**:现状、在跑的东西、待办、环境、教训都在这。
|
||||
|
||||
### 1. 仓库现状
|
||||
- HEAD = **`827f0e6`**(= `origin/android`);主仓只有 `devdocs/02` 一处脏 —— **那是后端会话的在途改动:别 `checkout`、别提交**。
|
||||
- 主树全量 `testDebugUnitTest --rerun` **真跑**:**110 suite / 1332 tests / 0 失败 / 0 error**。
|
||||
- 本批的 worktree / 分支 / 构建锁**全清**(`git worktree list` 只剩主树)。
|
||||
|
||||
### 2. 本轮做完的(全部已合并推送 + 真机验收)
|
||||
| 项 | 提交 | 证据 |
|
||||
|---|---|---|
|
||||
| ① 后台通知(只她主动说的那档) | `53c7494` | 切后台 ⇒ 注入 `proactive_message` ⇒ 通知栏「Cyrene / 昔涟 / 她的话」;**点它回到 App 并切主会话,那条消息在屏幕上** |
|
||||
| ② 退出登录确认框 | `6505512` | `退出登录?` + 说明 + 取消/退出登录;**取消后没登出** |
|
||||
| ③ 保活文案 + 「去系统设置」 | `6505512` | 开着含「24 小时内累计最多 6 小时」;**撤掉权限后**出现「去系统设置」 |
|
||||
| ④ `INTERNET` 显式声明 | `f3d8d28` | merger 报告:`ADDED from app/src/main/AndroidManifest.xml` |
|
||||
| ⑤ 构建锁协议三条 | `ed0824f` | 文档 |
|
||||
| ★ 分享确认面板(含语义更正) | `62f552f` → **`30c5345`** | 分享进来**不再直接发**(对端无 chat 帧);面板:预览留正文 / 输入框空 + 「加一句描述…」/ 取消·发送;**拼接端到端验过**:`"text":"要分享的正文:看这个\n\nMyCaption123。"` |
|
||||
| 保活服务本身 | `62f552f` | 开关开 ⇒ `isForeground=true`、`types=dataSync`、`channel=keep_alive` 静音常驻;关 ⇒ 停 |
|
||||
| 我补的一处 | `77fbedc` | 「去系统设置授权后回来服务没起」→ 给 `AppPresence` 补同源 StateFlow 当 key |
|
||||
|
||||
### 3. 在跑 / 待续
|
||||
- **保活长跑(第 2 次)**:基线 **20:13:35**、pid **25584**、对端 WS **1**、App 已后台。挂着后台任务(`sleep 7200` ⇒ 约 **22:13** 自动复查):① 进程还在吗(PID 应与 25584 一致)② 前台服务还在吗 ③ 对端 WS 还在吗 ④ **注入一条 `proactive_message`,看后台还弹不弹通知**。结果写进本节或下一节。
|
||||
|
||||
### 4. 待主人拍板 / 待办
|
||||
1. **分享面板预览正文只有 3 行**(`SHARE_PREVIEW_TEXT_LINES = 3`):输入框不再承载全文后,**发送前读不到整段正文** —— 让预览可滚动/展开,还是接受只看开头?**等主人一句话**。
|
||||
2. **通知恒用 id=2** ⇒ 她连说几句时后到的覆盖先到的(要「一事一条」得按 id 生成通知 id)。
|
||||
3. **通知挂在 `SessionsViewModel`**(Activity 存活期内)⇒ 从最近任务划掉 Activity 后收不到帧、不弹(要覆盖得把订阅提到进程级)。
|
||||
4. **转屏会静默丢掉「已取走」的那份分享**(面板状态是 `remember(sessionId)`,`take()` 不可逆)。
|
||||
5. **S4 回收**:正向证据有了(超 3 格后回到最早的次级 ⇒ 重新拉一次 `messages`),**对照组没跑干净**。
|
||||
6. **给后端的**:① 仍在等他们答「`tool_execution.end` 能不能带可选 `resultSummary`」;② 已去核对一条事实(`proactive` 在 `data` 里而非帧壳顶层,他们注释写「帧顶」);③ **新登记一条依赖**(实时帧的 `id` 与落库帧的 `message.id` 必须是同一条落库行 —— 我们据此去重);④ 新问一句 `channel_persisted` 会不会也带 `proactive`。**给对面的提示词我已交给主人**(贴过去即可)。
|
||||
7. **推送**:主人继续研究,等他。
|
||||
|
||||
### 5. 环境(接着干之前先核)
|
||||
- 模拟器 `emulator-5554` 在跑;App 已登录(**假后端**,地址栏 `localhost`);`adb reverse tcp:80 → tcp:18090`。
|
||||
- ⚠️ **假后端 18090 那个后台任务会到点被系统收** —— 长跑复查前**先确认 18090 还在**,不在就重启:`python devtools/fake-backend/fake_backend.py --port 18090`(重启后它的 store 清空、App 会重连,对「保活」这件事无影响)。
|
||||
- 真后端 `10942` 活着、**没碰**。
|
||||
|
||||
### 6. 本轮新增的两条教训
|
||||
1. **`adb … am start --es android.intent.extra.TEXT "带空格的值"` 会被空格拆开** —— 我测试分享时那个 URL 就是这么丢的(**不是 App 吞的**)。要传带空格的值得转义,或改用 `file://` + `--eu`。
|
||||
2. **用户说「这里有点奇怪」时,先想清那个控件的语义,别急着按「渲染重复」去改** —— 我把「输入框被预填了正文」误判成「预览多余」,白派了一支(已停)。**语义问题优先问清楚再动手。**
|
||||
Reference in new issue
Block a user