gsd-core 将 RETROSPECTIVE.md 登记为 Canonical Artifact:彻底消除 gsd-health W019 误报
【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载导读本文围绕 gsd-core 仓库中一次针对健康诊断规则 W019 的修复展开RETROSPECTIVE.md被正式写入CANONICAL_EXACT注册表位于 src/artifacts.cts使得gsd-health底层为validate health不再将其标记为「未识别的.planning/根文件」并抛出 W019 告警。读完本文你将理解 GSD 的 canonical artifact 注册机制、W019 规则的判定逻辑、RETROSPECTIVE.md作为/gsd-complete-milestone活文档的产生与消费链路以及如何用测试固化这类注册变更。1. 修复背景W019 的误报问题在.changeset/archived/3198-retrospective-canonical.md记录的变更中一行描述点名了两个核心事实gsd-health曾对RETROSPECTIVE.md抛出 W019「未识别文件」告警修复方式是把它注册进CANONICAL_EXACT与它作为/gsd-complete-milestone产出活文档living artifact的既有地位对齐。W019 属于健康诊断规则组「Milestone archive root hygiene」与 W018 同组定义在 src/health-diagnostic-rules/milestone-archive-hygiene.cts。该规则的职责是遍历.planning/根目录下的所有.md文件凡是不在 canonical 工件清单之内的一律发出 W019 告警并附带修复建议Unrecognized .planning/ file: {filename} — not a canonical GSD artifact建议「Move to .planning/milestones/ archive subdir or delete if stale. See templates/README.md for the canonical artifact list.」问题在于RETROSPECTIVE.md是/gsd-complete-milestone在每次里程碑收尾时正式产出并持续维护的文档但它此前并不在CANONICAL_EXACT集合里于是每次运行健康检查都会收到一条「请归档或删除」的错误建议——明明该文件是工作流主动创建的却被告知它不是规范工件属于典型的自产文件误报。2. 核心机制Canonical Artifact 注册表2.1CANONICAL_EXACT精确匹配清单修复落点位于 src/artifacts.cts 的CANONICAL_EXACT集合。该文件头部注释明确说明其定位Enumerates the file names that gsd workflows officially produce at the .planning/ root level. Used by gsd-health (W019) to flag unrecognized files so stale or misnamed artifacts dont silently mislead agents or reviewers. Add entries here whenever a new workflow produces a .planning/ root file.注册表分为两套匹配规则精确匹配CANONICAL_EXACT——目前包含 16 个条目文件名产出方 / 说明PROJECT.md/gsd:new-project项目身份与目标ROADMAP.md/gsd:new-milestone、/gsd:new-projectSTATE.md/gsd:new-project、gsd-health --repairREQUIREMENTS.md/gsd:new-milestoneMILESTONES.md/gsd:complete-milestoneBACKLOG.md/gsd-add-backlogLEARNINGS.md/gsd:extract-learnings等THREADS.md/gsd:threadconfig.json/gsd:new-projectCLAUDE.md/gsd-profile自动组装RETROSPECTIVE.md/gsd:complete-milestone本次修复新增语义WINDOWS.mdbroken-windows ledgersrc/broken-windows.cts#3224STATE-ARCHIVE.mdstate.cts的cmdStatePrunemilestone.locksrc/milestone-lock.cts#3311state.jsonsrc/state-contract.cts步骤边界发布#3227skill-manifest.jsoninit.cts的cmdSkillManifest --write#3964PATTERNS.md跨阶段模式沉淀#4282区别于阶段内NN-PATTERNS.md注意RETROSPECTIVE.md在源码中位于第 26 行紧邻CLAUDE.md与WINDOWS.md之间正是本次 changesetPR 3200所引入的登记。模式匹配CANONICAL_PATTERNS——针对带版本戳的文件名/^v\d\.\d(?:\.\d)?-MILESTONE-AUDIT\.md$/i, // gsd-complete-milestone (pre-archive) /^v\d\.\d(?:\.\d)?-.*\.md$/i, // other version-stamped planning docs2.2 判定函数isCanonicalPlanningFile注册表的唯一消费入口是isCanonicalPlanningFile(filename)src/artifacts.cts它按「先精确、后正则」的顺序判定export function isCanonicalPlanningFile(filename: string): boolean { if (CANONICAL_EXACT.has(filename)) return true; for (const pattern of CANONICAL_PATTERNS) { if (pattern.test(filename)) return true; } return false; }三个关键约束值得注意只接受 basename调用方传入的是不带路径的文件名路径处理在上层完成大小写敏感RETROSPECTIVE.md合法而retrospective.md或RETROSPECTIVE.MD均会被拒绝测试中有state.md判false的用例佐证空串与无关文件返回false保证 W019 对任何未登记文件照常触发。3. W019 规则的实现链路W019 的检查函数checkW019位于 src/health-diagnostic-rules/milestone-archive-hygiene.cts实现逻辑清晰function checkW019(snapshot: PlanningSnapshot): Diagnostic[] { const diagnostics: Diagnostic[] []; for (const filename of snapshot.planningRootFiles.value) { if (!filename.endsWith(.md)) continue; if (isCanonicalPlanningFile(filename)) continue; diagnostics.push({ code: W019, severity: SEVERITY.WARNING, message: Unrecognized .planning/ file: ${filename} — not a canonical GSD artifact, remedy: adviseRemedy( Move to .planning/milestones/ archive subdir or delete if stale. See templates/README.md for the canonical artifact list., ), }); } return diagnostics; }从实现可以提炼出几条明确的规则语义只检查.planning/根目录文件清单来自 planning snapshot 的planningRootFiles阶段子目录.planning/phases/NN-name/内的文件不在检查范围每个未识别文件产生一条独立告警与 W018 的聚合式报告不同W019 是「一文件一告警」测试中两个杂散文件会产生两条 W019 即为此意非自动修复repairable: false规则表同文件第 98-113 行中 W019 明确标注repairable: false健康检查的--repair不会自动移动或删除文件需要人工依据建议处理。该文件头部还注明了来源规则从cmdValidateHealth原src/verify.cts行为保持地移植而来并遵循 ADR-457「build-at-publish」策略——源码是src/health-diagnostic-rules/milestone-archive-hygiene.cts编译产物为 gitignored 的bin/lib/health-diagnostic-rules/milestone-archive-hygiene.cjs。4. RETROSPECTIVE.md 的生产与消费为什么它必须是 canonical要理解本次修复的必要性需要看清RETROSPECTIVE.md在完整里程碑收尾工作流中的角色。4.1 模板活文档的结构模板位于 gsd-core/templates/retrospective.md开篇即声明其定位A living document updated after each milestone. Lessons feed forward into future planning.模板包含两大板块单里程碑板块## Milestone: v{version} — {name}内含 Shipped/Phases/Plans/Sessions 元信息以及What Was Built、What Worked、What Was Inefficient、Patterns Established、Key Lessons、Cost Observations六个小节跨里程碑趋势板块## Cross-Milestone Trends用表格沉淀Process Evolution、Cumulative Quality与Top Lessons (Verified Across Milestones)。4.2 工作流每次收尾都会写入在 gsd-core/workflows/complete-milestone.md 的write_retrospective步骤中流程完整定义了该文件的维护方式探测ls .planning/RETROSPECTIVE.md 2/dev/null || true检查文件是否存在分支处理已存在则读取并在## Cross-Milestone Trends之前追加新里程碑板块不存在则从模板retrospective.md创建数据采集从SUMMARY.md提取交付物、从VERIFICATION.md提取验证分数与缺口、从UAT.md提取测试结果、从 git log 统计提交与时间线再结合里程碑过程反思提交gsd_run query commit docs: update retrospective for v${VERSION} --files .planning/RETROSPECTIVE.md将更新固化到 git 历史。同工作流的 checklist第 727 行也把RETROSPECTIVE.md updated with milestone section列为收尾必检项。这意味着只要完整执行过/gsd-complete-milestone.planning/RETROSPECTIVE.md就必然存在——它既不是临时草稿也不是残留杂物而是一个被工作流持续维护的规范产物。4.3 消费里程碑总结的输入源在 gsd-core/workflows/milestone-summary.md 中RETROSPECTIVE.md被列为「Always available」的三个路径之一与PROJECT.md、STATE.md并列其 lessons learned 是生成里程碑总结时「what to improve」部分的内容来源。此外 gsd-core/workflows/help/modes/full.md 在.planning/目录速览里也将其标注为 Living retrospective (updated per milestone)。至此结论闭环一个被工作流主动创建、每次收尾持续更新、被其他工作流当作权威输入读取的文档理应属于 canonical artifact 清单。此前它不在CANONICAL_EXACT中导致gsd-health给出「请归档或删除」的误导性建议——这正是本次 changeset 修复的实质。5. 修复的验证测试与文档联动5.1 注册表单元测试tests/artifacts.test.cjs 集中覆盖了注册表行为其中对同类误报修复的回归用例提供了先例参照如 #3227 的state.json、#3224 的WINDOWS.md、#4282 的PATTERNS.md其模式完全适用于RETROSPECTIVE.md断言CANONICAL_EXACT.has(RETROSPECTIVE.md)为真断言isCanonicalPlanningFile(RETROSPECTIVE.md)返回true断言isCanonicalPlanningFile(random-file.md)仍返回falseW019 的兜底能力不受影响。5.2 W019 集成测试同一文件的gsd-health W019 — unrecognized .planning/ root files分组第 187 行起通过临时项目夹具验证了完整行为矩阵.planning/MY-NOTES.md→ 触发一条 W019消息包含文件名repairable false仅标准BASE_FILES→ 无 W019版本戳文件v1.0-MILESTONE-AUDIT.md→ 无 W019命中CANONICAL_PATTERNS阶段子目录文件 → 无 W019根目录外不检查两个杂散文件 → 产生两条 W019一文件一告警。对应规则单测位于 tests/health-diagnostic-rules/milestone-archive-hygiene.test.cjs明确标注其来源为 Phase 11、#3309、ADR-3180 §8.2/§8.3/§8.5。5.3 权威清单文档同步gsd-core/templates/README.md 是该机制的权威索引开篇即声明if a.planning/root file is not listed here,gsd-healthwill flag it as W019 (unrecognized artifact).其根工件表格第 25 行已列出RETROSPECTIVE.md来源列标注为/gsd:complete-milestone用途为 Living milestone retrospective updated at each milestone close。由于 W019 的修复建议文本会指引用户「See templates/README.md for the canonical artifact list」文档、注册表、规则三者必须保持一致——本次变更正是这种一致性的又一次落地。同时第 45、66 行分别说明阶段子目录文件与归档到.planning/milestones/的文件永远不会被 W019 检查。6. 实践指引6.1 运行健康检查观察效果在项目根目录执行gsd-health修复前若.planning/根目录存在RETROSPECTIVE.md会收到W019 — Unrecognized .planning/ file: RETROSPECTIVE.md告警及「归档或删除」的建议。修复后该文件命中CANONICAL_EXACT不再产生任何告警而未登记的文件如MY-NOTES.md、scratch.md仍会被正常标记。6.2 新增根工件时的正确姿势参照src/artifacts.cts头部注释的指引任何新工作流若要在.planning/根目录产出文件应完成三件事注册将文件名加入CANONICAL_EXACT或符合语义时加入CANONICAL_PATTERNS文档化在 gsd-core/templates/README.md 的根工件表格中登记产出方与用途测试固化在 tests/artifacts.test.cjs 增加「注册表包含 判定为 canonical」的回归用例并视需要在 W019 集成测试中补充「不误报」用例。6.3 边界行为速查场景W019 行为.planning/RETROSPECTIVE.md本次修复不告警.planning/PROJECT.md等精确匹配项不告警.planning/v1.2.0-MILESTONE-AUDIT.md不告警正则匹配.planning/phases/01-foundation/01-01-PLAN.md不告警仅查根目录.planning/milestones/归档文件不告警归档目录豁免.planning/scratch.md等未登记文件告警且不可自动修复大小写变体如retrospective.md告警精确匹配区分大小写7. 小结本次 changesetPR 3200是一次典型而精准的「注册表遗漏」修复RETROSPECTIVE.md作为/gsd-complete-milestone持续维护的活文档其 canonical 地位此前只体现在工作流与文档层面却未同步到 src/artifacts.cts 的CANONICAL_EXACT导致gsd-health的 W019 规则对它误报。修复后注册表、W019 判定、模板 README 权威清单三者达成一致规则仍保留对真正杂散文件的告警能力。这一模式注册 → 文档化 → 测试固化为 gsd-core 中所有根级工件的管理提供了可复制的范本。赞分享【免费下载链接】gsd-coreGit. Ship. Done - Core项目地址https://gitcode.com/gh_mirrors/ge/gsd-core点击查看免费下载相关推荐gsd-core W002 误报修复详解/gsd:health 为何不再为已归档 Phase 报错gsd core W002 误报修复详解/gsd:health 为何不再为已归档 Phase 报错 本文围绕 gsd core 仓库中的一个变更集记录chagsd-core 里程碑归档目录解析修复getActiveMilestoneArchiveDir 的 null 语义与 W007 误报消除gsd core 里程碑归档目录解析修复getActiveMilestoneArchiveDir 的 null 语义与 W007 误报消除 本文聚焦 gsdVitest includeTaskLocation 配置详解为任务注入源码定位并启用按行号过滤测试Vitest includeTaskLocation 配置详解为任务注入源码定位并启用按行号过滤测试 includeTaskLocation 是 Vitest创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Flint 溢出处理机制深度解析:200个类目的图表如何依然可读(过滤策略与警告系统)

