From 1c5ee377ffd6816e2a32c973bfee070e255c26e8 Mon Sep 17 00:00:00 2001 From: maogeigei Date: Tue, 6 Oct 2026 05:11:12 +0800 Subject: [PATCH] =?UTF-8?q?memory:=202026-10-06=20tab=20=E6=8C=89=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E9=97=B4=E6=8E=92=E5=BA=8F=EF=BC=88=E5=90=AB?= =?UTF-8?q?=20declared=5Fat=20=E8=A2=AB=E5=9D=97=E4=B8=A2=E6=8E=89?= =?UTF-8?q?=E7=9A=84=E9=9D=99=E9=BB=98=E5=9D=91=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .workbuddy/memory/2026-10-06.md | 75 +++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/.workbuddy/memory/2026-10-06.md b/.workbuddy/memory/2026-10-06.md index bbd395d..199fa55 100644 --- a/.workbuddy/memory/2026-10-06.md +++ b/.workbuddy/memory/2026-10-06.md @@ -90,3 +90,78 @@ 配置里的 `taskgraph` 指针(删载体要连"谁指向它"一起查,否则常驻每 10 s 刷 `Errno 2`)。 - 备份:`ai1net-dsh-server/tmp/bak/agent-product-misbuild-20261005/`。 - **交接姿态**:常驻**故意没重起**(用户令"让那个会话自己建立")⇒ **我不再插手该工作区**。 + +--- + +## 三十六、⚠️ 技能总仓「提交/推送」发现**历史分叉**(未决 · 待用户拍板) + +用户 05:0x 说「提交」⇒ 核实两仓后发现**技能仓不能直接推**: + +| 仓 | 本地 | 远端 | 关系 | +|---|---|---|---| +| 工作区 `ai1net-dsh-server` | `746e4f2` | 有上游 | ✅ 正常可推 | +| 技能总仓 `workbuddy_skills` | `5dc6ced`(含 5 个未推提交) | `19101ac` | 🔴 **两边无共同祖先** | + +- 🔴 **远端是"重建的干净库"**:远端唯一提交 `19101ac init: workbuddy_skills 重建,仅收录 session-mechanism` + ⇒ 有人**把远端历史重写过**(`git fetch` 报 `+ fe6ce9f...19101ac master (forced update)`)。 +- 🔴 **本地是旧的多提交历史**:`5dc6ced`/`e4cbd2f`/`935e423`/`4adc431`/`1eec42e` + 更早。 +- ⇒ `git merge-base HEAD origin/master` **为空** ⇒ **无法快进、无法普通合并**。 + 直接 `push` 会被拒(non-fast-forward);要上去只能 **`push --force`(覆盖远端历史)**。 +- ⚠️ **这是不可逆的对外动作**(`--force` 会丢弃远端那个 init 提交)⇒ ⛔ **不擅自决定,必须用户拍板**。 +- ⚠️ 另:技能仓还有 **19 个文件的未提交改动**(515 增/692 删,非本轮产物,疑似别的会话或早前轮次在途) + ⇒ ⛔ **不代它提交**(无边界扫进来=伪造别人的工作)。 +- ⚠️ 推送用 **`git@work.alotbuy.com:maogeigei/workbuddy_skills.git`**(work 域名,非 github) + ⇒ 与 `~/.ssh/config` 里的 github 密钥路由**无关**(别去翻那套)。 + +--- + +## 三十七、看板 tab 改「按创建时间」稳定排序(用户:「tab 的排列顺序 应该按照创建时间顺序来」) + +### 为什么改(活跃度排序的真实毛病) + +- 旧键 `tab_hot` = 该块**最近会话活动**距今分钟数(`age_min`),10-04 定的「最新在运行的排前面」。 +- 🔴 **病根**:会话活动**每次协作都会变** ⇒ tab 顺序**自己会漂**。 + 用户脑子里认的是「第几个 tab 是什么」⇒ 位置一变就**要重新找**,且**无从判断为什么变了**。 +- ✅ 新键 `tab_created` = `goal.json` 的 **`declared_at`**(目标声明时间)—— 目标建立后**不动** + ⇒ 顺序**稳定**。 +- ⚠️ **为什么不用 `topics_declared_at`**:两者多数相同,但 `declared_at` 是**目标本身**的建立时间, + `topics_declared_at` 是**任务类别清单**的确认时间(可能后补/缺失)。语义要取前者。 +- ⚠️ **缺 `declared_at` 的块垫底**(`"~"` 大于任何 ISO 时间串),⛔ **不许猜**一个时间塞进去。 + +### 🔴🔴 本轮最大的坑:`declared_at` 被块**丢掉**了(排序静默失效) + +- 块里的 `goal` **子字典只留 3 键**(`title`/`short`/`acceptance`,`board.py:1795`) + ⇒ `declared_at` **不在里面**。 +- 我第一版从 `_b["goal"].get("declared_at")` 取 ⇒ **恒为空** ⇒ 三块 `tab_created` 全是 `'~'` + ⇒ **排序形同没做**,而"升序"判据**照样绿**(因为三个都一样,升序恒真)。 +- ✅ 正解:在 `_goal_block()` 里**单独带出 `goal_declared_at` 字段**(从**形参 `g`** 取)。 + ⚠️ 从 `g` 取而非回读 `INBOX/goal.json`:peer 块传的是**对方**的 goal ⇒ 取到对方时间,正确。 +- 🔴 **同族教训(第 N 次)**:**块是"精简过的视图",不是 goal 原样** + ⇒ 任何"要参与逻辑的字段"都必须**显式带出来**,⛔ 不能指望它在块里躺着。 + +### 判据重写(附变异对照,证有牙) + +- 夹具改成**时间乱序**(t2 10-01 最老/t0 10-02/t3 10-03),且**文件出现次序就是时间倒序** + ⇒ 排序一旦失效,输出顺序**立刻不同**(⛔ 三个时间同序 ⇒ 判据恒绿,同族栽过)。 +- 新增**真造第四块**(**没有** `declared_at`)⇒ 必须垫底且 `tab_i` 最后一位 + (⛔ 不造这块 ⇒ 判据恒真 = 假绿)。 +- 新增**防回退**判据:源码里 ⛔ 不许再出现 `tab_hot` 当排序键。 +- ⚠️ **我自己写判据时取错层**(`short` 在 `goal` 子字典里,⛔ 不在块顶层)⇒ 判据**恒红**,已修。 + ⇒ 写判据也要先确认"字段在哪一层",⛔ 别凭印象。 +- **变异对照**:A 排序 `reverse=True` ⇒ 红 ✅|B 排序键换回 `tab_hot` ⇒ **五条同时红** ✅|还原 ⇒ 绿 ✅。 + +### 验收 + +- `selftest` **PASS 97 / FAIL 0**|`install.py --verify` **✅ 全绿**|`--manifest` 56 份/语法失败 0。 +- 真起看板实测:`i=0 本机协作(2026-10-01T22:29)` → `i=1 vibe-product(2026-10-05T18:04)` ✅。 +- ⛔ **`board.py` 代码改动 ⇒ 必须重启看板**(走 `dsh-board-keepalive` 计划任务,⛔ 不手动裸起)。 +- 提交:`5e77f0e`(技能仓,未推送)。 + +### ⚠️ 顺带记录:本机裸 `nohup python board-launch.py &` 活不过工具调用边界 + +- 实测:`nohup ... &` 起看板 ⇒ 打印了「看板已起」但**进程随即消失**(工具调用结束即被收走)。 +- ✅ **唯一可行起法 = 触发计划任务** `dsh-board-keepalive`(`Start-ScheduledTask`) + ⇒ 与记忆里「常驻起来只有两条路:计划任务 / 会话后台任务+stdout 重定向」一致。 + + +