Files
dsh_ai1net_server/归档/交接单-20260924-归档/接续包_涉密外置配置目录_20260919.md
T
admin 7bd1151c67 chore(工作区): 归档交接单 27 件 + 新增 CODEBUDDY §9 工作区卫生
交接单按归属约定(正文落文档库、工作区只放指针)归档至
归档/交接单-20260924-归档/,含逐件判定 README:
- 16 件已被文档库正式版取代(T09–T21 + 覆盖网络-24/25/26)
- 4 件主题已被覆盖网络线入口汇总
- 7 件历史接续包/规划件

CODEBUDDY §9:收口清本棒 tmp、tmp 保留期 7 天、禁「待清理」中间态、
工作区入库只放文档与文件、不保留脚本副本、>60 KB 单文件须逐个判。
2026-09-24 07:58:57 +08:00

6.9 KiB
Raw Blame History

接续包 · 涉密内容外置到配置目录(2026-09-19)

本包是唯一细节来源。接续会话开工第一步:state.py → 重算本文件 md5 → 与 automation prompt 里的值比对, 不符即停并报告「口径已更新,需重新接续」。 ⚠️ 本棒已完成并入库;下一棒默认动作 = 核实完成状态后报告结束(⛔ 勿自行开工、⛔ 勿扩大范围)。

1. 目标(已达成)

用户原话:「很多涉密内容包含在代码中 开源时非常容易泄密,把所有涉密内容统一整理到配置文件夹对应文件中, 代码中引用对应配置信息」+「处理完毕后 提交仓库」+ 收口时追加「改造后记得完整检查两遍」。

# 需求 状态
① 涉密内容统一收进配置文件夹 ✅ 新建 config/,真实值入 config/platform.env(gitignore 排除)
② 代码引用对应配置 ✅ TS 走 src/platform-paths.ts;shell 走 config/load.sh;node 走 config/index.cjs
③ 完整检查两遍 ✅ 两遍均跑(语法 + 扫描 + 编译 + 测试),第 2 遍抓到第 1 遍的漏项
④ 提交仓库 ✅ 452924d 已提交并双推(原仓 + CNB,三方裸 sha 全等)

2. 已完成(可核对的落点)

项 值
commit 452924d89c87cbd175b31d57e26395dfbccaa52f(100 文件,+585/−453)
双推 work.alotbuy.com:maogeigei/dsh_shenxian.git + cnb.cool/maogeigei/dsh-shenxian.git ⇒ 三方裸 sha 全等
新增(入库) config/{platform.env.example,load.sh,index.cjs,README.md} · src/platform-paths.ts
不入库 config/platform.env(.gitignore:37 排除;服务器侧 600)
档案 dsh-server-docs/04-调整方案/140-涉密内容外置到配置目录.md(未登记 INDEX.md)
部署 47:config/→/opt/dshs/config/(服务器侧由自身 env 生成 platform.env,32 键/600)· lib/→/opt/dshs/lib(297 文件)
新增 drop-in /etc/systemd/system/dshs.service.d/platform-dirs.conf:DSH_PLATFORM_DIR=/opt/dsh · DSH_INSTALL_DIR=/opt/dshs
回滚点 /opt/dsh/backups/pre-secrets-config-20260919-150752/lib(294 文件)
零回归 tsc 0 错;npm test 373/375(唯一失败 lease 属既有);/opt/dsh/{state,backups} 未搬家、/var/lib/dshs/platform 未误建;端点 200 / API 401 / 单元 active / 0 错误

3. 在途 / 未完成

  • 无代码在途。工作区仅剩历史临时目录(_tmp_seq24/、_tmp_seq40/、_中间产物_待清理/,本轮未动; 本轮扫描器已移入 _中间产物_待清理/_seq140_涉密外置/,可删)。
  • 全局执行锁:已释放。档案占号锁 .lock-140:已释放。
  • 档案 140 未登记 INDEX.md(本轮未做)。