Flint 溢出处理机制深度解析:200个类目的图表如何依然可读(过滤策略与警告系统)

Flint 溢出处理机制深度解析:200个类目的图表如何依然可读(过滤策略与警告系统) 【免费下载链接】flint-chart 🪄 Flint is a visualization language that lets AI agents reliably create expressive, good-looking charts from…

2026/9/25 1:16:24 阅读更多 →
VS2022下C语言课设:学生信息管理系统实现与避坑指南

VS2022下C语言课设:学生信息管理系统实现与避坑指南

简介:一份基于VS2022的C语言学生信息管理系统课程设计资源,采用链表存储学生数据,支持添加、删除、修改、查询及按成绩或姓名排序等操作,适合期末课程设计、C语言链表项目练习者参考。压缩包共30个文件,包含cpp源代码、…

2026/9/25 1:16:24 阅读更多 →
杭州企业宣传片制作公司综合实力推荐:首影传媒省心服务,口碑公司汇总

杭州企业宣传片制作公司综合实力推荐:首影传媒省心服务,口碑公司汇总

很多杭州企业找宣传片制作公司的时候,都会碰到不少共性的难题:要么传统制作周期长,赶不上项目节点,要么本地团队响应慢,紧急项目没人对接,要么设备不够支撑创意落地,成片效果扣,要么…

