Files
dsh_ai1net_server/归档/接续历史/机制排查/S12_收尾_台账与出队_20261002.py
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

64 lines
3.9 KiB
Python
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.
import json, sys, os, shutil, datetime
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
WS = r"E:/ProgramData/AIProject/ai1net-dsh-server"
TG = os.path.join(WS, "交付物/任务图-会话协作自检.json")
INBOX = os.path.join(WS, "tmp/supervise-inbox")
CLAIM = os.path.join(INBOX, "claims/S12")
BAK = TG + ".bak-s12-clean-20261002-2215"
EV = ("2026-10-02 22:0x–22:1x【本棒 · 走 SQL 直连通道,收尾完成】"
"改前只读盘点 = **9 条**(⛔ prompt 说的 29 条不成立:那是 09-18 点前旧读数,"
"那批多数已在 18:0x 那一棒被 deleted_at 软删,只剩这 9 条漏网)"
"⇒ 判据 deleted_at IS NULL ∧ status='ACTIVE' ∧ schedule_type='once' ∧ next_run_at IS NULL。"
"**9 条逐条单发 UPDATE(status→PAUSED,⛔不删行)+逐条回读四元组 (PAUSED,once,None,None) "
"+ rowcount=1 ⇒ 9/9 OK**;改后回读计数 **= 0** ✅。"
"总行数 141→141(未删行);PRAGMA integrity_check = ok(改前也先跑基线)。"
"**误伤回归**:recurring ACTIVE 3→3、待跑 once(next_run_at 非空)2→2 ⇒ 周期排期与 follow/waker 时钟一条没少。"
"脚本内置 assert(盘点=列表、且拒改本会话排期 45d4e2d4)⇒ 不一致即停手。"
"⛔ 全程未用 automation_update(P0-26 属主边界会假成功),只走 sqlite3 SQL + busy_timeout=10000,"
"⛔ 未做任何文件级 cp/mv(避 WAL 三件套)。"
"⛔ **状态=待核对(await-verify),不标 done**:产物只有「9→0」这一条读数,"
"需下一次 collabd.py --once 的体检报告确认这 9 条不再出现在 notes 段才可转 done;"
"⚠️ 本轮体检大概率仍 skipped(本自动化会话在跑 ⇒ health() busy 恒跳过,另有 300s 节流戳)。"
"产物:机制排查与修复/S12_清理报告_20261002.md + 两个可复跑脚本(盘点/停用,幂等)。"
"⛔ queue.json/queue.md/NEXT.md 是 collabd 派生产物,未手改。")
# 1) 任务图 S12 -> await-verify
g = json.load(open(TG, encoding="utf-8"))
shutil.copy2(TG, BAK)
hit = 0
for n in g.get("nodes", []):
if n.get("id") == "S12":
n["status"] = "await-verify"
n["evidence"] = EV
n["_待核对"] = ("计数判据已过(9→0);状态判据待下一次体检报告确认这 9 条不出现在 notes 段。"
"⚠️ 本轮体检 skipped(本会话在跑 ⇒ busy)。")
hit += 1
assert hit == 1, f"S12 节点命中数异常:{hit}"
g["updated"] = datetime.datetime.now().isoformat(timespec="seconds")
tmp = TG + ".tmp-s12"
json.dump(g, open(tmp, "w", encoding="utf-8"), ensure_ascii=False, indent=2)
os.replace(tmp, TG)
print("[1] 任务图 S12 -> await-verify OK (bak:", os.path.basename(BAK), ")")
# 2) 出队:删 claims/S12
if os.path.isdir(CLAIM):
holder = os.path.join(CLAIM, "holder")
who = open(holder, encoding="utf-8").read().strip() if os.path.exists(holder) else "(无 holder)"
shutil.rmtree(CLAIM)
print("[2] claims/S12 已删(出队) holder =", who)
else:
print("[2] claims/S12 不存在(本就未取件登记)⇒ 无需出队,未做任何删除动作")
# 3) 落地一份可核对的出队/待核对记录(append)
rec = os.path.join(INBOX, "advance.md")
line = ("\n- **2026-10-02 22:1x · S12 出队 · 状态=待核对(await-verify)** —— "
"机制排查与修复-S12-一次性排期清理 | 一次性排期在册 **9 → 0**(逐条停用,⛔未删行,integrity ok)| "
"recurring 3→3、未跑 once 2→2(无误伤)| ⛔ 29 条为旧读数,现场 9 条 | "
"产物 `机制排查与修复/S12_清理报告_20261002.md` | 判据:等下次体检报告确认 notes 段已无这 9 条再转 done\n")
with open(rec, "a", encoding="utf-8") as f:
f.write(line)
print("[3] advance.md 已追加待核对记录 OK")
print("DONE")