Files
dsh_ai1net_server/docs/交接单/交接单_入口副本漂移核正_20260927.md
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

4.6 KiB
Raw Blame History

交接单 · 五条工作线入口副本漂移的核正(2026-09-27)

交接载体:接手方不需要读本棒上下文即可直接执行。 来源会话:session-8757908d(本机 DSH 会话)|结束原因:可自决部分做完,余项等用户 落点:E:\ProgramData\AIProject\ai1net-dsh-server\docs\交接单\


§1 目标

核正「本工作区 ai1net-dsh-server 持有五条工作线入口的过期副本」这一系统性缺陷,使任何会话都不会再按过期副本的口令去开工。

§2 只读前置(接手前先跑,全部只读)

# ① 两处工作区的同名入口逐对比大小与时间
$a='E:\ProgramData\AIProject\ai1net-dsh-server'; $b='E:\ProgramData\AIProject\aliyun-dsh-server'
Get-ChildItem $a -File -Filter '接续入口_*.md' | ForEach-Object {
  $g=Join-Path $b $_.Name
  '{0,-40} 本 {1,9:N0} {2}  远 {3,9:N0} {4}' -f $_.Name,$_.Length,$_.LastWriteTime.ToString('MM-dd HH:mm'),
    (Get-Item $g).Length,(Get-Item $g).LastWriteTime.ToString('MM-dd HH:mm')
}

期望:五份本工作区副本均带 本副本已停更 告示(在文件头 900 字符内);真源文件均更大、更新。

§3 范围

  • 动了:本工作区 5 份 接续入口_*.md 的文件头(各加一条指针告示,共 +431 ~ +632 B)。
  • ⛔ 没动:真源(aliyun-dsh-server 侧 5 份)一字未动;本工作区副本的正文一字未删(已逐份哈希断言)。
  • ⛔ 没做:不删副本、不移位置、不改判据与结论、不进入任何执行棒。

§4 决策点(本棒已自决,可推翻)

  • D-1 处置方式选「标注」而非「同步」或「删除」。
    • 我选了什么:只在过期副本头部加指针告示。
    • 为什么:① 工作区规则禁整文件覆盖,同步 = 一次 1 MB 级覆盖;② 删除不可逆,且该库明令「不许移走白名单内的东西」;③ 标注失败代价对称,最坏情况是文件头多四行。
    • 可推翻点:若确认这些副本不该存在,则应改为归档(该库二值决策:归档 or 删除),⛔ 不新建中间态目录。

§5 步骤(接手方照做)

  1. 跑 §2 的只读前置,确认五份都有告示。
  2. 若发现新出现的漂移(本工作区副本反而更新),先判定哪边是活的那份,⛔ 不要按文件名猜;判据 = 「该入口 §0 的『最新一行 = 执行依据』所指的棒号与日期」。
  3. 需要动文件 ⇒ 先按本库规则抢锁:bash $DOC\07-scripts/handoff-guard.sh --claim-exec "<会话名>"。 ⚠️ 抢锁必须校验退出码,⛔ 别接管道(| Select-Object / | grep 都会吃掉退出码;本棒自己踩过一次,看到 rc=-1 而锁其实抢到了)。
  4. 抢不到 ⇒ 停手报告,⛔ 不删锁、不接管。
  5. 完工反序释放:--release-exec "<会话名>"。

§6 验收(可复跑的机器判据)

# 判据 1:5 份副本全部带告示
(Get-ChildItem 'E:\ProgramData\AIProject\ai1net-dsh-server' -File -Filter '接续入口_*.md' |
  Where-Object { (Get-Content $_.FullName -TotalCount 3 -Encoding UTF8) -match '本副本已停更' }).Count
#   期望 = 5

# 判据 2:本工作区副本正文未损(标题行仍在)
Get-ChildItem 'E:\ProgramData\AIProject\ai1net-dsh-server' -File -Filter '接续入口_*.md' |
  ForEach-Object { '{0,-40} {1}' -f $_.Name,
    [bool]([System.IO.File]::ReadAllLines($_.FullName,[Text.Encoding]::UTF8) -match '^# 接续入口') }
#   期望 = 5 行全 True

本棒实测读数(2026-09-27 10:3x,主会话自跑):

项 读数
新建告示 4 份(插件投放与分库线第 1 轮已有)
每份「原文逐字未变」哈希断言 5/5 全部 True
增量体积 +431 B(覆盖网络线)· +493 B(技能重组线)· +593 B(IM线)· +632 B(StoryForge验收线)· +548 B(插件投放与分库线,第 1 轮)
真源未改动 5/5(只读打开)
锁 抢 rc=0 → 释放 rc=0

§7 回滚

每份副本的原件备份在同目录,命名 接续入口_<线名>_<日期>.md.bak-20260927-103210 … -103xxx(按修改时间取最新一组)。 回滚 = 用对应 .bak-* 覆盖回原文件,然后复跑 §6 判据 1(期望变回 0)。

§8 回报格式

① 判据 1 读数 = __ / 5      ② 判据 2 读数 = __ 行全 True
③ 新发现的漂移 = (无 / 逐条列出「线名 + 本副本读数 + 真源读数 + 判定哪边是活的」)
④ 本棒是否动了真源 = (否 / 是 + 文件 + 原因)
⑤ 锁状态 = (已释放 / 仍在谁手上 + 原因 + 下一步)