2026/9/25 1:16:24 阅读更多 →

最新新闻

朴素贝叶斯实现情感文本分类:源码解析与实战避坑指南

朴素贝叶斯实现情感文本分类:源码解析与实战避坑指南

简介:面向计算机相关专业学生与从业者,基于朴素贝叶斯算法的情感文本分析与分类项目源码及数据集,是期末大作业的完整方案。项目以微博短文本情感分类为核心,利用预训练词向量完成文本向量化,配合朴素贝叶斯分类器实现…

2026/9/25 6:10:51 阅读更多 →
ShardingSphere分库分表实战:千万级订单系统的多数据源协同方案

ShardingSphere分库分表实战:千万级订单系统的多数据源协同方案

简介:这是一份面向Spring Boot中高级开发者的技术实践项目,聚焦多数据源管理与数据库分库分表核心场景,解决高并发下单库性能瓶颈与读写分离需求。资源基于Spring Boot 2.x构建,集成MyBatis-Plus简化DAO层开发,采用dyn…

2026/9/25 6:10:51 阅读更多 →
US-Cities-Database地理数据实战指南:加载、清洗与GIS应用

US-Cities-Database地理数据实战指南:加载、清洗与GIS应用

简介:本资源是一个结构完整、开箱即用的美国城市地理信息数据库,面向GIS开发、数据分析、Web地图应用及地理教学等场景的初中级开发者与研究者。数据覆盖全美城市名称、所属州、邮政编码、经纬度等核心字段,支持地理可视化、区域统计与空间查…

