Files
workbuddy_skills/.gitignore
T
admin 20eacef289 session-mechanism:自我供给去掉"先删后建",改用 Register -Force 覆盖
缺陷(代码):`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。
2026-10-12 11:55:02 +08:00

95 lines
4.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ══════════════════════════════════════════════════════════════════════════
# 🔴🔴 白名单:本仓**只收录对外发布的那几个技能**(用户 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/