缺陷(代码):`collabd.py::_escalate_to_keeper()` 建保活计划任务前先做
`if(Get-ScheduledTask …){ Unregister-ScheduledTask … }`,再 Register。
删与建之间没有原子性 —— 若 Register 失败(最典型=账户非管理员 ⇒ 拒绝访问),
旧任务已经被删掉 ⇒ 净结果从"装不上"恶化成"任务凭空消失"。
实测形态:普通权限建成的任务在一次 `--ensure` 之后从系统里消失,同刻日志报「登记失败:拒绝访问」。
改法:删掉那段前置删除,直接 `Register … -Force`(`-Force` 本身就覆盖同名任务)。
与 `collabctl.py::ensure_keepalive_tasks()` 对齐 —— 那边一直是直接 `-Force`、没有前置删除。
影响面:这是"提权写死"缺陷的放大器 —— 非管理员机上每走一次自我供给就删一次任务;
前一条 `60a6e30`(提权自适应)+ 本条,两处都落地才真正止住"任务会消失"。
仓库卫生:`.gitignore` 加 `**/05-交接单/` —— 机制运行时写的域锁目录(handoff-guard 的 `.locks`)
是运行产物、不入库。用 `**/` 兜两种落点(脚本在 `<技能包>/scripts/` 时 ROOT 算成 `<技能包>`)。
与文档库仓的同名目录不冲突:那边的 `05-交接单/` 是锁根、要入库,本规则只在技能仓生效。
验证(本机实跑)
· 抓自我供给生成的脚本做对照:`Unregister-ScheduledTask` 由 1 处 → 0 处;
`Register-ScheduledTask … -Force` 仍 6 处;diff 显示唯一差异就是删掉的那段。
· `git check-ignore` 两种落点(`<包>/05-交接单/`、`<包>/scripts/05-交接单/`)都命中新规则。
· `selftest.py` PASS 110 / FAIL 0;`install.py --manifest` 77 份文件、语法失败 0。
95 lines
4.9 KiB
Plaintext
95 lines
4.9 KiB
Plaintext
# ══════════════════════════════════════════════════════════════════════════
|
||
# 🔴🔴 白名单:本仓**只收录对外发布的那几个技能**(用户 2026-10-09 令:「肯定要收回」)
|
||
# 写法=先把根下一律挡掉(`/*`),再逐个放行。⛔ 这样"新冒出来的技能目录"
|
||
# 不会被任何 `git add -A` 顺手捎进仓库 —— 2026-10-08 那 9 个就是这么混进来的。
|
||
# 本轮从索引撤出(**本地文件一律保留**):AI HOT、draw-ui、dsh-diagnose、dsh-knowledge、
|
||
# dsh-local-env、dsh-opensource-release、dsh-workflow、oil-motion、skills-security-check
|
||
# ⚠️ 保留 oil-ui-pro:它是 product-planning 第③段的**功能依赖**(撤了两边都会悬空)。
|
||
# ══════════════════════════════════════════════════════════════════════════
|
||
/*
|
||
!/.gitignore
|
||
!/改包纪律.md
|
||
!/browser-harness/
|
||
!/humanizer/
|
||
!/humanizer-zh/
|
||
!/oil-ui-pro/
|
||
!/product-planning/
|
||
!/session-mechanism/
|
||
# 🔴 2026-10-12 加(用户当轮令「可以加入」):新建的全局技能 `video-capture`(取视频 + 抽帧)要入库。
|
||
# 判据=product-planning 第③段已把它当**依赖**引用(交接说明指向它)⇒ 仓里有引用、仓里就该有实体;
|
||
# ⛔ 否则别的机器从本仓还原会拿到一个「指向装不出来的技能」的悬空引用。
|
||
# ⚠️ 它目录内的 `env/`、`logs/` 仍被下面那几条本机配置规则挡着 —— 那部分照旧各机器自建。
|
||
!/video-capture/
|
||
|
||
# 🔴 不入库:运行期产物与备份
|
||
# 判据(记忆铁律):技能包=**可复制的资产**;⛔ 运行日志/缓存/备份/本机部署副本一律不入库。
|
||
|
||
# 运行日志(install.py 每次跑都写)
|
||
*.log
|
||
install.log
|
||
*_collabd.log
|
||
# 缓存
|
||
__pycache__/
|
||
*.pyc
|
||
*.pyo
|
||
# 备份(⛔ 备份不是资产,是历史)
|
||
*.bak-*
|
||
*.bak
|
||
*.orig
|
||
*.rej
|
||
*.mutbak
|
||
# 编辑器
|
||
.DS_Store
|
||
Thumbs.db
|
||
*.swp
|
||
*~
|
||
|
||
# 🔴 2026-10-09 改(用户令:「A 肯定要收回」+「别的电脑取仓时不要影响已有文件」):
|
||
# 下面两份是 **install.py 在本机生成**的 ⇒ ⛔ 撤出仓库、改为本机各自生成。
|
||
# 为什么必须撤(实测):别的电脑取仓时「同名覆盖」会把它们换成**我们这台机器**的路径
|
||
# ⇒ 那台机器的机制脚本会去找不存在的目录(`roots.env` 里就是本机绝对路径)。
|
||
session-mechanism/references/manifest.md
|
||
|
||
# 🔴🔴 2026-10-11 加(用户令:「脚本是脚本 配置是配置」⇒「**每个技能 需要环境配置的 都有自己的 env文件夹**」):
|
||
# **每台机器各不同**的配置一律放**该技能包自己的 `env/`**;`scripts/` 只留通用代码。
|
||
# 本仓收录的每个技能 —— 其 `env/` 下**只入库 `*.example` 样例**,真配置一律本机生成、不入库
|
||
# (理由同上面那条:入库 ⇒ 别的电脑取仓时被本机路径覆盖 ⇒ 机制去找不存在的目录)。
|
||
# ⚠️ 三行三种层级都写,避免"某个深度漏挡"(`**/env/*` 覆盖任意层,另两行是它的保守冗余)。
|
||
env/*
|
||
!env/*.example
|
||
*/env/*
|
||
!*/env/*.example
|
||
**/env/*
|
||
!**/env/*.example
|
||
# 兼容旧位置(2026-10-11 之前的布局):包根那份 `roots.env` 也是本机真身 ⇒ 同样不许入库。
|
||
# ⚠️ `roots.env` 不带斜杠 ⇒ 按**文件名**匹配任意层级,正好把「包根旧位置」一并兜住。
|
||
roots.env
|
||
|
||
# 📌 刻意**入库**的(⛔ 别误删):
|
||
# assets/*.png —— 文档配图,是内容不是产物
|
||
|
||
# 🔴 凭据类一律不入库(2026-10-06 发现「当前版本仍跟踪」)
|
||
.neodata_token
|
||
|
||
# 🔴 2026-10-07 补(本目录改成 git 工作区后新增,按实测盘点)
|
||
# 运行期目录(session-mechanism/logs 里是钩子日志,不是资产)
|
||
logs/
|
||
tmp/
|
||
# 机制运行时写的**域锁目录**(handoff-guard 的 `.locks`)—— 运行时产物,⛔ 不入库
|
||
# ⚠️ 用 `**/` 兜两种落点:脚本在 `<技能包>/scripts/` 时 ROOT 算成 `<技能包>` ⇒ 是
|
||
# `<技能包>/05-交接单/`;脚本被整体拷到别处时也可能落成 `<技能包>/scripts/05-交接单/`。
|
||
# ⚠️ 与**文档库仓**的同名目录不冲突:那边的 `05-交接单/` 是锁根、**要**入库,本规则只在本仓生效。
|
||
**/05-交接单/
|
||
# 宿主写的技能库迁移标记(每次启动可能重写,⛔ 不是内容)
|
||
.disable_to_model_invocation_migration.json
|
||
.model_invocation_to_override_migration.json
|
||
.user_invocable_only_to_off_migration.json
|
||
_bm_skillid_migration.json
|
||
# 本机虚拟环境与构建产物(browser-harness 等)
|
||
.venv/
|
||
*.egg-info/
|
||
uv.lock
|
||
node_modules/
|
||
# 本机部署副本与状态(`.workbuddy/` 是**工作区**的东西,⛔ 不该出现在技能库)
|
||
.workbuddy/
|