2026/9/25 6:10:51 阅读更多 →
Ubuntu 22.04在VMware 17安装Tools终极指南

Ubuntu 22.04在VMware 17安装Tools终极指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 6:10:51 阅读更多 →
oh-my-opencode-slim 桌面伴侣 Companion:浮动 Agent 状态叠加层配置、安装与自更新机制全解

oh-my-opencode-slim 桌面伴侣 Companion:浮动 Agent 状态叠加层配置、安装与自更新机制全解

人工智能AI AgentAgent 编排AI 技能 【免费下载链接】oh-my-opencode-slim Lean, fine tuned Opencode multi agent suite Mix any models Auto delegate tasks 项目地址: https://gitcode.com/gh_mirrors/oh/oh-my-opencode-slim 点击查看 免费下载 导读&#x…

2026/9/25 6:10:51 阅读更多 →
@turf/line-to-polygon 完全指南:将 LineString / MultiLineString 转换为 Polygon 的实现原理与实战用法

@turf/line-to-polygon 完全指南:将 LineString / MultiLineString 转换为 Polygon 的实现原理与实战用法

数据分析 【免费下载链接】turf A modular geospatial engine written in JavaScript and TypeScript 项目地址: https://gitcode.com/gh_mirrors/tu/turf 点击查看 免费下载 turf/line-to-polygon 是 Turf 模块化地理引擎中的核心转换模块,负责将 (Mul…

2026/9/25 6:09:51 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →