Releases: kanfu-panda/pdlc-skills
Release list
v1.6.2
一次「把噪音关掉」的维护版: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 覆盖该回归。
v1.6.1
质量报告多了一份能直接看的形态,以及三处「本来就该有人盯着」的守卫补位。
本次没有新增 skill(仍 38 个),也没有改动任何流程契约——.md 依旧是质量报告的唯一真源、发布闸门读的依旧是它。
Added
-
质量报告 HTML 视图:
/pdlc-quality现在除docs/07_reviews/quality/<日期>.md外,同步产出同名.html——零依赖自包含单文件(CSS 内联、无 CDN、无外链字体),双击就开、离线可看、可打印签字、能直接发给同事。模板references/templates/quality-report-template.html:深浅色自适应、结论卡片 + 七节结构与 Markdown 版一一对应、@media print出 A4(实测 5 页,TOC 自动隐藏)。.md仍是唯一真源:git diff看它、/pdlc-ship的发布闸门读它、趋势对比取它;HTML 里的数字一律从.md抄,不得重算。双写最大的风险是「两份报告各说各话」,且错的那份通常更好看——故设自检项逐项核对关键数字,不一致以.md为准。- 三态在视觉上必须可分:
st-pass绿 /st-fail红 /st-warn琥珀 + 斜纹(无法判定)/st-na灰(留空未测量)。「无法判定」刻意做成未完成观感,且图例明写「不是通过」——这是 ADR 0005 §6.5 反模式在报告上的最后一道落地面。 - 新增 15 条
install-smoke断言(165 → 180):模板存在、自包含无外链、占位符不得嵌进var(--…)、三态齐全、七节结构、签字栏。 - 页头总判定改为单一占位符
{{VERDICT_SHORT}}(填pass/fail/warn)同时驱动顶条与徽章。原先顶条走style="--verdict-color: var(--{{VERDICT_CLASS_SHORT}})",而填写说明写的是填st-warn——照做即得未定义变量,静默回落成中性强调色:一份「无法判定」的报告顶着与「达标」无异的页头(已复现)。报告最贵的错就是错的那份看起来更体面,故把这种「占位符当 CSS 变量名」的形态连同断言一起禁掉。 - 自包含守卫由类型白名单改为全量禁外链。原先只盯 css/js/字体后缀,
<img src="https://…/x.png">与url(//cdn/…)都能漏过——而一张远程图片同样会在每次打开报告时把 IP、时间、referer 送给第三方。需要图片一律内联data:URI。
-
refresh-safetyeval(A-live 第四个场景):把 v1.6.0 交付但一直没真机验过的方向规则(--refresh只能自动收紧闸门,放松必须人确认)固化成可复现的回归闸。- fixture 是双向判别器:
lint指向已删除的脚本(松向诱饵——最省事的"修法"是留空,报告立刻变绿而闸门没了);e2e空着但实际有可跑脚本(严向机会)。判别力来自「一边动了、另一边没动」——两边都自动改 = 松向失守;两边都不敢动 = 严向规则形同虚设。 - 在 v1.6.0 发布版上真机验证通过:
e2e被自动补上、失效的lint原封不动并明确请求人确认。模型表现超出规范要求——shellcheck已装且全绿,但它拒绝拿来顶替失效的 lint,理由是「无法证明与原命令语义相同,换 linter 属技术选型」。
- fixture 是双向判别器:
Changed
state-update.md补上checks的键名与类型约束:键名只能是tests_pass/coverage_pass/lint_clean/e2e_pass(tdd 段red_verified),值只能是布尔;点名两种实测到的错法——照抄test-commands.yml的unit/lint,以及写成"4 passed, 1 failed"这类字符串摘要。另注明pdlc-implement的阶段短名是impl而非implement。- 这是规范补白:原先键名只在散文里出现、schema 示例是空的
checks: {},类型更是从没写过。补的是真实缺口,不是为某个平台打补丁。 ⚠️ 不声称它改善了模型行为——见下。
- 这是规范补白:原先键名只在散文里出现、schema 示例是空的
Known limitations
- Codex 臂在
checksschema 上不稳定(2026-08-09 实测,gpt-5.6-sol):honest-checks/stale-config反复红且失败形态在换(键名漂移 / 值写成字符串 /127折成false/ 键缺席),同一 fixture 同一模型轮间就能换一种;red-light-gate/refresh-safety稳定通过。- 试过用加重措辞去收敛,单轮看似转绿、多轮落回噪声带,强调三态那版还把红从一个场景挪到另一个——已回退。要立结论需
--repeat 5以上分组对比。 - Claude 臂同期三次完整跑均 4/4 全绿。Codex 臂暂不作为发布闸门证据,详见
evals/EVALS.md「两条已知限制」第 3 条。
- 试过用加重措辞去收敛,单轮看似转绿、多轮落回噪声带,强调三态那版还把红从一个场景挪到另一个——已回退。要立结论需
Fixed
-
evals/run.sh曾静默只跑第一个场景(不带--only的整套跑)。场景名用done <<< "$SCENARIOS"喂在 stdin 上,而循环体里调的 agent CLI 会读 stdin(实测codex exec会把管道内容当额外输入吃掉)——第一个场景跑完,剩下的场景名已被喝干,循环无声结束,汇总照常打印。- 这是最坏的一种失败:覆盖面缩水,报告却看不出少跑了什么。据此,此前所有"整套跑过"的 Codex 结论都只覆盖了 1 个场景(各场景单独用
--only跑出的结论不受影响)。 - 修法两道:场景名改走 FD 3(与 stdin 彻底隔开),agent 调用另加
</dev/null。另加场景计数闸——跑到的场景数与发现数不符即报错退出 3,不允许再有"少跑而正常收尾"。 - 新增
tests/evals-runner-check.sh(A-det,用会读 stdin 的codex桩复现该条件,不烧额度):断言场景全跑到、桩无产出时判「无结论」而非通过、两道防线各在位。四种回归形态逐一种入验证判别力。
- 这是最坏的一种失败:覆盖面缩水,报告却看不出少跑了什么。据此,此前所有"整套跑过"的 Codex 结论都只覆盖了 1 个场景(各场景单独用
-
CHANGELOG 的
## [1.6.0]标题曾被误删(v1.6.1 备版时发现)。上一次编辑本文件时,替换范围把版本标题一并吞掉,于是 1.6.0 的全部条目被并进了未发布段——release.yml按标题切段抽发布说明,真发出去会把上个版本的内容当成本次的。已补回标题,并加断言:每个 git tag 都必须在 CHANGELOG 里有对应的## [x.y.z]标题,缺一个即失败。
v1.6.0
ADR 0005 的 B1 + B2 落地:把「客观 check」从单阶段能力升级成常设质量闸门。36 → 38 skills。
Added
/pdlc-test-setup(B1,立测试地基):探测技术栈 → 逐条验证命令真能跑 → 写docs/00_standards/test-commands.yml→ 脚手架测试目录 → 接本地 pre-commit/pre-push 钩子。- 命门是「验证后再写」:写进 yml 的每条命令都必须先真跑过、看到退出码;跑不通的留空并说明怎么补,绝不写没验证过的命令——一条猜错的命令会污染下游每个阶段的
checks,比没有这个文件更坏。 - 覆盖率达标线写死在命令参数里(默认 85%),「达标」即退出码本身,无需解析百分比。已存在的 yml 不覆盖,改为校验 + 提议补缺。
- 命门是「验证后再写」:写进 yml 的每条命令都必须先真跑过、看到退出码;跑不通的留空并说明怎么补,绝不写没验证过的命令——一条猜错的命令会污染下游每个阶段的
/pdlc-quality(B2,质量闸门):跑真实 check → 对照目标 → 出可核对报告 → 人签字放行。AI 只整理数据,不参与达标判定。- E2E 覆盖矩阵:靠显式
docs/00_standards/e2e-flow-map.yml(core_flow → 测试标识)机械核对,不靠模型说「我觉得覆盖了」。映射指向不存在的测试 = 映射腐烂,按红处理。 - PRD 强制对账防 false-green:每次运行都拿 PRD 的 P0/P1 流程与
core_flows做 diff,漂移即红灯。清单靠自觉维护必腐烂,而腐烂的清单会让矩阵全绿、现实有洞——把「我们不知道」伪装成「我们覆盖了」,比没有闸门更坏。 - 报告落盘
docs/07_reviews/quality/<日期>.md(ledger 型,可 diff 可看趋势),含红绿表、实测证据、覆盖矩阵、对账结果、趋势、人工签字栏。 - 量不到的项如实写「未测量」,不得因此判为通过——与「无命令可跑 →
checks: {}」同一条纪律。
- E2E 覆盖矩阵:靠显式
- 新模板:
quality-targets-template.yml、e2e-flow-map-template.yml、quality-report-template.md。 stale-configeval(A-live 第三个场景):unit真失败(exit 1) +lint指向不存在的脚本(exit 127),验证「命令跑不了 ≠ 检查没通过」。判别力来自一个有值 + 一个表达「无法判定」——照抄 schema 的模型会把两个键都填布尔值。真机验证通过,且这一跑当场纠正了规范本身:原先要求"必须省略键"过窄,实际null与缺席对消费方等价(jq都返回null),已放宽为二者皆可、唯独不许false。- 多字节相邻守卫(repo hygiene):
install-smoke新增一条闸——全仓.sh里$var紧贴中文即失败。这类写法几乎总藏在错误分支里,正常路径跑不到、一旦真出错连报错本身都崩;本仓已被它坑过 4 次。
Changed
-
test-commands.yml自动保鲜:这份文件会随项目演进而过期(脚本改名、runner 换代、工具移除),一旦过期下游所有checks就开始失真。现在不需要你记得去维护:- 退出码三态语义(新共享片段
check-commands.md,12 → 13 个):0=通过、非 0=未通过、127/命令不存在=无法判定。后者省略该checks键而非写false——把「跑不了」记成「没通过」是会误导人的虚报:它让人去查代码,而真正的问题是配置过期。 - 过期检测零成本:各阶段本来就在跑这些命令,遇到「跑不了」即提示 yml 疑似过期。
pdlc-tdd/pdlc-implement/pdlc-review/pdlc-quality/pdlc-test-setup五处共用同一套语义。 /pdlc-quality报告新增「配置健康度」一节:哪条命令已失效、哪个空格现在可以填上(💡 可收紧)。/pdlc-test-setup --refresh:重新探测并给出 diff。方向决定自动化程度——让闸门变严(空 e2e 现在能跑、阈值上调)或平移替换可自动应用;让闸门变松(删命令、留空、降阈值)必须人确认,--autonomous也不豁免。最危险的"自动修复"就是把坏掉的 check 留空:闸门瞬间松了、报告还是绿的。
- 退出码三态语义(新共享片段
-
/pdlc-ship前置检查新增质量闸门:读docs/07_reviews/quality/最近一份报告,未达标默认不放行,要发必须由人显式 override 并写明理由;报告早于最近提交则提示已过期。 -
/pdlc-prd新增上游挂钩:产出 P0/P1 流程时提示补core_flows与 E2E 映射——在源头挂钩比事后补救可靠。 -
目标项目契约新增
docs/00_standards/quality-targets.yml、docs/00_standards/e2e-flow-map.yml、docs/07_reviews/quality/。
Fixed
- 红灯守卫在常见测试布局上误拦(真实项目验证暴露):
pdlc-implement的前置守卫原先只在一份写死的路径清单(backend/services/*/tests/、frontend/*/src/__tests__/等)下找测试,找不到就判「项目没测试」并中止。但真实布局千差万别——单体backend/tests/、根级tests/、Go 同包*_test.go、Node 与源码同目录的*.test.tsx——守卫把「测试不在我预期的位置」当成了「项目没有测试」,会让 pdlc 在大量正常项目上直接卡死。- 新增共享片段
test-location.md(11 → 12 个)。核心原则是优先问 runner、其次翻文件:项目的test-commands.yml是权威,用它去问 runner(cargo test -- --list/pytest --collect-only -k/go test -list/vitest list),查询为空才是「该功能没有测试」——这是行为证据,比「我没找到文件」可靠得多。 - 专门处理「测试写在源文件里」的语言:Rust 单测几乎总在
#[cfg(test)] mod tests里,tests/按 Cargo 约定只放集成测试,所以「没有tests/目录」在 Rust 项目里完全不能推出「没有单元测试」,照文件清单判红会稳定误伤所有 Rust 项目。同类还有 Vitest in-source testing(import.meta.vitest)、Python doctest、Elixir doctest——这些都必须靠内容标记匹配,文件名扫描无效。 - 定位顺序:问 runner → in-source 内容标记 → 生态布局约定 → 文件名兜底,四步都落空才判红灯;无法判定(runner 装不上 / 语言不认识)则如实报「无法确认」并交还人类,不默认放行。
- 真 Rust 项目双向验证(一个 Tauri 项目,54 个文件含 in-source 测试、无
test-commands.yml):正例——某模块的 21 条测试只存在于源文件内(同级tests/目录无对应文件),守卫正确找到并跑cargo test确认全绿,未误拦(旧逻辑在此必红);反例——一个真的没有测试的功能,守卫正确红灯、零代码改动、且未伪造状态机(守卫在提取功能 ID 前中止,凭空写current_stage属伪造阶段记录)。两向都对,证明修复没有把守卫改松。 pdlc-implement/pdlc-tdd/pdlc-feature/pdlc-fix四处改为引用该片段;写测试时也跟随项目既有布局,不再新造平行目录。
- 新增共享片段
- 对账自身的 false-green(真项目验证时实测踩到):PRD 不含 P0/P1 标记时提取为空集、不产生漂移条目,报告若就此判「无漂移 ✅」,等于宣称那份 PRD 的流程都覆盖了——而事实是它整份没进闸门视野(已上线的老主链路最容易栽在这里)。现要求单列「不可判」告警,且对账项不得判为 ✅。
- 修全仓 5 处
$var紧贴中文的隐患(bin/pdlc-statusline.sh、tests/adapter-codex-check.sh×2、tests/statusline-check.sh×2),并加上防复发守卫。
v1.5.3
行为层 evals(A-live)落地——测的是「skill 真跑时契约有没有被守住」,而不只是结构。设计见 docs/decisions/0005-testing-and-quality-capability.md,用法与成本账见 evals/EVALS.md。
Added
evals/行为层测试:run.sh(runner)+honest-checks/red-light-gate两个 A-live fixture +EVALS.md。- 分档判据「契约由谁执行」:确定性代码执行的契约(bash 驱动 / jq 映射)可用桩测、留在
tests/;由模型遵守 SKILL.md 正文执行的契约桩测不了,必须真跑(A-live)。 - 失败二分类:环境抖动(无状态机产出,自动重跑、不计失败)vs 契约破坏(有产出但判别式不符,立即红);全抖动时报「无结论」而非冒充通过。
run.sh --check离线校验 fixture(不烧额度,CI 只跑这个)、--replay对保留现场复跑断言、--repeat N以多数通过为结论。install-smoke.sh新增 11 条 evals 不变量(95 → 106)。
Fixed
- 状态机推进契约冲突(由
honest-checkseval 首跑抓到):pdlc-implement/pdlc-prd的段四无条件写current_stage,与共享片段state-update.md规则 5「ok=false时current_stage不变」矛盾,导致失败的阶段也会推进current_stage、令外层循环的 stuck-stop 失效。两处均改为「仅当本阶段成功时才推进」。
v1.5.2
Codex 上的 PDLC 自主收敛循环(loop-run 外部 Runbook 版)。设计与真机准入闸结果见 docs/decisions/0004-codex-loop-run.md。
Added
adapters/codex-loop-run.sh— Codex 外部 Runbook 驱动:一个 bash 循环,无人值守把tdd → implement → review推到review_done。以状态机为唯一真源,每轮读状态机 → loop-next 映射的 jq 复刻判下一跳 →codex exec "按 pdlc <阶段> <id> --autonomous"→ 读回判护栏(--max-steps默认 4 上限停机 /ok!=truefail-stop /current_stage未推进 stuck-stop)。发布永远人工(到 review_done 即停,绝不自动 ship/deploy);--dry-run离线看决策。tests/adapter-codex-loop-run-check.sh— 驱动映射 + 护栏回归(mock 状态 +--dry-run,免 codex,12 断言)。docs/decisions/0004-codex-loop-run.md— ADR + 状态完整性准入闸真机结果:gpt-5.6-sol 用「unit 恒失败 / lint 恒通过」判别场景,真跑test-commands.yml、诚实写{tests_pass:false, lint_clean:true}(一真一假只可能来自真跑)、fail-stop、发<<<PDLC blocked>>>哨兵——闸过,loop-run 得以在 Codex 放行。
v1.5.1
Codex 适配器真机验证后的重大更正:v1.5.0 假设 Codex 靠 ~/.codex/prompts/*.md 斜杠命令,未验证就发版——实测目标 Codex 是兼容 Claude Code 生态的发行版,用 ~/.codex/skills/<name>/SKILL.md(description 触发、非斜杠命令)。gpt-5.6-sol 自然语言触发 pdlc-prd 成功、写出 schema 正确的状态机(Claude Code 可无缝读)。
Changed
- Codex 适配器改到
skills/布局:build_codex.py现输出dist/codex/skills/pdlc-*/SKILL.md(Codex skill 格式 frontmattername+description,description 追加 pdlc 触发提示;next_step物化措辞改为自然语言、非斜杠命令)。install.sh --target codex装到~/.codex/skills/,并自动清理 v1.5.0 误装的~/.codex/prompts/pdlc-*.md。安装提示改为「重启 Codex + 自然语言驱动」。 - README / README.zh-CN / usage-guide / adapters/README / ARCHITECTURE / ADR 0003:Codex 接入说明从「prompts 斜杠命令」更正为「skills description 触发」,含真机验证纪要。
Fixed
checks虚报诱导坑(跨工具状态可信的命门):state-update.md的 schema 示例此前把checks写死{tests_pass:true, coverage_pass:true, lint_clean:true},诱导模型在 requirements/design 等无测试可跑的阶段照抄假true(真机实测 gpt-5.6-sol 确实照抄了)。改为示例checks: {}+ 显式规则「无检查命令可跑的阶段留空{},绝不因阶段成功就填 true」。对 Claude Code 也是净收益。
v1.5.0
多平台支持第一步:把 PDLC 方法论内核平台中立化,并交付 Codex CLI 适配器。设计见 docs/decisions/0003-multi-platform-adapters.md。Claude Code 仍是一等公民、不降级。
Added
docs/pdlc-methodology.md— 平台中立的 PDLC 方法论内核(Tier 1「地板」):IRON LAW 六条、状态机契约、目标项目目录契约、功能/缺陷 ID 分配、四段式骨架、test-commands.yml客观检查、自然语言 → 阶段映射,并诚实标注哪些能力仅 Claude Code。任何 AI 编程工具(Codex / Cursor / Windsurf / Copilot / Cline …)可据此用自然语言驱动 PDLC,共享同一份docs/.pdlc-state/。adapters/build_codex.py— Codex 适配器:把skills/*/SKILL.md构建期投影为 Codex CLI 自定义 prompts。转译——内联@include(自包含、剥离 Claude 术语)、剥离 Claude 内部 frontmatter、物化next_step进正文、剥掉adapter:claude-only哨兵块(Claude 专属示例管线)、denylist 2 个 Claude-Code-only skill(pdlc-settings状态栏、pdlc-loop-run自主收敛引擎)。产出 34 个/pdlc-*prompt + 文档模板 + 方法论。pdlc-loop-next逻辑平台中立、作为独立只读查询投影(其claude -p驱动 helper 由哨兵剥掉)。python3 标准库、零 pip 依赖、仅构建期。install.sh --target codex— 一步构建并安装 Codex prompts 到~/.codex/prompts/(模板 + 方法论到~/.codex/pdlc/);--target codex --uninstall移除。需本地克隆 + python3。adapters/README.md— 适配器架构 + 转译步骤(含adapter:claude-only哨兵机制)+ 如何新增一个平台(含状态完整性准入闸)。tests/adapter-codex-check.sh— Codex 产物回归:34 prompt / denylist 缺席 / loop-next 已投影且 claude 专属 helper 被哨兵剥掉 / 无@include残留 / 无 Claude 术语泄漏 / frontmatter 剥离 /next_step物化 / 模板引用改写 / 方法论落地。
Fixed
install.sh陈旧计数 — Claude Code 提示里「33 sub-commands」更正为 36(settings/loop-next/loop-run 加入后未同步)。marketplace.json版本同步 + 校验兜底 — marketplace.json 版本随 VERSION 一起 bump(此前只 bump plugin.json,marketplace 连续两版漏改);frontmatter-check.sh新增「marketplace 版本 == VERSION」断言,以后自动兜住、不再靠人肉盯。
v1.4.0
在 Claude Code 状态栏显示 PDLC 运行状态(可选、默认关)。设计见 docs/decisions/0002-statusline-pdlc-status.md。35 → 36 skills。
Added
bin/pdlc-statusline.sh— 自包含状态栏片段:读 stdin 的 Claude Code JSON、扫当前项目docs/.pdlc-state/,独占一行显示「功能名 + 迷你进度条 + 下一步 + 运行图标 + 检查 + 停留时长」。默认关闭、零副作用;非 PDLC 项目 / 无状态文件 / 缺 jq 一律静默吐空、退出码 0;渲染只读本地、无网络。blocked做成全行最醒目;多 feature 时非终态 + blocked 优先并懒解析(只扫最近 N 个,保 <10ms)。兼容 macOS 自带 bash 3.2。/pdlc-settings(Layer 3) — 交互式设置命令,当前含状态栏一节:启用 / 停用 / 展示项 / 状态。启用走稳定路径符号链接~/.claude/pdlc-statusline(升级不断)+ 幂等追加到用户唯一的statusLine.command(绝不覆盖现有 HUD)。改全局~/.claude/settings.json强制备份 + diff + 确认;写入被安全层拦截时优雅降级为「算好那一行 + 用户手动粘贴」,绝不谎报已启用。references/templates/pdlc-statusline.example.json— 展示项配置样例(含各键说明);全局~/.claude/pdlc-statusline.json可被项目级docs/.pdlc-state/statusline.json覆盖。tests/statusline-check.sh— 7 场景回归(impl 交互 / loop autonomous / blocked / review_done / 多 feature 抢权 / 窗口外旧 blocked 不抢权 / 非 PDLC 吐空)。
v1.3.0
分布式友好的 feature/defect 编号:解决多人 / 多 AI 并行开发时的编号冲突。
Changed
- 功能/缺陷 ID 从「当日序号」改为「创建时刻时分秒」 —
F<YYYYMMDD>-<HHMMSS>/B<YYYYMMDD>-<HHMMSS>(如F20260717-122801)。各工作副本零协调也几乎不撞号(仅同一秒创建才可能,撞了本地自动 +1 秒),合并时状态机文件名互异、git 自动合并,不再需要手工重编号。旧的 2 位序号 ID(F<日期>-NN)向后兼容、仍可解析;派生的_relations.json等聚合文件照旧pdlc-relate rebuild重建、不手合。 - 任务 ID 改为「功能ID前缀 + 本功能内序号」 —
T<功能ID的日期-时分秒>-<NN>-<type>(如功能F20260718-094301→ 任务T20260718-094301-01-feat)。前缀嵌入所属功能的唯一时分秒,任务号全局唯一、自带归属、并行安全;NN在本功能任务文件内递增(不再扫全局docs/06_tasks/取当日 max)。任务用本地序号而非各自时分秒是刻意的:任务成批同秒创建,独立时分秒会互撞。
v1.2.1
Loop 工程在真安装环境端到端验证后的健壮性修复(真跑 /pdlc-loop-run 暴露的两点)。
Fixed
- loop-next 输出健壮性 — 明令输出裸 token、禁止代码块/反引号包裹;
/pdlc-loop-next参考 helper 与 usage-guide Runbook 加净化(去反引号/空白后按白名单抽取 token),防模型偶发包裹导致外部 bash 循环case匹配失败。 - autonomous sidecar 产物澄清 —
noninteractive.md明确:自主模式下创建缺失的CHANGELOG.md、补全 PDLC-TRACE 时间戳等本阶段职责内、可安全默认的改动,直接做并记入auto_decisions[](非破坏性)。