admin
|
61962f1726
|
补入本地今日改动:session-mechanism + product-planning(按用户令改推本仓库)
背景:旧远端 work.alotbuy.com 今天一直连不上(222/22 端口都不通)⇒ 今天本地累积多条提交推不上去;
用户令改推本仓库 [email protected]:admin/workbuddy_skills.git(只推这 5 个技能:
browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)。
本次改动(对照本机已安装的技能源逐文件 md5 比对得出,⛔ 是「补差异」不是「整体覆盖」):
· session-mechanism:含今天两条钩子改动(派活收工闸、点名加载收工闸)、
rules.md §9「只写正向范围」、检查程序静默阈值 10→6、检查排期补 workspace_scope(修未分组)、
以及今天修的三处陈旧指针(旧技能名 dsh-decision / agent-operating-rules 与旧路径编号)。
· product-planning:第③段「随段样式风格库」并入 design-system-tiaoyue、竞品分析方法论重写等。
· humanizer / humanizer-zh:已一致,零改动。
· browser-harness:比对出的 7 个「本地独有」全是**它自己 .gitignore 里就排除的**构建产物
(src/*.egg-info/ 与 uv.lock)⇒ 按该技能自己的规矩不推(用户口径「不要环境」)。
仓库级配置(与旧仓一致):core.autocrlf=false;身份 maogeigei <[email protected]>。
⚠️ 克隆时仓库默认 autocrlf=true(会把行尾转成 CRLF)⇒ 已改回 false 并重新暂存,
核对索引 blob 均为 LF、真实差异 23 个(⛔ 不是把几百个文件一起改掉)。
|
2026-10-07 20:33:49 +08:00 |
|
admin
|
0abd33b3a0
|
补入 oil-ui-pro(上一提交按授权清空时移出,本轮按用户要求加回)
|
2026-10-07 16:06:27 +08:00 |
|
admin
|
777f7fe5d0
|
重开仓库内容:改推五个技能(browser-harness / humanizer / humanizer-zh / product-planning / session-mechanism)
按授权清空原有内容后重新提交(原 oil-ui-pro 一并移出,可从历史恢复)。
browser-harness 剔除 .venv 等运行环境;根 .gitignore 补记 .venv/ 与 node_modules/。
|
2026-10-07 16:06:02 +08:00 |
|
admin
|
9a152a1952
|
加载闸门两处收口:派活族不受冷却 + 冷却跳过留痕(用户问「有什么影响 该如何处理」)
一、影响评估(实测,会话 b232218f)
- 冷却窗口 COOLDOWN=300;旧实现:命中 → 查冷却 → 落在窗口内就 return,**且只在注入成功后才写日志**。
- 后果两条:
① 01:32:00 命中后,**01:33:46 那条最明确的触发句**(「每次我说使用执行会话完成目标…」)
距上次仅 105 s ⇒ **被吞掉,那一轮 AI 收不到任何提醒**;
② 被吞掉**连一行痕迹都没有** ⇒ "没命中"与"被吞"在日志上分不出来,排查只能靠状态文件时间戳反推。
- ⚠️ 危害已被 2026-10-07 新增的「派活收工闸」**部分补偿**(待办标记写在冷却之前 ⇒ 不受冷却影响,
仍会在收工前拦一次);剩下的是"口头提醒缺失"与"日志盲点"。
二、处置(两处,都在 skill-load-guard.py)
1. 抽出共用的 `_is_dispatch()`;冷却旁路改为
`if _cooling(workdir, sid) and not _is_dispatch(prompt):`
⇒ **派活族显式触发句不受冷却**(其余词照旧受)。
2. 被跳过时写一行 `COOL_SKIP sid=… hits=…(冷却中,本轮不注入)` ⇒ 抑制态不再隐身。
三、判据与验证
- 新增 selftest 用例 t_skillguard_cooldown(3 项,**源码级** —— 跑真钩子会动到真工作区的冷却状态,
⛔ 不适合进回归套)。
- 另做了一次**行为级**验证(外部脚本,用真作用域内的工作区、测前备份冷却状态、测后还原):
5/5 通过 —— 非派活首次注入 ✓/非派活冷却中不注入 ✓/**派活族冷却中仍注入 ✓**/
日志有 COOL_SKIP ✓/日志有 DISPATCH_PENDING ✓。
- ⚠️ 该验证脚本第一版**读日志读错**:`log_before` 是字节数却按字符切片 ⇒ 误判成"日志没写"。
改成按字节 seek 后全绿(同族坑:本项目已记过"字节 vs 字符")。
验收:selftest.py rc=0 PASS 103 / FAIL 0(改前 102);manifest 70 份、语法失败 0。
|
2026-10-07 08:15:31 +08:00 |
|
admin
|
1a0cd14c91
|
排版核心块:明确「当前状态:」是小标题、每件事只写一次(⛔ 不许每条圆点都带前缀)
一、起因(用户点破逐字)
「为什么每句话 前面都要加「当前状态:」,我的记得 应该是
当前状态:
段落XXXXX
段落XXXXX」
⇒ 我把「当前状态」读成了**每条圆点的前缀**,连着好多轮都这么写。
二、根因:注入源那句话本身写得含糊
原句:「每件事先写「当前状态」(**每条一个圆点**,用**一句陈述句**说重点…)」——
「每条一个圆点」是附着在「当前状态」下面的,但读起来也能读成"每条都写当前状态"。
⚠️ 对照:本区 `CODEBUDDY.md` 那条**本来写得很清楚**(「每件事写两段:**当前状态** + **待处理事项**」
+「**当前状态**:每条一个**圆点**」)—— 两份文本不一致,而**每轮注入的是含糊的那份** ⇒ 含糊的那份赢。
三、改法
1. `references/03-回复排版-核心块.md` 的骨架那条重写为三行:
· 骨架:`# 大类别` → `## 具体事项` → **每件事写两段:`当前状态:` + `待处理事项:`**;
· 🔴 **这两个小标题各占一行、每件事只写一次**;⛔ **不许在每条圆点前面都加「当前状态:」**;
· `当前状态:` 下面**每条一个圆点**(`- `)…;`待处理事项:` 下面用序号 `1、2、3、`。
核心块 1091 → 1287 字符(⛔ 它每轮都注入,已压紧到三行)。
2. 走注入器刷新**本区环境文件**:`apply-reply-rules.py --ws <本区> --apply`
⇒ 回读一致 ✅(写前自动备份 `CODEBUDDY.md.bak-replycore-20261007-080319`)。
验收:selftest.py rc=0 PASS 102 / FAIL 0;manifest 70 份、语法失败 0;
`apply-reply-rules --check` 报「一致 ✅」。
|
2026-10-07 08:05:12 +08:00 |
|
admin
|
a3935b5fc5
|
修「检查会话落到未分组」+ 检查程序静默阈值 20 → 10 分钟
一、检查会话跑到未分组(用户报障逐字)
「vibe-product 的检查会话没有创建到工作区下,跑到未分组的会话中去了」。
根因(实测坐实):collabd.py::create_check_schedule() 的 INSERT **少了 workspace_scope 列**
⇒ 落库 NULL ⇒ 排期触发出来的会话被宿主当**游乐场**建
(sessions 行:is_playground=1 + source_mode='craft' + use_sandbox_cli=0)⇒ 不进工作区分组。
对照读数(同一晚两条排期):会话侧 automation_update 建的是 'workspace' ✓,
机制自建的是 None ❌;近 3 天 59 条排期里只有机制那条是 None。
修法:INSERT 补 workspace_scope 并以 'workspace' 落库。
配套:新增 selftest 用例 t_check_schedule_scope(3 项),含变异对照
(把列删掉 ⇒ 报红;还原 ⇒ 逐字节一致)。
二、检查程序等待时间 20 → 10 分钟(用户令逐字)
「把检查程序的等待时间由 20分钟 改为 10分钟」。
改法:新增常量 CHECK_IDLE_MIN = 10,**闸门与 --dry-run 试算都读它**(原来两处各写死 20);
并同步**写给检查会话看的 prompt 文案**(≥20 → ≥10)与 4 处注释/文档
(references/supervise-persistence.md §六;顺带订正该节「基准取台账 tasks.json 的 mtime」——
与代码不符,实际是「本工作区排期的 updated_at 最大值」)。
配套:新增 selftest 用例 t_check_idle_min(4 项,**不锁数值**、只锁"常量/闸门/试算/文案同源"),
含变异对照(把文案改回 20 ⇒ 报红)。
三、旧数据归位与分发
- 今晚那条歪掉的检查会话已改回工作区档(is_playground 1→0、source_mode craft→work、
use_sandbox_cli 0→1;排期 workspace_scope → 'workspace');改前原值已备份到
归档/检查会话归位-20261007/;PRAGMA integrity_check = ok。
- 副本分发:ai1net-dsh-server 与 vibe-product 各 7 个文件;两区常驻已重启
(判据=心跳 started_h 07:54:35 / 07:54:37,晚于分发时刻 07:54:07)。
验收:selftest.py rc=0 PASS 102 / FAIL 0(改前 99);manifest 70 份、语法失败 0。
|
2026-10-07 07:55:29 +08:00 |
|
admin
|
9a665039a9
|
派活触发句收工闸:说了就必须把执行会话拉起来(实测栽过,补机器抓手)
一、起因(用户令逐字)
「重点问题是 会话接收到 调用执行会话完成目标 没有去调用对应技能去执行」。
实测会话 b232218f(vibe-product):用户 01:32:00 / 01:33:46 两次说触发句,
到 01:36:27 才建出排期 —— 中间那一轮 AI 只在回复里解释口径,没拉起执行会话。
根因:机制里**只有 "注入提醒"**,⛔ 没有任何机器抓手检查"到底做没做"。
二、改法(发现 → 拦住,两步)
1. scripts/hooks/skill-load-guard.py:命中**派活族**触发句时写一条待办
<工作区>/.workbuddy/.dispatch-pending(会话 id / 时间戳 / 命中词)。
⚠️ 写在**冷却判定之前** —— 实测 01:33:46 那条最明确的触发句正被 300 s 冷却吞掉,
写在冷却之后就等于"最该拦的那一条反而没有标记"。
⚠️ 比对前**去掉空白**:用户写的是「应该使用 执行会话的技能去完成工作」(中间有空格)。
⛔ 不把裸词「执行会话」算进派活族(太宽,讨论机制时也出现)⇒ 误报面保持最小。
2. scripts/hooks/stop-dialog-guard.py:新增收工前闸 —— 同会话 + 超 90 s 宽限 +
宿主库该区此后**没有**新建排期 ⇒ 返回 {"continue": false} 拦一次,逼它先建排期。
⚠️ 必须放在**自作用域判定之前**(那条作用域只认本工作区,而栽的会话在 vibe-product)。
⛔ 三条安全底线:① 全程 fail-open(读不到库/解析失败/任何异常 ⇒ 一律放行);
② 只拦一次(复用本文件 10 分钟限流);③ 待办 30 分钟过期,⛔ 不长期纠缠。
三、判据(新增自测用例,5 项)
selftest.py::t_dispatch_gate —— 派活句留待办(含带空格写法)/非派活句不留/
超宽限且未建排期则拦/宽限内放行。三条断言都确定性,⛔ 不依赖现网存量。
验收:selftest.py rc=0 PASS 100 / FAIL 0(改前 99);
两组外部变异对照(发现侧 3 项、收工闸 4 项)全过;
另实测"10 分钟限流"有效(同一会话重复构造不再重复拦)。
|
2026-10-07 01:47:38 +08:00 |
|
admin
|
f2691e9368
|
移入随包子技能 karpathy-output-ladder(全局 skills 里的原件已移出)
一、为什么
- 用户令:把这个技能复制进会话技能「当作子技能」,用法后续再定;
随后又明确「并从 全局 skills 文件夹中移除」⇒ 全局那份已移出(移进归档,可原样移回)。
二、落在哪、怎么放
- 位置:references/karpathy-output-ladder/(与本包既有的随包子技能同形态:各自带 SKILL.md + 自己的 references/assets)
- 内容:4 个文件(SKILL.md · references/ladder-workflow.md · references/ste100.md · assets/html-template/index.html)
**逐字复制,一字未改**(md5 与原件逐个核对一致)
三、登记(只做到"找得到",⛔ 不接线)
- references/01-文档索引.md 增一行「要把一个话题讲清楚(文字→图→互动页)」→ karpathy-output-ladder/SKILL.md,
并在表下写明:**用法尚未接线**,不参与本包的钩子 / 判据 / 自动加载(用户原话「后续再看如何使用」)
- references/manifest.md 随生成器重算:66 → 70 份文件,语法失败 0
验收:selftest.py rc=0 PASS 99 / FAIL 0;全局 skills 顶层已无 karpathy-output-ladder;
会话技能内 4 个文件与原件 md5 逐个一致。
|
2026-10-07 01:26:47 +08:00 |
|
admin
|
9721876f08
|
新增两个技能(product-planning / oil-ui-pro)+ 作业规矩交叉引用跟到新落点
一、新增技能
- product-planning(253 文件):四阶段产品方案流水线(调研方案 / 需求结构 / 界面交付 / 说明文档),
含 references/stage-* 与内置的 diagram-design 子技能、scripts/
- oil-ui-pro(26 文件):UI/UX 设计 · 评审 · 多风格对比,含 assets/style-explorer.html、scripts/shoot.mjs、tests/
二、session-mechanism 收尾(承接 e5dfb6e)
- references/作业规矩/03-多棒接力编排.md、04-去AI味与说话方式.md:交叉引用表里的「参考 01」改为新落点
(该不该问/结论骨架 → references/02-功能优先协作协议.md;回复排版 → references/03-回复排版-核心块.md)
- references/manifest.md 随生成器重算(含上述两行的 md5 与字节数)
三、入库前检查
- 三个技能内均无令牌 / 私钥 / 密钥赋值;.neodata_token 类落点已由 .gitignore 挡住
- 无运行期产物混入(logs/ · tmp/ · __pycache__ · *.log)
- 暂存 282 个文件 = 279 新增(253 + 26)+ 3 修改
|
2026-10-07 00:48:07 +08:00 |
|
admin
|
e5dfb6e4ef
|
发布:常驻文档按现行形态重写 + 作业规矩/01 先并后删
一、常驻机制文档 references/supervise-persistence.md(整份重写 410→469 行)
- 照抄段由废弃的 start-supervise.ps1 形态,改为现行形态:
计划任务 collabd-keepalive-<区>(每 5 分钟)→ pythonw.exe → supervise-launch.py → collabd.py --supervise
- 旧 ps1 形态整体降级为「§四 旧形态留痕」(逐条标 🟠,内容一字未删,供读老日志/老进程用)
- 判据订正:LastTaskResult 在长驻运行中是 267009(旧口径「必须 0」属"跑一次就退"时代,已作废);
BOM 那条随 ps1 形态一并降为历史;另两条仍有效(CODEBUDDY_CONFIG_DIR 空库 / WorkingDirectory 必须是工作区根)
- 删除 assets/start-supervise.ps1.tpl —— SKILL.md、manifest.md、collabd.py、selftest.py 四处早已按「该模板已删除」口径,本次把磁盘与文档对齐
二、references/作业规矩/01 先并后删(用户选定 A 方案:不丢内容 + 只剩一处)
- 判据类并入 references/02-功能优先协作协议.md:
§3.2 补「规则冲突裁决顺序」「冲突 ≠ 门禁」;§3.3 补回完整语言转换表(原处"已收敛到通用技能"在并包后成了悬空指针);
§5.3 铁律由五条补到六条 + 接上配套硬红线「只做正向迭代」;新增 §5.5「提报前必答三问 + 回话前自检」
- 排版类并入 references/03-回复排版-核心块.md 的「完整版」段(十四条反模式 / 骨架路由表 / 文案点名主体 / 文档直入主题)
该段放在 REPLY-CORE 标记之外 ⇒ 每轮注入块逐字未变(实测仍 1172 字符)
- 删除 references/作业规矩/01-协作与提报用户判据.md,并跟改 6 处引用(SKILL.md 第一屏表、作业规矩/00 索引表与两处指针、
作业规矩/03-多棒接力编排、00 的 frontmatter 变更记录)——含一处二级指针「见 §6 第 0 条」,已改指 03 完整版段
三、判据与卫生
- pitfalls.md:P0-74 去冗余(7107 → 5982 B,重复叙述合并),「沉淀纪律」由 FAIL 1 转绿
- install.py:manifest_files() 补排 logs/ —— 与它自己「运行日志不入表」的口径一致,否则跑一次钩子表就过期
- .gitignore:补 logs/;撤跟踪 logs/_dr_probe.json(钩子输出转储,全包零引用)
- references/manifest.md 用生成器重算:66 份文件,语法失败 0
验收读数:selftest.py rc=0 PASS 99 / FAIL 0(另 1 条报告型不计入);
session-rules-check.py fail 0 / warn 1("此刻无活会话",正常态)/ ok 13;改动文件行尾全 LF。
|
2026-10-07 00:32:47 +08:00 |
|
admin
|
9fd120f40b
|
整合作业规矩:agent-operating-rules 整包并入本技能 references/作业规矩/
|
2026-10-06 23:44:16 +08:00 |
|
admin
|
119f0084e2
|
删尾巴:dsh-decision 整份删除;活指针全部改指本包
|
2026-10-06 23:21:29 +08:00 |
|
admin
|
93cf1c2b9f
|
会话机制 02:同步「dsh-decision 那份已删(只留指针)」的说法
|
2026-10-06 22:49:58 +08:00 |
|
admin
|
ea4e6d6d58
|
权威统一:提问/排版格式与自决策判据都归位到会话机制包内
起因(用户):「提问拍板格式不应该在会话机制中吗,怎么跑到别的技能中去了」
病根=**权威声明分裂**:
· SKILL.md:963 说 03 号是「内联副本」⇒ 隐指权威在 agent-operating-rules;
· 而 03 号自己头部写着「**这份是权威源**」,且把它说的第②个消费者
`scripts/apply-reply-rules.py` 写成了**不在本包**的路径。
⇒ 同一件事两处说法打架 ⇒ 改的人(我)会把改动做错地方。
处置(统一为「会话机制包内即权威」,与 02/04 两份的既有处置一致):
① 注入器归位:新增 `session-mechanism/scripts/apply-reply-rules.py`,默认读**包内** 03 号;
② 03 号头部改写:权威=本文件,两个消费者都在本包内;
③ `reply-style-guard.py` 第③级兜底从**别的技能**改回包内路径;
④ `agent-operating-rules/references/回复排版-核心块.md` 标注「副本·权威在会话机制」;
⑤ `dsh-decision/references/00-决策方法论.md` 标注「来源·权威在会话机制」;
⑥ SKILL.md:963 措辞由「内联副本」校正为「收进本包并定为权威」。
验收:注入器 `--check` 报权威源=包内 03 号且与 CODEBUDDY.md 一致;
每轮注入 1183 字符(含「竖排」「变相征询」);
**无 CODEBUDDY.md 的干净工作区也能取到**(1185 字符)⇒ 自包含成立。
|
2026-10-06 22:45:43 +08:00 |
|
admin
|
423b16004f
|
排版核心块:待拍板项强制「四行竖排」;补回被误删的 start-supervise.ps1.tpl
1) 起因(2026-10-06 用户):「提问还是不按照提问排版格式来」——
复盘:我上一次把「问题/说明/候选A/候选B/倾向」全塞进一个自然段,
违反既有的「并列内容竖排」。核心块原本只写"逐条编号",
⇒ 本次把**四行竖排**写成明文并给出形样(问题/说明/候选各占独立一行/倾向)。
核心块 835 → 1172 字符。
2) 顺带修:上一轮同步时 `assets/start-supervise.ps1.tpl` 被漏拷而删掉了远端那份,
该文件被 manifest / pitfalls / supervise-persistence / collabd.py / init_workspace.py 五处引用
⇒ 已从 64dd820 取回,本次一并发回。
|
2026-10-06 22:42:15 +08:00 |
|
admin
|
bcb9d1253d
|
decision-rules-hook: 注入补「两个停止点」+「技术方案排序轴」
起因(2026-10-06 用户问):能自决的问题为什么还要问。
复盘发现注入的判据里**缺动作**:
- 缺「十步」的两个停止点 → ① 判类型(方案请求 vs 直接执行)② 判方向(扩大/收窄/中性);
- 缺「自主裁决顺序」的排序轴 → 更小改动 → 更少新增形态 → **不扩大可见面**。
⇒ 前者导致「会扩大可见面」时不停手;后者导致排完仍把已定项混进待拍板清单(=变相征询)。
本次只补这两条动作骨架(1459 → 1906 字符),⛔ 不塞十步全文(避免稀释)。
|
2026-10-06 22:40:05 +08:00 |
|
admin
|
433d43af54
|
decision-rules-hook: 注入补「两个停止点」+「技术方案排序轴」
起因(2026-10-06 用户问):能自决的问题为什么还要问。
复盘发现注入的判据里**缺动作**:
- 缺「十步」的两个停止点 → ① 判类型(方案请求 vs 直接执行)② 判方向(扩大/收窄/中性);
- 缺「自主裁决顺序」的排序轴 → 更小改动 → 更少新增形态 → **不扩大可见面**。
⇒ 前者导致「会扩大可见面」时不停手;后者导致排完仍把已定项混进待拍板清单(=变相征询)。
本次只补这两条动作骨架(1459 → 1906 字符),⛔ 不塞十步全文(避免稀释)。
|
2026-10-06 22:39:51 +08:00 |
|
admin
|
64dd82073b
|
session-mechanism: 修复钩子静默失效 + 3 处判据缺陷;禁「变相征询」
1) stop-dialog-guard: session_budget() 早退路径返回 2 值、末尾返回 3 值,调用方按 3 值解包
⇒ transcript > 64 MiB 时每轮 ValueError。因 fail-open(异常仍 exit 0),
宿主零报错、install.py --verify 只判 rc=0 ⇒ 假绿;实测 86 条 EXCEPTION,
死掉的是整条(水位/收口、接续机制起点、预算告警、门禁自检、路径自检)。
2) session-rules-check 三处判据:
· hook_reg 按旧文件名找 ⇒ 合并成 prompt-guards.py 后每轮假红 ⇒ 改为一组可接受名
· snap_sync 拿 mtime 当内容判据 ⇒ 连续 4 天假红 ⇒ 改为复用抽取器本体比对内容
(变异对照:截断快照能报 fail,非恒绿)
· mem_ptr 只查全局技能根 ⇒ 工作区自带技能被判悬空 ⇒ 改查「全局 ∪ 工作区」
3) pitfalls 新增 P0-95(改判据必须重跑变异对照;fail-open + 只看 rc=0 = 假绿温床)
4) 回复排版核心块新增「变相征询同样禁止」(先只报不动/等你发话/我倾向X你看呢
这类不带选项的待定清单,一律按待拍板项写:问题+说明+各候选优缺点+倾向)
|
2026-10-06 22:27:03 +08:00 |
|
admin
|
19101acd65
|
init: workbuddy_skills 重建,仅收录 session-mechanism
- 按用户指示清空原有 25 技能内容,只提交 session-mechanism(57 文件)
- 附 .gitignore(产物 + 本机凭据)
- 令牌明文已脱敏(历史 .neodata_token 与 pitfalls 引用均不入库)
- 本提交为孤儿提交(父提交为空),历史自此重新开始
|
2026-10-05 14:13:24 +08:00 |
|