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/ 知识文件,按口径入库)
This commit is contained in:
admin committed 2026-10-10 23:13:22 +08:00
1 parent 30b46dbd0c
commit c1b5e4d966
735 files changed
+153192 -2415

No files matched your search

+131
View File
@@ -0,0 +1,131 @@
#!/usr/bin/env bash
# =============================================================================
# v-baseline.sh —— S0 尺子①:取两端基线(平台侧共享层 / 客户端 profile)
# 规格来源:交付物/功能打包到基础插件-分步实施方案-20260926.md §3.10.1 / §3.10.2 S0-1·S0-2
# -----------------------------------------------------------------------------
# 约定(§3.10.1 三条)
# 1. 退出码即结论:rc=0 绿(两端都取到)/rc≠0 红(有面取不到,逐面标注)
# 2. 只许测活体:本尺子取的是**远端真实共享层**与**本机真实 profile**,⛔ 不用快照/config 推断
# 3. 落点:脚本在 交付物/验证脚本/;读数落 tmp/p39/(⛔ 不入库,数值会漂)
# 用法
# bash v-baseline.sh # 取两端基线,写读数文件
# bash v-baseline.sh --stable # 只打印**稳定块**(不含取数时间)⇒ 连跑两次逐字一致的比较对象
# -----------------------------------------------------------------------------
# 复核命令(照抄即可复现本条基线):
# 平台侧:ssh [email protected] 'for p in /var/lib/dshs/bundled-plugins/*/; do ...; done'
# —— 本脚本内 remote_block() 就是它;指纹算法 = 逐文件 sha256sum → 按字节序排序 → 再 sha256sum 取前 8
# 客户端:读 $DSH_DESKTOP_HOME/profiles/desktop/package.json 的 dsh.profile.bundles
# -----------------------------------------------------------------------------
# ⛔ 只读:不写任何生产文件、不改任何工作区文件;唯一写动作 = 往 $OUT(=tmp/p39) 落读数
# =============================================================================
set -u
SELF_DIR="$(cd "$(dirname "$0")" && pwd -W)"
[ -d "$SELF_DIR" ] || SELF_DIR="$(cd "$(dirname "$0")" && pwd)"
WS="$(cd "$SELF_DIR/../.." && pwd -W)"
[ -d "$WS" ] || WS="$(cd "$SELF_DIR/../.." && pwd)"
OUT="${P39_OUT:-$WS/tmp/p39}"
DATE="$(date +%Y%m%d)"
STABLE_ONLY=0
[ "${1:-}" = "--stable" ] && STABLE_ONLY=1
SSH_HOST="${P39_47:-root@47.77.182.89}"
SHARED_DIR="${P39_SHARED:-/var/lib/dshs/bundled-plugins}"
DSH_DESKTOP_HOME="${DSH_DESKTOP_HOME:-E:/github/dsh-desktop-0.1.7rc2/apps/desktop/.desktop-build/development/home-adapt}"
PY="${PY:-E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe}"
mkdir -p "$OUT"
# ------------------------------- 平台侧 --------------------------------------
platform_block() {
ssh -o BatchMode=yes -o ConnectTimeout=8 "$SSH_HOST" "DSH_SHARED_DIR='$SHARED_DIR' bash -s" <<'REMOTE' 2>/dev/null
set -u
D="${DSH_SHARED_DIR:-/var/lib/dshs/bundled-plugins}"
[ -d "$D" ] || { echo "ERR no-such-dir $D"; exit 9; }
for p in $(ls "$D" | sort); do
d="$D/$p"
[ -d "$d" ] || continue
ver=$(grep -m1 '"version"' "$d/package.json" 2>/dev/null | sed -E 's/.*"version"[[:space:]]*:[[:space:]]*"([^"]+)".*/\1/')
n=$(find "$d" -type f 2>/dev/null | wc -l)
b=$(find "$d" -type f -printf '%s\n' 2>/dev/null | awk '{s+=$1} END{printf "%d", s+0}')
fp=$(find "$d" -type f -print0 2>/dev/null | sort -z | xargs -0 sha256sum 2>/dev/null | sha256sum | cut -c1-8)
printf 'PKG\t%s\t%s\t%s\t%s\t%s\n' "$p" "${ver:-?}" "$n" "$b" "$fp"
done
REMOTE
}
# ------------------------------- 客户端侧 ------------------------------------
client_block() {
local pj="$DSH_DESKTOP_HOME/profiles/desktop/package.json"
[ -f "$pj" ] || { echo "ERR no-such-profile $pj"; return 9; }
"$PY" - "$pj" <<'PYEOF' 2>/dev/null
import json, sys
d = json.load(open(sys.argv[1], encoding='utf-8'))
b = ((d.get('dsh') or {}).get('profile') or {}).get('bundles') or []
print("BUNDLE_COUNT\t%d" % len(b))
for x in b:
print("BUNDLE\t%s" % x)
print("LOCAL_SCOPE_COUNT\t%d" % sum(1 for x in b if str(x).startswith('@dsh-local/')))
PYEOF
}
PLAT_RAW="$(platform_block)"; PLAT_RC=$?
CLI_RAW="$(client_block)"; CLI_RC=$?
pl_err=0; cl_err=0
[ "$PLAT_RC" != 0 ] && pl_err=1
printf '%s\n' "$PLAT_RAW" | grep -q '^ERR' && pl_err=1
printf '%s\n' "$CLI_RAW" | grep -q '^ERR' && cl_err=1
PLAT_STABLE="$(printf '%s\n' "$PLAT_RAW" | sort)"
CLI_STABLE="$(printf '%s\n' "$CLI_RAW")"
if [ "$STABLE_ONLY" = "1" ]; then
echo "### STABLE · 平台侧($SSH_HOST:$SHARED_DIR 包数+每包指纹)"
printf '%s\n' "$PLAT_STABLE"
echo "### STABLE · 客户端侧($DSH_DESKTOP_HOME/profiles/desktop bundle 清单)"
printf '%s\n' "$CLI_STABLE"
[ $((pl_err + cl_err)) -ne 0 ] && exit 1
exit 0
fi
{
echo "════ 基线 · 平台侧(共享层)════"
echo "取数时间:$(date -Iseconds)"
echo "复核命令:ssh $SSH_HOST 'ls $SHARED_DIR' 后逐包 find|sha256sum(见本脚本 platform_block())"
echo "指纹算法:逐文件 sha256sum → 按路径字节序排序 → 再 sha256sum 取前 8 位"
echo "⚠️ 本指纹 ⛔ 与平台 treeSha256 不同源:平台权威 treeSha256 见节点同步记录(.node-sync-reports.json)"
echo "⚠️ 字节口径:本行 = 目录内全部文件 sizes 之和(含 node_modules);⛔ 与平台 pack/tgz 字节(如 mcn-suite 659 文件 / 2,018,751 B)**不是同一口径**,⛔ 不可互比"
echo "---- 数据(PKG / 版本 / 文件数 / 字节 / 指纹8)----"
printf '%s\n' "$PLAT_RAW"
} > "$OUT/baseline-平台-$DATE.txt"
{
echo "════ 基线 · 客户端侧(本机 profile bundle 清单)════"
echo "取数时间:$(date -Iseconds)"
echo "复核命令:cat $DSH_DESKTOP_HOME/profiles/desktop/package.json → dsh.profile.bundles"
echo "---- 数据 ----"
printf '%s\n' "$CLI_RAW"
} > "$OUT/baseline-客户端-$DATE.txt"
printf '%s\n' "$PLAT_STABLE" > "$OUT/.stable-平台-$DATE.txt"
printf '%s\n' "$CLI_STABLE" > "$OUT/.stable-客户端-$DATE.txt"
echo "── v-baseline 结果 ──"
if [ "$pl_err" = "0" ]; then
echo "平台侧:✅ 取到 $(printf '%s\n' "$PLAT_RAW" | grep -c '^PKG') 个包"
printf '%s\n' "$PLAT_RAW" | sed 's/^/ /'
else
echo "平台侧:❌ 未取到(rc=$PLAT_RC) ⇒ 原始输出:$(printf '%s' "$PLAT_RAW" | head -c 200)"
fi
if [ "$cl_err" = "0" ]; then
echo "客户端侧:✅ 取到 $(printf '%s\n' "$CLI_RAW" | grep -c $'^BUNDLE\t') 个 bundle(@dsh-local/* 计 $(printf '%s\n' "$CLI_RAW" | sed -n 's/^LOCAL_SCOPE_COUNT\t//p') 个)"
printf '%s\n' "$CLI_RAW" | sed 's/^/ /'
else
echo "客户端侧:❌ 未取到(rc=$CLI_RC) ⇒ 原始输出:$(printf '%s' "$CLI_RAW" | head -c 200)"
fi
echo "读数落盘:$OUT/baseline-平台-$DATE.txt · $OUT/baseline-客户端-$DATE.txt"
echo "⛔ 基线数字只作开工对照,⛔ 不写进判据(判据一律取「前后一致」)"
[ $((pl_err + cl_err)) -ne 0 ] && exit 1
exit 0