From e5e61e131d5b7c50701a9b3d1000cc29bf381311 Mon Sep 17 00:00:00 2001 From: AskaEth Date: Tue, 6 Oct 2026 21:02:43 +0800 Subject: [PATCH] =?UTF-8?q?docs(05):=20=E9=94=9A=E7=82=B9=E8=A1=A5?= =?UTF-8?q?=E8=AE=B0=E4=B8=89=E5=8D=81=E5=9B=9B=20=E2=80=94=E2=80=94=20?= =?UTF-8?q?=E5=8E=8B=E7=BC=A9=E5=90=8E=E7=BB=AD=E6=8E=A5=EF=BC=88W54=20?= =?UTF-8?q?=E4=B8=89=E6=94=AF=E5=B9=B6=E8=A1=8C=E5=9C=A8=E9=A3=9E=EF=BC=9A?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E4=B8=80=E4=BA=8B=E4=B8=80=E6=9D=A1/?= =?UTF-8?q?=E8=BD=AC=E5=B1=8F=E4=B8=A2=E5=88=86=E4=BA=AB/=E9=A2=84?= =?UTF-8?q?=E8=A7=88=E5=8F=AF=E6=BB=9A=E5=8A=A8=EF=BC=9B=E7=AC=AC=E4=BA=8C?= =?UTF-8?q?=E6=89=B9=E8=BF=9B=E7=A8=8B=E7=BA=A7=E8=AE=A2=E9=98=85=E5=BE=85?= =?UTF-8?q?=E5=BC=80=EF=BC=89+=20=E4=B8=BB=E4=BA=BA=E4=B8=89=E6=9D=A1?= =?UTF-8?q?=E6=8B=8D=E6=9D=BF=EF=BC=88=E9=A2=84=E8=A7=88=E8=A6=81=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8+=E5=B1=95=E5=BC=80=E3=80=81=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E8=AF=8D=E5=B7=B2=E8=B4=B4=E7=AD=89=E5=9B=9E=E6=89=A7=E3=80=81?= =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=BE=85=E7=A0=94=E7=A9=B6=EF=BC=89+=20?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E6=A0=B8=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- devdocs/05-开发进度与交接.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/devdocs/05-开发进度与交接.md b/devdocs/05-开发进度与交接.md index c8f5e2b..973684d 100644 --- a/devdocs/05-开发进度与交接.md +++ b/devdocs/05-开发进度与交接.md @@ -1788,3 +1788,31 @@ adb shell dumpsys activity services top.yeij.cyrene | grep -E "KeepAliveService| ### 6. 本轮新增的两条教训 1. **`adb … am start --es android.intent.extra.TEXT "带空格的值"` 会被空格拆开** —— 我测试分享时那个 URL 就是这么丢的(**不是 App 吞的**)。要传带空格的值得转义,或改用 `file://` + `--eu`。 2. **用户说「这里有点奇怪」时,先想清那个控件的语义,别急着按「渲染重复」去改** —— 我把「输入框被预填了正文」误判成「预览多余」,白派了一支(已停)。**语义问题优先问清楚再动手。** + +## ★★ 锚点补记三十四 · 压缩后续接:W54 三支在飞 + 主人的三条拍板(2026-10-06 21:05) + +> 上一节(三十三)之后上下文压缩过一次。本节记「压缩后我做了什么」+ 主人刚拍的三条。 + +### 1. 压缩后排掉的三件不需要拍板的收尾活(三支并行,文件集互不重叠) + +| 支 | 内容 | 落点(关键文件) | worktree / 分支 | +|---|---|---|---| +| **W54A** | 通知「一事一条」——通知 id 与 `PendingIntent` requestCode 改成按消息**稳定派生**,修「她连说几句时后到的覆盖先到的」 | `core/notify/ProactiveNotification.kt`(`PROACTIVE_NOTIFICATION_ID = 2` / `PROACTIVE_OPEN_REQUEST_CODE = 2` / `notify(...)`)、`core/notify/ProactiveNotifier.kt` 的 `post` 签名、`app/AppContainer.kt:71` 装配点 | `../Cyrene-For-Android-wt54a` / `wt54a/notify-per-message` | +| **W54C** | 转屏**静默丢掉**「已取走但未确认」的那份分享(`take()` 不可逆 + 面板状态是 `remember(sessionId)`) | `ui/chat/ChatScreen.kt` 分享落地那段、`ui/chat/ChatViewModel.kt`(候选落点) | `../Cyrene-For-Android-wt54c` / `wt54c/share-survives-rotation` | +| **W54D** | 分享确认面板预览区**可滚动**(3 行高度上限不变,用户发送前能读到整段正文) | `ui/chat/ShareConfirmPanel.kt`(`SHARE_PREVIEW_TEXT_LINES = 3`)+ 分享测试 | `../Cyrene-For-Android-wt54d` / `wt54d/share-preview-scroll` | + +三支的公共约束:不引新依赖、禁 Material3、禁碰 `devdocs/**`、只本地 commit 不 push、Gradle 走 `D:/Project/Code/Uni/.cyrene-build.lock`(**只删自己那行**)。A 还禁碰 UI;C 禁碰 `ShareConfirmPanel.kt`(D 的地盘);D 禁碰 `ChatScreen.kt`/`ChatViewModel.kt`(C 的地盘)。 + +**第 2 批(未开)**:订阅提到**进程级**(现在通知挂在 `SessionsViewModel`,Activity 一被划掉就收不到帧)——它要动 `AppContainer.kt` 与订阅装配,跟 A 同一片区域,**等 A 合入后再开**,避免同批冲突。 + +### 2. 主人 2026-10-06 21:0x 的三条拍板(原文要点) + +1. **分享面板预览:「可以滚动 可以展开」** —— 两个都要。所以 D 支做完滚动后,**还要追加「展开/收起」**:默认仍是 3 行 + 内部滚动,长正文时给一个展开控件,展开后能读全文,再点收起。(D 的 prompt 里只写了滚动,**追加那一轮要另发**,不要重做。) +2. **给后端的提示词「贴过去了 等他回复」** —— 等的是:① `tool_execution.end` 能否带可选 `resultSummary`;② `channel_persisted` 会不会也带 `proactive`;③ 实时帧 `payload.id` 与落库帧 `message.id` 是否**同一条落库行**(我们据此去重)。**收到回执前不要据此改工具卡 UI。** +3. **推送:「我还在研究」** —— 等他,不主动推进。 + +### 3. 此刻环境(动手前照核) +- HEAD 曾=`33c3202`(= `origin/android`),主仓唯一脏是 `devdocs/02` —— **后端会话的在途改动,别 checkout、别提交**。 +- 模拟器 `emulator-5554` 在跑;App pid **25584**、`KeepAliveService` 在、App 在**后台**(前台是 launcher)。 +- 假后端 `127.0.0.1:18090` 活着(**store 已清空**:`sessions[].messages = 0`,说明它重启过,App 会自愈重连,对保活判定无影响);真后端 `10942` 活着、**没碰**。 +- ⚠️ **22:13 长跑复查之前不要操作 App 前台**(一操作就把「后台存活」的基线破坏了)。S4 对照组同理,**排到长跑之后**。