4. 🔴 关键决定(后续别推翻)

  1. 真实值只放 config/platform.env,且只放本机 / 对应机器那一份。服务器侧的 platform.env 由 systemctl show dshs -p Environment 生成 ⇒ ⛔ drop-in 改动后必须重新生成,否则脚本读旧值。
  2. 优先级 = 系统 env > config/platform.env > 代码内中性默认值。代码内默认一律中性 (<数据根>/platform、空域名),⛔ 别把生产值写回代码默认。
  3. 🔴 platform-dirs.conf 必须保留 DSH_PLATFORM_DIR=/opt/dsh —— 删掉它,platformDir 退化成 <dataRoot>/platform = /var/lib/dshs/platform ⇒ state/backups/artifacts 静默搬家。
  4. DEFAULT_OVERLAY_SEED / DEFAULT_OVERLAY_BOOTSTRAP_SEEDS 刻意留空,种子一律由 DSHS_OVERLAY_BOOTSTRAP_SEEDS 提供(线上已配 3 条)。测试断言已把「必须为空」固化为回归项 ⇒ ⛔ 别写回生产域名。
  5. src/platform-paths.ts 必须零副作用(不 mkdir/不写文件)—— 它会被只读路径调用; resolveConfig() 会 mkdir 数据根并可能生成 secret.key,⛔ 不要在 paths 模块里调它。
  6. 注释里的真标识无法「引用配置」 ⇒ 一律中性化(<server-public-ip>/<base-domain>/<host-a>)。
  7. web/wake.html 的注册域白名单改为运行时从 location.hostname 推导(去最左一段)—— 换域名零改动。

5. 下一步(⛔ 无必须开工项)

  1. 开源导出层要补一条:config/platform.env 是新的「单一秘密副本」⇒ 导出必须排除它; 若要随包发模板,只能加 platform.env.example(属技能 dsh-opensource-release 的 lane)。
  2. 档案 140 登记 INDEX.md(本轮未做)。
  3. 可选:test/lease.test.mjs 那 1 个既有失败(与本次无关)—— 修不修由你定。
  4. 既有缺陷已发现未动:scripts/start-cluster-manager.sh 第 11 行原缺 # 注释前缀(会被当命令执行)。 按「发现即报告、不顺手改」留给你。
  5. 既有约定,本轮未改(已报告):仓库 core.autocrlf=true ⇒ scripts/*.sh、config/load.sh 在索引里是 CRLF(本机/服务器工作副本是 LF,故实际运行正常)。若将来改为 Linux 端 git clone 部署, .sh 会带 CRLF ⇒ source 失败 ⇒ 那时需给 *.sh 加 -text。属仓库级改动(>10 文件),须先出清单再动。
  6. 在册旧账(与本次无关):D8 云安全组(唯一在册红)、档案 136 控制面并集(已立项未落地)。
  7. 🔴 .workbuddy/memory/MEMORY.md 已超注入上限(≈7,800 字符),本会话开机时系统已要求清理, 本轮未做。⇒ 下一棒应做一次「只减不增」的合并去重(先把已过期/已被档案取代的条目删掉, 再考虑新增),⛔ 别在超限状态下继续追加。

6. 复发验证(想自己复核时照跑)

# 三方 sha
cd /d/github/dsh_shenxian && git rev-parse HEAD
git ls-remote origin -h refs/heads/master | cut -f1
git ls-remote https://cnb.cool/maogeigei/dsh-shenxian.git -h refs/heads/master | cut -f1

# 代码面涉密标识应为 0(务必大小写不敏感 —— 大写 AI1net 曾漏过)
grep -rniE 'ai1net|alotbuy|47\.77\.182\.89|/opt/dshs|/var/lib/dshs|dshs-worker-' src/ test/ scripts/ web/ assets/ config/ | grep -v 'platform.env'

# 派生路径零回归
ssh -p 22 [email protected] 'ls /opt/dsh/state /opt/dsh/backups; ls -d /var/lib/dshs/platform 2>/dev/null && echo "回归!" || echo "no-platform-dir ok"'

⚠️ ⛔ 不要用 git stash 做「临时回基线」(HISTORY 里 2026-09-19 实测事故): 本棒用它做基线比对时被 SIGTERM 打断 ⇒ .git/refs 被删、仓库一度不可识别, 所幸 pack 完好 + reflog 完整,按 reflog(三处收敛 9c2e7975)重建 refs + git fetch origin 取回对象 + git reset 重建 index 后完整恢复(git fsck 干净)。 ⇒ 要基线比对用 git worktree add;动手前先落 patch / tar 备份。