一次「把噪音关掉」的维护版:CI 收口到只在发版那一刻跑,日常防护落回本地 pre-commit 钩子;顺带修掉状态栏在 /pdlc-relate rebuild 之后整行变空的回归。
没有新增 skill(仍 38 个),流程契约与产物路径零改动,升级不需要任何迁移动作。
Changed
-
CI 收口到「只在发布那一刻跑」:
secret-scan.yml原先是push: branches:[main]+pull_request,累计触发 89 次(PR 55 / push 34)——改一行文档也要跑一遍全历史扫描。改为workflow_dispatch+push: tags: v*.*.*,月预计用量从约 15-20 min 降到约 1 min。发版前那次仍用fetch-depth: 0扫完整历史,公开发布前的最后一道兜底保持不变。- 日常防护落到本地:新增
.githooks/pre-commit(git config core.hooksPath .githooks启用一次)。有gitleaks就用它扫暂存内容;没有时不静默放行——降级为正则兜底并明确告知覆盖面更弱(「跑不了」不等于「没问题」,与三态语义同一条纪律)。命中时只回显截断后的模式,不把密钥再打印一遍到终端和日志。 - 三条路径均实测:gitleaks 在→拦(exit 1)、gitleaks 不可见→正则兜底仍拦(exit 1)、干净内容→放行(exit 0)。
- 日常防护落到本地:新增
-
状态栏懒解析循环去掉
basename子进程:bin/pdlc-statusline.sh每渲染一次提示符,窗口内每个候选文件都要调两次basename(判statusline.json一次、判_前缀一次),默认窗口 5 个文件即 10+ 次 fork。改为${f##*/}取一次文件名再判两次,循环内子进程降到 0。实测 6 个状态文件的场景由 12 次basename调用降到 0,渲染输出逐字节不变。 -
CLAUDE.md的本地测试清单补全:「Common commands」原先只列了tests/下 6 个脚本中的 2 个(frontmatter-check/install-smoke),照文档跑只覆盖 221/304 条断言——statusline-check、adapter-codex-check、adapter-codex-loop-run-check、evals-runner-check全在清单外,目录树那一段也用└──收在第 3 个脚本上、读起来像「就这些」。现已列全 6 个、给出一次跑完的命令,并把shellcheck的覆盖面对齐实际(补bin/*.sh、evals/run.sh、.githooks/pre-commit)。另注明statusline-check.sh需额外用 macOS 自带/bin/bash3.2 跑一遍——PATH 上的 Homebrew bash 5 会放过在原生 Mac 上跑不了的代码。
Fixed
- ADR 0004 §5 的诚实边界已过时,补更正纪要(正文保留作时间点快照):「本仓库的自动化无法自己调
codex exec」实测不成立;tdd → implement → review三步连跑已端到端验证——design → tdd → impl → review_done收敛、退出码 0、独立复跑单测 9/9 绿、发布侧零改动。撞上 provider 限流那次,驱动按设计 fail-stop(4) 且现场零改动。 - 状态栏在
pdlc-relate rebuild/set之后变空:bin/pdlc-statusline.sh按 mtime 取最近状态文件时,只排除了statusline.json,没排除pdlc-relate写出的_relations.json(关系反向索引,不是功能状态文件)。_relations.json写出后 mtime 最新,被当成「最新且非终态」抢占显示,解析出的feature_id/feature_name/current_stage全为空,状态栏整行显示成● PDLC · 👤。现在懒解析循环跳过所有_前缀文件,jq 解析后再对feature_id为空的行做一道兜底丢弃。tests/statusline-check.sh新增场景 8 覆盖该回归。