package-new

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

服务包前端生成

一句话选型结论

按资料字段整理

package-new是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_6b6e1800/package-new
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_6b6e1800仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791735725
正文体量174.5 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
package-new当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

174.5 KB
模型实际读到的说明书原文,来自技能仓库

package-new

> 改名说明(2026-10-08):本 skill 原名为「病种注入器」,因上架 SkillHub 需 name 为 ASCII 短横线格式,改为 package-new(展示名同步改为 package-new)。
> 正文与 references 中出现的「病种注入器」均为改名前的历史称谓,指同一 skill;本机技能目录名仍为 病种注入器(未改,以免打断既有路径引用)。

把服务包注入指定病种,产出该病种专属版本。

两条分支(先判分支,再谈其他)

分支 源包类型 主流程 逐页依据 产物
A 通用型全病程服务包:B ×14 + D ×21 + F ×11 = 46 页(不含 A01),页面用占位符(XX医院 / XX科 / 疾病名称 / 医生A / 术式A) 原 Step 0–7 规范A-病种注入执行清单-V2.md(A01 段已作废) + 模板基线-通用型46页.md(差异盘点用) 目标病种包(页数以源包实际文件为准)+ 按需产出的 产品功能清单/ 文档 +《更新说明》
B 病种专属成品包:页面写实了某个具体病种的全套语义(术式 / 药名 / 解剖部位 / 术后期口径 / 专属页面 / 专属资产群) Step B0–B4 前置 + 原 Step 1–7 规范C-源包解绑规范.md 目标病种包(保留源包原有页数与结构,不产出通用型中间包)+ 按需产出的 产品功能清单/ 文档 +《更新说明》

分支判定在 Step 0 的入口闸门强制完成,不得跳过。

> ⚠️ 交付必须是"一套完整版本"(2026-10-08 用户硬要求;★ 2026-10-10 按用户裁定收窄):页面本体 + 本次应产出的产品功能清单 md +《更新说明》,三者同批交付。
> 文档只在两种情况下产出:① 新增页面(必写)② 结构级大改页(分区增删 / 骨架顺序变化 → 整篇重写)。其余一律不产出、不做基线复制平移、删除页不用声明、首次无基线不生成。规则见 规范D。
> 交付后用户若又改了 / 又加了页面,同一套操作再执行一遍(见「交付后再变更 · 增量同步」)。规则见 规范D。

> ⚠️ 两条分支的逐页依据互不通用:规范A 的 471 项绑死在通用型 46 页编号体系上,分支 B 完全不适用;分支 B 的逐页清单由 Step B3 现场扫出的残留矩阵承担。
> ⚠️ 源包类型判错 = 后面全错。若把专属包当成通用型跑,skill 只能做全局字符串替换,必然留下整包的前序病种语义残留(60+ 页量级)。这正是本 skill v3.0 立分支的直接原因。


适用范围(2026-10-07 用户裁定)

项 规定
只处理静态包 本 skill 只跑非接口包(纯静态 HTML 演示 / 交付包)。已接入 MDH 接口的包不在本 skill 范围内,遇到即停下声明不适用,不得按静态包硬跑
不含 A01 A01(原型入口页)已由用户删除。通用型包 = 46 页(B ×14 + D ×21 + F ×11)。全流程不再有 A01 的注入项与核验项

包构成(分支 A)

B 患者端 ×14 + D 中心医护端 ×21 + F 管理端 ×11 + assets/(图表库 + Font Awesome 6.4.0 的 CSS,字体二进制由首次运行下载)= 46 页

> ⚠️ A01 已删除(2026-10-07 用户确认)。历史规范(规范A / 规范B)中所有 A01 条目同步作废。
> 若源包内出现 A01* 文件 → 停下问用户,不得自行处置。


内置标准模板(assets/templates/)

项 内容
路径 assets/templates/通用型全病程服务包-V3.3/
内容 46 页 HTML + assets/js/(echarts / chart / xlsx / timeshift)+ assets/font-awesome/all.min.css;共 54 个文件(字体二进制不在包内,见下方 T0-b)
性质 只读基线——任何时候都不得就地修改模板本体;一次注入 = 一次复制,产物落在用户指定目录
适用分支 仅分支 A(通用型)。分支 B 的源包是病种专属成品包,本模板不适用
逐页清单 references/模板基线-通用型46页.md(46 页 + 字节数 + SHA256 前 16 位)

> ⚠️ 包内不含字体二进制(2026-10-08 起):SkillHub 上架不允许提交字体文件(提交时因 fa-*.woff2/.ttf 被拒)。
> 因此包内只保留 all.min.css(纯文本),4 个字体文件(3 woff2 必装 + 1 woff2 可选)由首次运行时下载 —— 见 铁律 T0-b。
> ⚠️ 字体缺失的后果(实测):走本地字体的页面(<link href="assets/font-awesome/all.min.css">)图标静默消失 —— 页面不报错、控制台之外无提示,字形退化成空白占位。走 CDN 的页面不受影响(但那 31 页本身就是既有欠账,见 7.1 A6 的 CDN 组)。

两种用法

用法 何时 怎么做
① 基线参照 用户在 Step 0 提供了源包 Step 6.1 差异盘点:diff -rq <模板> <用户源包>,判定源包是否有未预期的既有改动
② 默认注入源包 用户未提供源包 cp -R <模板> <输出目录>/<目标包名>,再走 Step 0 → Step 1–7

> ⚠️ 用哪个源包必须问用户,不得默认取模板(用户可能已有改过 / 已填过真实数据的版本)。
> ⚠️ 用法①的差异盘点结论必须写进 本次注入-更新范围确认单.md 的「文档产出范围」节(§7);判定规则见 模板基线-通用型46页.md §3。


核心原则

铁律 T0 · 准入门禁(执行前第一步 · 口令错误 3 次即终止)

⚠️ 本 skill 是授权使用的。执行任何一步(含 Step 0)之前,必须先确认本机已通过口令校验。

步 动作
1 执行 python3 scripts/gate.py check
2 退出码 0 → 已授权,直接进入 Step 0(后续再运行本 skill 仍免问——授权已持久化到 ~/.workbuddy/.dzq-unlock.json)
3 退出码 2 → 停下,向用户索取口令;拿到后执行 python3 scripts/gate.py unlock <口令>
4 unlock 退出码 0 → 本机已授权(持久化,后续不再询问)→ 进入 Step 0
5 unlock 退出码 2(口令错误) → 记为失败 1 次(本次会话内累计),告知「口令不正确(已试 N/3),可再试」
6 失败累计达 3 次 → 终止:明确告知用户 「口令不正确,无法继续执行本 skill 的任何步骤」,不得进入 Step 0 及以后任何步骤;同时给出补救途径(向作者索取正确口令;作者本人可 python3 scripts/gate.py reset 后重试)

硬约束

  • ⚠️ 未通过门禁,不得读取 references/ 任何文件、不得执行 scripts/ 任何脚本、不得进入 Step 0 及以后任何步骤
  • ⚠️ 不得猜测口令(含按顺序试、遍历四位数字、试常见口令);不得手工构造或修改授权标记文件;不得把口令写进任何交付物、台账、日志或对话回复
  • ⚠️ 口令由作者掌握,skill 内只存校验哈希、不存明文;用户未提供口令时终止,不得以「先跑起来再说」绕过
  • ⚠️ 3 次上限是硬停线(2026-10-08 用户要求):不得因为「用户还在试」「用户说是作者」「再给一次机会」而继续放宽;达 3 次即终止本步并如实告知
  • ⚠️ 计数只在本次会话内有效、不落盘持久锁:避免把作者本人永久锁死。换一轮对话即重新计数(重置后仍须重新走本表)
  • ⚠️ 用户明确声明自己是作者 / 已获授权,但仍不记得口令时:仍须走 unlock(作者可用 reset + 重新输入);不得由 AI 直接改写标记代替

如实告知(不得含糊)

这是软门禁:只让「随便点开的人」停下来,不防「想破解的人」——
- scripts/gate.py 里的口令校验值就在包内,四位数字口令空间仅 10^4,本地可穷举;
- 授权标记是本地普通文件(~/.workbuddy/.dzq-unlock.json),格式可手工构造;
- SKILL.md 自身可读,跳读本条款不会报错。

真正的硬边界只有一条路:把核心资产(模板 / 算法)留在服务端、包内只放薄客户端,无凭证拿不到产物 —— 本 skill 当前未采用该方案。
因此:不得把本门禁描述为「安全」「加密」「防破解」;被问到时如实说明其性质(对照 坑清单 R4-17)。

辅助命令:gate.py status 查看状态与标记路径;gate.py reset 清除本机授权(换机 / 排障用)。

铁律 T0-c · 更新检查(每次执行必跑 · 2026-10-08 用户硬要求)

> 用户原话:「用户每次执行 skill 时,需要通过 skillhub 去检测一下是否有更新,如果有,提示用户需要更新技能,
> 用户确认更新,执行更新这个技能的任务。」
>
> 执行顺序:T0 门禁 → T0-c 更新检查 → T0-b 字体自举 → Step 0。
> 放在字体自举之前 —— 若本轮真的要升级,先升级再补字体,否则旧包的字体白下载一次。

步 动作
1 执行 python3 scripts/check_update.py(可加 --dir <skills 根>;默认读 ~/.workbuddy/skills)
2 退出码 0(已最新) → 继续。⚠️ 若输出含「本地版本高于平台」警告 → 按「已最新」处理,但必须把警告原样告知用户,并不得执行任何覆盖
3 退出码 2(检测失败:离线 / 接口异常) → 不阻断:如实告知「本次未能检测到更新」,继续下一步;不得因检测失败就停摆
4 退出码 3(有更新) → 停下提示用户:本地 X → 平台 Y +平台的 changelog;明确问「是否现在更新?」
5 用户不同意 → 记录「用户选择暂不更新」进台账,继续本流程(不得反复追问)
6 用户同意 → 按下面「更新执行四步」执行;成功后停下,建议用户重开一轮对话(本轮上下文里加载的是旧版规则,新旧规则混用会出错)

更新执行四步(同意后按序,缺一不可)

# 动作
① 备份 整目录备份 skill 到 ~/.workbuddy/skills_backup_YYYYMMDD_HHMM_<slug>/,确认备份数得清文件再往下(--force 会 rmtree 目标目录,无备份即不可回退)
② 覆盖 skillhub install <slug> --namespace <ns> --dir <skills 根> --force(新版 zip 由平台下发)
③ 复核 读新版 SKILL.md frontmatter 的 version 是否 = 平台版本;gate.py check、fetch_fonts.py check 各跑一次;文件清单无异常
④ 收口 台账记一行「已升级 X → Y」;停下,提示用户重开一轮对话(新规则从新一轮生效);③ 不过 → 用 ① 的备份整目录回滚,并把失败原因如实告知

辅助命令与事实说明

python3 scripts/check_update.py                     # 常规检测
python3 scripts/check_update.py --json              # 机器可读(主流程解析用)
python3 scripts/check_update.py --selftest          # 版本比较自测
  • 为什么不用 skillhub upgrade --check-only 作为主路径:它要求包内 config.json 含 update_url,
    且该 URL 必须返回 CLI 认的 manifest 形状(version + zip_url/download_url)。本 skill 无 config.json,
    实测直接 skip: config.json not found;平台技能详情接口返回的是 latestVersion.version,不是 CLI 认的形状。
    故主路径走 check_update.py(直查平台接口),同时在包内存在合法 config.json 时并行跑一次官方命令交叉印证(见脚本 --json 输出的 official 字段)。
  • --force 是破坏性的:它 rmtree 目标目录后解压,本地未上架的改动会全部丢失。

硬约束

  • ⚠️ 每次执行 skill 都要检测一次(含增量同步、排障、只跑某一步的场合;检测本身不是打包,也不构成升版许可 —— 见 T0-d);不得以「刚才查过」「应该是新的」为由跳过
  • ⚠️ 未经用户确认,不得执行更新;未完成整目录备份,不得执行 install --force
  • ⚠️ 「本地高于平台」时只提示、不覆盖 —— 这种情况通常是本地有未上架的改动(例:本轮改动尚未发布时,本地 1.1.0 > 平台 1.0.1)
  • ⚠️ 版本号由用户指定,不得自行累加(★ 2026-10-10 用户裁定)—— SKILL.md 的 version 唯一基线是平台实测版本(check_update.py 输出的「平台 X.Y.Z」);本地 frontmatter 只是「下次要提交的号」,不是「已存在的版本」。
    真相:2026-10-10 本地记到 1.0.8,而平台实际是 1.0.4 —— 中间 4 个号从未上架,却被坑清单与规范当成既成事实引用。
    升版前先跑一次 check_update.py 对账;升不升、升到几,由用户定(坑清单 R1-34)。
    ⚠️ 打包与版本号的禁止自主动作另立一条铁律:见 T0-d。
  • ⚠️ 更新成功后不得继续闷头干活:必须停下并建议重开一轮,避免旧规则继续驱动新版本
  • ⚠️ 检测失败不得阻断也不能谎报「已是最新」——如实说「本次未能检测到更新」

铁律 T0-b · 首次运行资源自举(字体)

> 本 skill 的包内不含字体二进制 —— SkillHub 上架不允许提交字体文件(2026-10-08 提交时因 fa-*.woff2 / fa-*.ttf 被拒)。
> 包内只保留 assets/font-awesome/all.min.css(纯文本 CSS);4 个字体文件由首次运行时下载(3 必装 + 1 可选,逐文件 sha256 钉死)。

步 动作
1 执行 python3 scripts/fetch_fonts.py check
2 退出码 0 → 字体齐备,继续
3 退出码 2 → 执行 python3 scripts/fetch_fonts.py fetch(幂等;下载后逐文件 sha256 校验;失败自动重试 3 次)
4 仍失败(离线 / 被墙)→ 停下告知用户,把脚本打印的手动兜底 URL 交给用户;不得跳过、不得糊过去

硬约束

  • ⚠️ 字体没补齐,不得进入 Step 0:字体缺失时页面不报错,但走本地字体的页面图标会静默消失(@font-face 加载失败 → 字形退化为空白占位,实测 document.fonts.check() 返回 false、图标宽度由 36px 掉回 32px 空框)。而 verify_pkg.py / review_pkg.py 都不检查字体文件 —— 不主动 check 就发现不了
  • ⚠️ 不得用 CDN 顶替:页面必须走本地 assets/font-awesome/(规范B 明文禁止 CDN 图标库;review_pkg.py A6 组仍在判 FAIL 的「31 页仍走 CDN 图标库」就是这条欠账)。fetch 是把文件补到本地,不是把页面改成 CDN 引用
  • ⚠️ 不得把字体二进制加回包内:重新打包上架前必须 strip
  • ⚠️ 交付给用户的服务包应带字体:cp -R <模板> 时字体已在本地 → 产物自带,这是正常的(上架限制只针对本 skill 的上架提交包,不针对你交付给客户的服务包)。但若你的交付通道也有同类限制,需另行处理并告知用户

两态切换(工作态 ↔ 上架态)

python3 scripts/fetch_fonts.py strip    # 上架态:删除字体二进制(提交前必做)
python3 scripts/fetch_fonts.py fetch    # 工作态:复原字体(提审后立刻执行,否则页面图标全废)

铁律 T0-d · 打包与版本号 · 禁止自主动作(★ 2026-10-11 用户立规)

> 用户原话:「在我没有告诉你打包封版的情况下,不要打包,不要自行定义版本号。」

项 规定
打包 未获用户明确指示前,一律不得打包 —— 覆盖 ① 交付给用户的服务包 zip;② 上架 SkillHub 的提交包(skillhub publish / 上传 zip / 生成提交目录)。「改完了」≠「可以打包了」;只有用户说出「打包 / 封版 / 提交 / 上架」之类明确指示时才执行
版本号 不得自行定义、不得自行累加。SKILL.md frontmatter 的 version(及包内任何版本号字面量 / README 版本行)只在用户明确给出数字时才改;用户未给出时保持原值不动,交付小结里提请用户定版(「本次改动已完成,请指定版本号」),不得写「已升到 X.Y.Z」
覆盖范围 本条款覆盖 package-new 与 病种注入-接口版 两个 skill,以及任何交付物(服务包 zip、上架包、变更说明的版本行…)

硬约束

  • ⚠️ 不得以「顺手」为由打包:改完规则 / 改完模板 / 跑完校验,都不构成打包理由
  • ⚠️ 不得以「版本号该升了」为由改 version:check_update.py 输出的平台版本只是对账基线(R1-34),不是升版许可
  • ⚠️ 不打包如何交付:原地交付(给出文件路径 + 改动小结);用户要 zip 时会明说
  • ⚠️ T0-c 的检测与升级链照常保留(2026-10-11 用户确认)—— 「检测 → 提示 → 用户同意 → 整目录备份 → install --force」不受本条款影响;被禁的是 AI 主动发起的打包与升版

铁律 T1 · 非明确不改

病种需求未对该页面的展示逻辑作出明确调整时:

  • ❌ 不得修改模板的布局与排版格式(网格列数、分区顺序、间距体系、对齐方式、卡片结构)
  • ❌ 不得增加任何未明确的元素(图标、字段、按钮、区块、标签、文案、颜色、层级)
  • ❌ 不得删除 / 合并 / 重排既有元素,即使看起来冗余
  • ❌ 不得做"既然改到这里就顺便…"的顺带优化

只改需求字面明确指向的那一处。需求没提到 = 不动。要补位 → 先问;不确定 → 先问。

T1-b · 分支 B 例外条款(2026-10-03 用户裁定)

当且仅当走「分支 B」(源包 = 病种专属成品包)时,T1 的判定基准如下调整:

项 规定
什么算"需求明确指向" 「清除前序病种语义」本身就是需求——用户要的是"把这个病的包改成另一个病",那么清掉前序病种的标题 / 模块名 / 演示数据 / UI 文案 / 文件头注释 / 时间轴口径 / 字典键 / 专属资产群,每一处改动都能对应到这句话,不算越界
仍然禁止(不变) ① 不得改布局与排版格式(网格列数 / 分区顺序 / 间距体系 / 对齐方式 / 卡片结构);② 不得新增或删除需求未提及的元素(图标 / 字段 / 按钮 / 区块 / 标签 / 颜色 / 层级);③ 不得做"既然改到这里就顺便…"的顺带优化;④ 不得重排既有元素
需单独授权的边界 涉及代码注释、数据字典键、CSS 类名 / DOM id、后端标识(model_version / model_code) 的改动,逐条单列并单独提请用户确认,不得随解绑一并改掉(见 规范C §9)
留痕要求 例外范围内的全部改动必须逐条登记进 本次注入-更新范围确认单.md,供用户复核;未登记的改动按越界处理

> 该例外只对分支 B 生效。分支 A 一律回到 T1 原文(非明确不改)。

铁律 T2 · 不读记忆、不写记忆

项 规定
输入来源(仅此三项 + 一项例外) ① 本 skill 的 SKILL.md 与 references;② 服务包页面源码;③ 当次对话中的需求与参数<br>例外(唯一):T0 门禁的授权状态(由 scripts/gate.py 读写 ~/.workbuddy/.dzq-unlock.json)—— 该文件只含授权状态,不含任何业务信息,且不属于"记忆";除它之外不得读写任何 skill 之外的持久化文件
禁止读取 项目记忆、云端用户档案、历史对话检索、其他项目经验 —— 不得据此"脑补"需求
禁止写入 任何记忆:workspace 日志、MEMORY.md、跨项目记忆

理由:病种页面必须由当次需求驱动,避免历史偏好污染输出;保证同一需求多次生成结果一致。

T3 · 交付物 ≠ 记忆

T2 禁止写记忆,但必须产出交付文件给用户(存用户指定目录,属交付物、非记忆)。

交付物分两层,缺任一层都不算「一套完整版本」(2026-10-08 用户硬要求):

层 内容 位置 依据 机器判定
甲 · 成套产物 ① 病种服务包页面(HTML + assets/)<br>② 产品功能清单/ 文档(按需产出:仅新增页与结构级大改页 —— 非每页一份,页数 ≠ 文档数属正常)<br>③ 更新说明-YYYYMMDD.md(唯一定位:说明本次新生成了哪些 md 文档)<br>④ scale/ 量表作答页(用户提交量表文档时产出;不进编号体系、不出单独文档,但必须在 ③ 里登记——规范E §八) &lt;包目录&gt;/ 、 &lt;包目录&gt;/产品功能清单/ 与 &lt;包目录&gt;/scale/ 规范D + 规范E review_pkg.py A12 组 + check_docs.py(不含 scale/)+ verify_pkg.py(已扩围扫 scale/)
乙 · 包外产物(唯一一份) 本次注入-更新范围确认单.md —— 包外只出这一份 用户指定目录 本 SKILL.md 7.3.5 人工勾

> ⚠️ 甲层是成套交付的硬要求:历史上只有乙层("这次改了什么"),没有一份描述页面本身。甲层由 Step 6.7 产出、Step 7 的 A12 组把关,不通过不得交付。
> ⚠️ 2026-10-10 起甲层的口径:不是「每页都要有文档」 —— 文档是增量说明书(新增页 / 结构级大改页),不是页面全集目录。包内文档数 < 页面数是正常状态。

乙层 = 唯一一份:本次注入-更新范围确认单.md(★ 2026-10-09 用户裁定)

> 用户原话:「输出的内容只有更新范围清单,其他的包外的 md 文档都不要。包内的保持不变。」
> 因此包外不再产出任何其他文件 —— 原先的台账 / 改动摘要 / 校验报告 / 缺陷登记 / 复核配置 / 源包判定单 / 资产清单 / 术语三色表 / 残留矩阵一律取消,内容按下表归位。

原先的包外文件 现在归到哪
本次注入-更新范围确认单.md 保留,且是唯一包外产物;固定 8 节(见下)
本次注入-进度台账.md 取消 —— 状态在对话内保持;每步确认结论写进确认单对应节
本次注入-改动摘要.md 取消 —— 内容并入包内《更新说明》(甲层要求「页面 ↔ 文档对照表 + 本次文档产出小结」)
本次注入-校验报告.md 取消 —— 三个脚本的原始输出在对话回复中呈现(贴出来即可),不落文件
本次注入-缺陷登记.md 取消 —— 根因 / 防复发直接回写 references/坑清单(skill 自身资产),结论在对话里给出
本次注入-复核配置.json 取消(不作为交付物) —— 改为临时工作文件(写系统临时目录,复核跑完即删),不得落在用户输出目录
本次注入-源包判定单.md 取消 —— 判定结论写入确认单 §1
本次注入-前序病种资产清单.md 取消(分支 B)—— 写入确认单 §8.1
本次注入-术语三色表.md 取消(分支 B)—— 写入确认单 §8.2(该表仍须作为 scan_residue.py --terms 的临时入参)
本次注入-残留矩阵.md 取消(分支 B)—— 写入确认单 §8.3(★ 分支 B 的"逐页清单")

本次注入-更新范围确认单.md 固定 8 节(Step B4 / Step 5 收口时一次成稿):

节 内容 产出步
§1 源包类型判定(判据原始输出 + 判定结果 + 分支选择) Step 0.0
§2 病种特点分析与三大上报场景核对 Step 2
§3 病种专项上报内容建议清单(每条附依据与推荐级别) Step 3
§4 两端 + 管理端功能增减矩阵(保留 / 改造 / 停用 / 新增) Step 4.3–4.6
§5 ★ 更新范围逐条清单(核心:档位 + 落地方式 + 备份与回滚方案 + 例外登记 + 「已知接受项」) Step 5
§6 量表数量 + 病种化改写后的量表清单(★ 2026-10-11 起不再有「方案」与「文档解析」两个子项;scale/ 页仅在用户主动提交量表文档时产出并登记) Step 4.7
§7 文档产出范围(本次新增页清单 / 结构级大改页清单 +《更新说明》)—— 未产出文档的页面不必登记 Step 6.7
§8 仅分支 B:8.1 前序病种资产清单 · 8.2 术语三色表 · 8.3 残留矩阵 Step B1–B3

> ⚠️ §2–§4 的分析过程在对话里当场呈现、当场确认,确认后的结论进确认单 —— 目的是不留过程文件,但不丢证据。
> ⚠️ 确认单只增节、不拆文件:分支 B 出 §1–§8;分支 A 出 §1–§7 即止。
> ⚠️ 包外目录里除了这一份,出现任何其他文件都算违反本 skill。

> ⚠️ 回写边界:复核结束后允许向本 skill 自身回写(references/坑清单-已知缺陷与防复发.md、scripts/),这属于工具维护、不是写记忆。
> 但若要改 references/规范A / 规范B / 规范D / 规范E(改规范即改 skill 规则),必须先取得用户确认 —— 依据是用户级刚性约束「对 skill 内容 / 流程的任何修改必须经用户交互确认」,与"是否存在外部正本"无关(本 skill references 全部是本地资产,无外部正本,见文末 references 索引)。


覆盖范围与基线

分支 A(通用型源包)

层级 覆盖 依据
基线页数级 46 页 = B01–B11、B13–B15(14) + D01–D04、D08、D11–D13、D15、D19、D21–D31(21) + F01–F11(11),不含 A01(已删除)<br>空号名单:B12;D05–D07、D09、D10、D14、D16–D18、D20(★ 2026-10-11 随访模块下线,D09/D16/D18 并入空号名单,编号留空不复用) assets/templates/通用型全病程服务包-V3.3/ + references/模板基线-通用型46页.md
逐页清单级 B01–B11、B13–B15 + D01–D04、D08、D11–D13、D15、D19、D21–D31 + F01–F11(规范A 中的 A01 段、D09/D16/D18 段均已作废) references/规范A(960 行 / 641 行表格 / 471 项,含第 2.5 步 F 段)

> ⚠️ 若包内页数与上表不符(用户已增删过页面),以实际文件清单为准,并在 Step 0 与用户核对。
> ⚠️ 源包内出现 A01* 文件 → 停下问用户(与「A01 已删除」的既定基线冲突)。
> ⚠️ F 端特点:11 页全部走 CDN 图标库(须改本地,见 24-20);每页均有 XX医院 绑定(1–32 处);F06 含真实姓名「黄国栋」;F03 含糖尿病残留 hba1cValues;F11 含糖尿病量表 id。

分支 B(病种专属源包)

层级 覆盖 依据
无固定页数 以源包实际文件清单为准;每页在 Step B4 得到一条处置 references/规范C(源包解绑规范)

> ⚠️ 规范A 在分支 B 不适用 —— 其 471 项绑死在通用型 46 页编号体系上,与专属包(index.html / patient/* / scale/* / 英文驼峰命名等)不是一套。
> 分支 B 的"逐页清单"由 Step B3 现场扫出的残留矩阵承担(页 × 八类载体 × 命中)—— 结论写进 本次注入-更新范围确认单.md §8.3(不再单独出文件)。
> ⚠️ 分支 B 的产物保留源包原有页数与结构,不追求对齐 46 页体系(2026-10-03 用户裁定)。


占位符速查表(分支 A 专用)

> 分支 B 的源包里没有占位符——全是实体值。分支 B 的"替换清单"来自 Step B2 的术语三色表与 Step B3 的残留矩阵(两者均落在确认单 §8,不单独出文件)。

占位符 含义 模板现值
⟨医院⟩ 中心医院名 XX医院
⟨科室⟩ 科室名 XX科
⟨病区⟩ 住院病区名 XX科病区
⟨病种名⟩ 病种中文名 疾病名称
⟨主诊⟩ 主诊 / 主刀医生 医生A
⟨二诊⟩ 分管 / 随访医生 医生B
⟨主管⟩ 扫码 / 主管医生 医生C、医生D
⟨医生组⟩ 医生组名 医生A组
⟨主色⟩ 主题色 #0072E5
⟨术式1/2/3⟩ 术式名 术式A / 术式B / 术式C / 术式D
⟨症状通道1/2/3⟩ 症状上报通道 出血 / 发热 / 其他症状
⟨量表N⟩ 量表名(现库 12 张) 见 B07
⟨药品N⟩ 药品名 见 B06
⟨检查N⟩ 检验 / 检查项目 见 B04
⟨课题N⟩ 科研课题名 见 D19
⟨病例数N⟩ 各标签人数 见 D08

流程 Step 0–7(逐步执行,每步须用户确认后才进入下一步)

> 🔒 执行前先过 T0 门禁:python3 scripts/gate.py check(退出码 0 才继续;2 则向用户索取口令并 unlock)。
> 🔤 再过 T0-b 资源自举:python3 scripts/fetch_fonts.py check(退出码 0 才继续;2 则 fetch)—— 字体缺失时页面图标会静默全废,而所有校验脚本都查不出来。
> 未通过以上两项,不得读 references/、不得跑任何业务脚本、不得进入 Step 0。

Step 0 · 前置:源包类型判定(入口闸门)+ 确认基线与装配规范

0.0 ★ 源包类型判定闸门(强制,判错则全错)

python3 scripts/detect_source_pkg.py &lt;源包目录&gt;

三条判据(原始输出必须贴进台账与判定单):

# 判据 探什么 通用型特征 病种专属特征
1 占位符体系 疾病名称 / XX医院 / XX科 / XX病区 / 医生A–医生D / 医生A组 / 术式A–术式D ≥ 5 页命中,且 疾病名称 ≥ 3 次 0 命中
2 具体实体值(启发式) 非占位的具体机构名(…医院)、具体医生姓名(X主任医师 等) 无(或极少) ≥ 1 类命中,且占位符命中页数 ≤ 2
3 编号体系(佐证) 文件名形态 符合 B01–B11、B13–B15 + D01–D31 + F01–F11(无 A01,B12 为空号) 不符合

> ⚠️ 不要用「词频/词表」判源包类型。 初版曾用"高频专有短语 ≥3 条"作判据 2,实测把通用型模板也判成病种专属 ——
> 因为无监督提取出的 n-gram 全是滑动窗口碎片,且通用型模板本身就残留着历史底版的量表名。
> 判据 2 因此改为「具体实体值」(通用型写占位符、专属包写实体值,这是两者真正的分界),
> 高频专有短语降级为参考信息(打印出来供人工辨别,不参与判定)。
> 另:若源包目录里嵌套了另一个独立包(如 通用型全病程服务包/),工具会自动分离并提示,判定只针对主包。

判定 → 分支

判定结果 条件 后续
通用型 判据 1 成立 ∧ 判据 2 不成立 → 分支 A:继续 0.1–0.4,按 Step 1–7 + 规范A 执行
病种专属 判据 1 不成立 ∧ 判据 2 成立 → 分支 B:先走 Step B0–B4(见下节),再回到 Step 0.3 建台账,然后接 Step 1–7 + 规范C
混合(改造到一半) 判据 1、2 同时成立 停下问用户:以哪一端为准;未替换干净的占位符与残留病种词分别列入 Step B1 资产清单
不可判定 1、2 均不成立 停下问用户,不得猜测

必问三项(不可只靠机器判定):

  1. 这是什么包?(通用型模板 / 某个具体病种的成品包)
  2. 若是成品包:前序病种是什么?目标病种是什么?(两者都写进台账)
  3. 前序病种名一律以源码取证为准——不得凭印象、不得读项目记忆(铁律 T2)

产出:判定结论写入 本次注入-更新范围确认单.md §1(判据原始输出 + 判定结果 + 分支选择 + 用户确认)。


0.1 装配规范(按分支取用)

文件 分支 A 分支 B 用途
assets/templates/通用型全病程服务包-V3.3/ ✅ 基线 / 默认源包 ❌ 不适用 差异盘点基准;用户未给源包时作注入起点(只读,不可就地改)
references/模板基线-通用型46页.md ✅ 必读 ❌ 不适用 46 页清单 + SHA256 + 差异盘点判定规则 + 模板维护规则
references/规范A-病种注入执行清单-V2.md ✅ 必读 ❌ 不适用(编号体系不匹配) 46 页口径的逐页注入项(A01 段已作废)
references/规范B-新建页面规范-V2-医患两端.md ✅ 必读 ✅ 必读 外壳 / 组件 / 闭环 / 定制化 / 卡片格式 / 硬规则
references/规范C-源包解绑规范.md ❌ 不适用 ✅ 必读 分支 B 的逐页依据(解绑全流程)
references/坑清单-已知缺陷与防复发.md ✅ ✅ Step 7.5 根因库

再读取目标源包目录,核对实际页面清单。

> ⚠️ 源包从哪来必须问用户:① 用户自带目录 / zip;② 用 skill 内置模板(assets/templates/…)。
> 不得默认取模板 —— 用户手上可能是已改过、已填过真实数据的版本(误判会覆盖既有成果)。

0.2 确认基线状态(必问)

问题 影响
服务包目录路径?(支持目录或 zip) 执行目标
源包是你自带的,还是用 skill 内置的通用型模板? 决定 Step 6.1 走「基线参照」还是「复制模板」
当前包是「未改动的初版模板」还是「已改造过 / 已填过真实数据的版本」? 决定替换基准与 Step 5 的风险档位
若是已改造版本:改造过哪些页?(可只答"不清楚",则先跑一次差异盘点) 防止覆盖既有成果

基线核对的现成手段(分支 A)

TPL=&quot;$HOME/.workbuddy/skills/病种注入器/assets/templates/通用型全病程服务包-V3.3&quot;
diff -rq &quot;$TPL&quot; &lt;用户源包目录&gt; 2&gt;&amp;1 | grep -v &#x27;\.DS_Store&#x27;   # 空 = 与内置模板逐文件一致
结果 结论 处置
无输出 源包 = 未改动的初版模板 可直接进入 Step 1
少量页不同 用户已改过部分页 停下报告,逐页确认是否覆盖
页数不符 / 大面积不同 源包不是本模板直系(可能已深度改造,或页数体系不同) 以源包实际文件为准,与用户重新核对基线
出现 A01* 文件 与「已删除 A01」的既定基线冲突 停下问用户,不得自行处置

详见 references/模板基线-通用型46页.md §3。

0.3 建立唯一包外产物:更新范围确认单

在用户指定目录创建 本次注入-更新范围确认单.md(包外只此一份,见 T3),先把 §1(源包判定)填上。Step 0–7(分支 B 另加 Step B0–B4)的每步确认结论逐节追加进去;状态在对话内保持,不再另立台账文件。包外目录里除这一份外不得出现任何其他文件。

0.4 前置声明

向用户声明:本次执行不读记忆、不写记忆;非明确不改(分支 B 另适用 T1-b 例外条款);本次走分支 A / 分支 B。

输出:确认单已建,§1 已填(源包判定 + 页面基线确认:页数 / 编号 / 文件名 / 基线状态)。


★ 分支 B 前置阶段 · Step B0–B4(逐页依据 = 规范C-源包解绑规范.md)

> 仅当 Step 0.0 判定为「病种专属」时执行。
> 目标:把前序病种语义从整包里解绑干净,再注入目标病种。
> 顺序硬约束:B1–B4 全部完成并经用户确认后,才允许进入 Step 1。

步 名称 做什么 产出
B0 源包类型判定闸门 即 Step 0.0(已在本步之前完成) 判定单
B1 前序病种资产清点(六类) 专属页面 / 专属内容资产群 / 专属术语 / 专属时间轴口径 / 专属字段与字典键 / 专属标识与注释 确认单 §8.1
B2 术语三色分类(动态提取) 从源包提取候选词 → 逐词判定 🟢绿(可全局替换)/ 🟡黄(禁止全局替换,逐处判定)/ 🔴红(禁入替换清单),每词写理由 确认单 §8.2(同时作为 scan_residue.py --terms 的临时入参)
B3 八类残留载体全包扫描 文件头注释 / 标题模块名 / JS 演示数据 / UI 文案档位 / 时间轴口径 / 字典映射键 / 内容资产群 / 机构团队文案 确认单 §8.3 ★ 分支 B 的"逐页清单"
B4 逐页处置决策 + 用户确认 每页给「整篇重写 / 局部改写 / 删除页 / 保留 / 镜像同步」;代码注释、字典键、标识符单列待确认 确认单 §5 + §8

分支 B 的四条硬约束(对应审计四大教训)

  1. 🟡 黄词的处置必须先于、或至少与 🟢 绿词替换同页成对完成。
    严禁"先全局替换病种名,周边语义以后再补"——审计实测产出「慢性胃炎术后需要扩肛」这类语义荒谬组合,且因旧值已 0 命中,现有 B1 组查不出来(新增 A9-3 专查,见 §7.0)。
  2. 删除页必须同步:文件 / 全部入口链接 / 页面索引(+ 若包内另有页数计数器则一并同步)。审计里出现过"入口清了、列表展示名还在"。
  3. 镜像对必须同批处理:识别出的 B 端 ↔ D 端镜像页不得只改一端——审计中 B07 / B45 患者端已重写而 D18 / D22 等医生端整批落下(新增 A9-4 专查)。
  4. 内容资产群整篇重写,不做字符串替换:入组问卷、科普文章库、病历模板、量表题库、标签库、科研队列、预警类型表、随访模板库——字符串替换会产出自相矛盾的题项。

执行顺序(Step 1–7 内的差异)

原步骤 分支 B 中的差异
Step 1–3 完全复用
Step 4 4.1 / 4.2 两道闸门照走;逐页处置依据改用 B4 逐页处置清单(不用规范A)
Step 5 确认单增加三项:时间轴目标口径(三选一,全包唯一)、🟡黄词逐处处置、删除页四处同步清单
Step 6 以"页"为单位,每页先解绑、再注入,同页成对做;禁止"先全包解绑、再全包注入"两遍走
Step 7 原四层复核 + 规范C §10 解绑验收组 C-1~C-9(机器判定 = review_pkg.py 的 A9 组)

Step 1 · 确认机构与人员

必问三项(点选 + 自由输入,不要一次问太多):

项 占位符 说明
中心医院名称 ⟨医院⟩ 模板占位 XX医院
科室名称 ⟨科室⟩ 模板占位 XX科;含病区写法 XX科病区
医生 ⟨主诊⟩ ⟨二诊⟩ ⟨主管⟩ ⟨医生组⟩ 模板占位 医生A / 医生B / 医生C / 医生A组

医生角色定义(写入前与用户对齐)

角色 含义 出现页
⟨主诊⟩ 主诊 / 主刀医师 多数页(D03/D25/D26 等)
⟨二诊⟩ 分管 / 随访医生 D03/D25/D29/D30
⟨主管⟩ 扫码 / 主管医生 D03 患者卡 .scan
⟨医生组⟩ 医生组名(默认 &lt;主诊医生名&gt;组) 头部 hm-role

医生名未确定时的处理(必做)

  1. 联网检索:「&lt;医院名&gt; &lt;科室名&gt; 医生」「&lt;医院名&gt; &lt;科室名&gt; 专家团队」,优先官网科室页
  2. 来源优先级(从严)
    | 可用 | 不可用 |
    |---|---|
    | 医院官网科室/专家页 | 百科词条 |
    | 卫健委 / 官方挂号平台公示 | 自媒体、问答、论坛 |
    | 权威媒体报道 | 任何推测、拼接、同名猜测 |
  3. 整理候选:姓名 + 职称/职务 + 来源链接,逐条标注出处
  4. 点选让用户选定;用户选"仍不确定" → 保留 医生A/医生B 占位(合规做法,不得臆造)

必问:是否将真实医生姓名写入页面

演示 / 对外展示场景可能不宜用真名。先问,不默认写入:

选项 结果
写真实姓名 按选定值替换 医生A/B/C
保留占位 维持 医生A/B/C,仅替换医院与科室

硬约束

  • 禁止编造医生姓名;检索不到就如实说明并保留占位
  • 检索结果必须标注来源,不得把推测当事实
  • 医生组名默认 &lt;主诊医生名&gt;组;若医院无此建制,与用户确认命名

输出:机构人员映射表(占位符 → 实际值)+ 实名写入决策,交用户确认。


Step 2 · 病种特点分析 + 三大上报场景核对

先联网检索该病种的「诊疗规范 / 随访指南 / 术后或康复管理常规」,作为建议依据。

再逐项核对三大场景(每一项给出「建议值 + 理由 + 依据」,用点选让用户确认或修改):

① 症状上报(模板 B03-症状上报-患者端.html)

配置项 模板现值 需确认
上报通道(.rs-tab) 出血上报 / 发热情况上报 / 其他症状上报 通道数、名称、图标
分级(.grade-list &gt; .grade-opt) 0–4 级 级数、每级描述
阈值档位(.alert-green/orange/red) 绿/橙/红 三档 各级阈值
其他症状(OTHER_SYMPTOMS) 每项 4 档描述 症状项与档位描述
时间口径(.tp-sub) 入组第 N 天 术后 / 入组 / 疗程第 N 天(三选一,全包统一)

② 健康日记(模板 B05-健康日记-患者端.html)

配置项 模板现值 需确认
打卡项 血压 / 运动 / 睡眠 / 体重(4 项) 增减项
单位与录入方式 收缩压/舒张压 + mmHg 单位、指标
数值正常范围 90–139 / 60–89 按病种定
综合记录区块 运动分类 / 时长 / 睡眠 / 体重 区块与选项 chips

③ 用药打卡(模板 B06-用药打卡-患者端.html)

配置项 模板现值 需确认
药品类型分组(MED_GROUPS) 药膏 / 栓剂 口服 / 外用 / 吸入 / 注射 / 其他
粒度 周(.week-picker) 不询问、不得更改 —— 全病种一律按周打卡(2026-10-07 用户裁定)
频率选项(FREQ_OPTS) 每日 / 每周 2-3 次 / 每周 1 次 / 不使用 按病种
用药管理(长期清单) B06 第 ④ 段独立 .section-card;D12 .act-bar 下方 #medMgr 药库随 MED_GROUPS / MG_LIB 一并替换;段位与共键 medlist:&lt;患者&gt; 不得改(规范B §5.1「用药管理」)

粒度规则(硬性 · 不询问):用药打卡一律按周,控件固定 .week-picker,全病种唯一口径。

  • Step 2 不询问粒度,Step 5 确认单不列粒度项 —— 不得把它做成待选项
  • 禁止改为按日(.time-picker / .day-picker)或按月(.month-picker)
  • 全包不得出现 .day-picker / .month-picker
  • 规则详见 规范B §5.1;机器校验 review_pkg.py A11 组(2026-10-07 新增)

该病种不需要某场景时

不得在本步直接删页面。→ 记入 Step 4 的「停用」建议(需用户确认,并检查引用与索引)。

硬约束:三场景的通道 → 分级 → 阈值必须前后同源,且与医生端承接页(D01 #alarmWrap / D11)一致。改一端必同步另一端。

输出:三大场景配置表(建议值 + 用户确认值),交用户确认。


Step 3 · 提出病种专项上报内容建议

基于 Step 2 的病种特点,提出该病种特有的(模板里没有、但临床上需要的)上报项。

建议项字段

字段 说明
上报项名称 如「疼痛评分」「血糖监测」「化疗后反应」
归属 症状上报 / 健康日记 / 用药打卡 / 某个现有页面内的新增功能项(⚠️ 不得填「新增独立上报页」 —— 见硬约束 4)
采集内容 具体字段与选项
采集频次 每日 / 每次发生 / 随访节点
推荐级别 推荐 / 可选 / 不建议(含原因)
依据 指南或诊疗常规出处

条数与排序:建议 3–8 条,按推荐级别降序,避免一次给出过量项。

硬约束(因是通用型模版,建议必须严谨可靠)

  1. 每条建议必须有病种依据,不得为凑数而建议
  2. 明确标注推荐级别;不建议的项要写清原因(与现有通道重复 / 临床价值低 / 增加患者负担)
  3. 不得建议上线未经临床验证的自评量表
  4. ★ 2026-10-11 用户立规:不得向用户建议新增功能页面(页)。
    建议项的「归属」只能落在现有页面(症状上报 / 健康日记 / 用药打卡 / 其他已建上报页)——
    不得把「新增一个独立上报页 / 独立功能页」作为建议项提出,任何推荐级别(含「可选」「不建议」)都不行。
    - 边界(只禁"新增独立页"):同一页内新增功能按钮 / 功能项 仍可建议
    (例:「在 B03 增加一个『疼痛评分』通道」✅;「新增一个『疼痛评分上报页』」❌)。
    - 用户主动提出时不受限:用户自己说要新增页面 → 照常走 Step 4.2 闸门
    (需求描述 → 功能需求卡 → 回读确认),并同轮给出中心医护端三段承接方案。
    - 页面清单的增减建议(4.6 硬约束 2)、功能按钮 / 功能项的新增建议(闸门 ②)不受本条影响。

输出:专项上报建议清单,用户逐项勾选。


Step 4 · 两端功能列表确认 + 新增功能征询 + 量表数量 + 增减建议

> ⚠️ 本步含三道强制闸门(2026-10-08 用户硬要求)· 分支 A / B 通用:
> 4.1 功能列表确认闸门 → 4.2 新增功能征询与需求二次确认闸门 → 逐页处置建议(4.3–4.6)→ 4.7 量表数量确认(★ 2026-10-11 收窄:不问方案、只问数量)。
> 三道闸门未取得用户明确确认,不得进入下一步、不得动任何页面。

4.1 ★ 两端功能列表确认(强制闸门)

向用户逐条列出两端的功能清单,交用户确认。未确认不得进入 4.2。

端 清单粒度 列出内容
患者端(B 系列) 逐页 页面号 + 页名 + 一句话功能 + 本次处置(保留 / 改造 / 停用)
中心医护端(D 系列) 逐页 同上
  • 清单以当次源包的实际文件清单为准(分支 A 通常 B ×14 + D ×21;分支 B 以实际页数为准)
  • 用户可逐条或批量确认;用户提出异议的条目就地修订后重新列出,不得只改一处不回报
  • 管理端(F 系列)清单在 4.6 单独列出与确认

产出:两端功能清单确认结果 → 写入 本次注入-更新范围确认单.md。

4.2 ★ 新增功能征询与需求二次确认(强制闸门)

步 动作 判据 / 硬约束
4.2.1 征询 明确询问用户:「是否需要增加新的功能按钮 / 功能项?」<br>答「否」→ 记录「本次无新增功能」,直接进入 4.3 不得替用户默认「不需要」;不得因模板够用就不问
4.2.2 需求描述 请用户逐条描述每个新增功能的详细需求;下表要素缺失时逐项追问,不得自行补位 ⚠️ 用户描述含糊时必须追问到能写进需求卡,不得"先做着看"
4.2.3 梳理 把用户的口语描述整理成结构化「功能需求卡」(见下表) 只整理,不发明;用户没说的不写进卡
4.2.4 ★ 回读确认 把「功能需求卡」原样回读给用户,明确提问:「以上理解是否正确?」<br>答「正确」→ 进 4.2.5;指出偏差 → 回到 4.2.2 重新梳理并再次回读 ⚠️ 未取得「正确」这一明确答复前,不得动任何页面
4.2.5 执行 严格按 references/规范B-新建页面规范-V2-医患两端.md 执行,逐项过其自检清单(含「0. 铁律闸门」7 项;含 §十一 E / H 的「历史卡片行序 + 时间行文案」强制项,对照 §3.3.2) 同 Step 6.3

4.2.2 需求描述必备要素(缺一项追问一项)

要素 追问示例
功能名称 这个功能叫什么?
归属端 患者端 / 中心医护端 / 管理端?
入口位置 从哪里进(功能宫格 / 列表按钮 / 页内按钮 / 卡片)?
解决的问题 谁在什么场景下用它?不做的后果是什么?
页面要素 要展示什么、要填什么、有哪些状态?
数据来源 患者填 / 医生填 / 系统派生 / 接口?
与现有功能的关系 复用既有页面,还是新增独立页面?

4.2.3 功能需求卡(逐条一份)

项 内容
功能名称 / 页面编号(新增页给新编号)
归属端与入口位置
页面骨架(分区顺序)
字段与状态机
数据键(含跨页共键)
中心医护端承接 患者端上报页须配套三段承接:D01 功能图标 + D01 #alarmWrap 预警展示 + D04 功能图标单患者入口
是否新增独立页面 是 → 走 4.2.5(规范B);否 → 归入 4.3–4.6 的「改造」处置

4.2 硬约束

  • ⚠️ 新增必须成对:患者端上报页 → 中心医护端必须配套三段承接,不得单侧断档
  • ⚠️ 编号规则(★ 2026-10-11 用户裁定 · 替换原「沿用包内既有编号体系」口径):
    新增页一律不进 B / D / F 系列,统一命名为 X{NN}-{患者端|医生端}-{功能名称}.html ——
    X 大写;每端各自从 01 起(X01-患者端-疼痛评分上报.html / X01-医生端-疼痛评分处理.html);
    模板原有页仍用 B/D/F;对应的《产品功能清单》md 同规则命名(X01-患者端-疼痛评分上报-A.md),
    不得新增 B/D/F 系列文档。原规则「新增页沿用包内既有编号体系」作废(规范B §9.1 / 坑清单 R3-30)。
    ⚠️ 「空号不补位、不重排」对模板原有页仍然有效 —— 该条只管原有页的删除与留空,与新增页走 X 体系并行不冲突。
  • ⚠️ 需求未经二次确认的,一律不得进入执行
  • ⚠️ 不得为凑数而建议新增:新增与否由用户裁定,AI 只负责提问、梳理与回读

产出:功能需求卡 + 用户「正确」答复记录 → 并入 本次注入-更新范围确认单.md。

4.3 患者端(B 系列 14 页)★ 4.1 确认后的逐页处置依据

逐页给出处置建议:

处置 含义
保留 通用功能,与病种无关,不动
改造 保留结构,替换内容(按规范A 清单执行)
停用 该病种不需要,从入口摘除(页面文件是否删除由用户定)
新增 该病种需要的新功能(须先过 4.2 闸门,再走 4.2.5 / Step 6.3 新建页面流程)

B01 主页 / B02 我的 / B03 症状上报 / B04 我的档案(已无「患者基本信息」卡)/ B05 健康日记 / B06 用药打卡 / B07 我的量表 / B08 日程管理 / B09 日程管理-日历 / B10 健康宣教 / B11 上传资料 / B13 系统通知 / B14 健康报告 / B15 健康报告详情

> B04 我的档案 · 已无「患者基本信息」卡、D26 资料汇总同(2026-10-07 用户裁定):两页 .patient-card 整块(12 个 .pi-item)与其 9 条 CSS 已删除,.content 内首个元素即「模块 Tab」+ .tab-scroll,4 个 tab 与全部 panel 保留。规范A 原注入项 4-15 / 19-6(患者卡 12 项字段)已作废。
> 同两页三个 tab 已改「平铺 + 时间降序 + 来源标签」(2026-10-07 第二轮裁定):「就诊记录 / 院内化验 / 外院化验 / 本院检查 / 外院检查」五个分组外壳与 #visitCnt 计数全部移除;来源标签统一 .src-tag 四类(来源 院内/院外 + 渠道 his获取/患者上传),映射 REC_SRC、渲染 srcTags()。规则见 规范B §6.4、注入项见 规范A 4-16/4-17/19-9。
> 检查报告卡已并入化验卡 .lab-card(2026-10-07 用户裁定,杜绝第二套卡片样式):renderExam() 改用 .lab-card + .lab-crow1(检查名称 · 日期 · 来源标签 · [重点] · 箭头)+ .lab-crow2(检查科室)+ .lab-body,展开区小标题/正文用 .lab-sec/.lab-txt,重点项用 .lab-badge 胶囊;.rep-* 17 条 CSS 与 srcIcon() 全部删除。化验卡与检查卡的外观与行结构必须逐项一致。⚠️ D28 的 .rep-acts/.rep-btn/.rep-tip 属健康报告操作区,与本卡无关。
> B10 健康宣教 · 已无 tab、无横幅(2026-10-07 用户裁定):原两级 tab(「宣教打卡 / 科普小知识」)与顶部科普横幅(「疾病管理小知识」+ 正文)整体移除,.content 内只剩宣教打卡列表;标题固定为「健康宣教」。
> 页面内 PUSH_NODES / ARTICLES / FROM_MAP 的注入项照旧(规范A 10-1 ~ 10-4、10-6),原 10-5(科普区 4 类)已作废。
> 标准数值类上报项一律「拖动滑条 + 点选快捷值」(2026-10-07 用户裁定):血压 / 血糖 / 体温 / 体重 / 心率 / 血氧 / 疼痛评分等定量指标,参照 B03 发热上报的「当前体温」,用 .trk-* 滑条 + .qk 快捷值(结构)与 mkNum() 工厂(实现)承载;禁止用 &lt;input type=&quot;number&quot;&gt; / .bp-input / .weight-input 文本框。分级配色只用语义四色(绿 #0E9E56 / 黄 #B8890B / 橙 #E67E22 / 红 #D0021B),色带按阈值百分比分段(不是等分)。B05 健康日记的血压(收缩压 / 舒张压各一条滑条)与体重已在同轮完成改造。规则见 规范B §3.2.1(+ §5.3),注入项见 规范A 3-12 / 5-3 / 5-4 / 5-7,收尾核验 规范A 25-24 / 25-25。
> B02 我的 · 诊疗信息卡随病种类型切换(2026-10-07 用户裁定):由 PACKAGES[].kind 决定卡面 —— 手术类(&#x27;surgery&#x27;)= 诊断名称 / 手术名称 / 手术日期(3 行),非手术类(&#x27;diag&#x27;,高血压 / 糖尿病 / 康复 / 儿童视力发育等)= 诊断名称 / 诊断日期(2 行);首行统一叫「诊断名称」。卡面、修改表单字段、③ 确认弹层文案三处同时切换(medKind() / dateLbl() / recDate() / recFromHis() 派生)。
> 卡片右侧操作区固定两枚按钮:同步医院数据(前)+ 修改 / 去完善(后)。同步走接口取该患者诊疗数据并直接覆盖本地记录(不走清空确认);成功后 toast「已从医院系统同步到诊疗数据」。原型接口由 mockFetchMed() 模拟,接真实接口只替换该函数。
> 规则见 规范B §5.5(+ 自检清单 C1b),注入项见 规范A 2-5 ~ 2-10。
> B11 上传资料 · 历史区已改口径(2026-10-07 用户裁定):① 标题「历史上传记录」→ 「历史数据」(合规 规范B §2.4 B-4,review_pkg A6-3 对该页的 FAIL 已消除);② 历史卡片新增审核三态胶囊 待审核(琥珀)/ 已审核(绿)/ 已驳回(红),文案表 HIS_STATE、类名 .his-tag.wait/.ok/.no(⚠️ 2026-10-10 由 .his-state 收敛为 .his-tag);③ 历史卡片不显示文件大小(副行只留「类型」、时间归行3),待提交区 .pk-item 仍显示大小;卡片骨架统一为 规范B §3.3.3 的 .his-*;④ 演示种子 uploaded 6 条三态齐全、时间走 TS(),新提交一律 state:&#x27;wait&#x27;。规则见 规范B §3.3.1,注入项见 规范A 11-2 ~ 11-6,收尾核验 规范A 25-26。

4.4 中心医护端(D 系列 21 页)

D01 工作台 / D02 预警列表 / D03 患者列表 / D04 患者全景视图 / D08 标签管理 / D11 症状上报处理 / D12 用药打卡处理 / D13 患者量表处理 / D15 量表管理 / D19 科研管理 / D21 我的 / D22 资料管理 / D23 宣教管理 / D24 健康日记 / D25 患者日程(孤儿页,见下)/ D26 资料汇总(已无「患者基本信息」卡)/ D27 健康报告 / D28 健康报告详情 / D29 沟通 / D30 沟通会话 / D31 健康报告审核(2026-10-07 新增)

> ★ 2026-10-11 用户裁定:随访模块整体下线 —— D09-新建随访计划 / D16-随访管理 / D18-随访进度 三个页面文件已从模板删除,(D01、D21 两处指向 D16 的入口同步删除),编号 D09 / D16 / D18 留空、不复用;F06-随访计划管理(管理端)保留(管理端随访模板属另一条线,未在本次裁定范围内)。⚠️ 注入时不得把这三个 D 页加回来;规范A 中 D09 / D16 / D18 三段已作废。
> ★ D25-患者日程 保留为孤儿页(2026-10-11 用户裁定):文件保留,但 D04 的三处入口(功能菜单项 / 「患者日程」区块 / 该区块 JS 生成的节点链接)已全部删除;患者端 B08 / B09 日程管理保留不动。

> D31 · 健康报告审核 —— 由 D01 主宫格「健康报告」进入。以患者为卡片,汇总全院待审核 + 待推送的健康报告(结构与 D22-资料管理 同构:概览条 + 搜索/筛选 + 患者卡);点击患者卡 → D27-健康报告-中心医护端.html?name=&lt;患者&gt;。
> 审核/推送状态取自 localStorage 键 rptedit:&lt;患者&gt;,与 D27 / D28 共用同一把键,故三页状态恒一致。

> ⛔ D04 患者日程 · 已整体下线(★ 2026-10-11 用户裁定)——
> 原「三态节点(绿 .dot.on 已完成 / 红 .dot.od 逾期 / 蓝 .dot.off 待执行)+ .sc-nm 日程名 + 色板与图例」整块能力已从 D04 移除:
> ① 「日程管理」功能按钮(.func-* 宫格项)已删;② 「患者日程」展示区块已删;③ 该区块的 JS 节点渲染入口已删;
> ④ 配套的 .sc-* 三态 CSS 与 SCHED / renderSchedRow 等 JS 已按死代码一并清除。
>
> ⚠️ 注入时不得把日程区块加回 D04;规范A 的 4-10 / 4-14(D04 日程项)已作废。
> ⚠️ 患者端 B08 / B09 的日程管理不受影响、保持原样;D25-患者日程 文件保留为孤儿页(无入口)。
> ⚠️ 规范B §4.2.1 日程三态色板章节保留(B08 / B09 仍读同一套 patsched: 键与色板),但适用范围收窄为患者端两页(原先写的是「D04 / D25 / B08 / B09」)。

D01 功能宫格变更(2026-10-07,注入时不得破坏)

区域 现状 变更说明
主宫格 #funcGrid 5 格:症状上报 / 用药打卡 / 患者量表 / 健康报告 / 全部功能 「资料管理」移出,「健康报告」移入(fc-a 业务蓝,位于「全部功能」之前)。格数不变,.func-grid 仍为 repeat(5,1fr)
展开区 .func-sub 5 格 · 单行:科研管理 / 标签管理 / 量表管理 / 宣教管理 / 资料管理 ★ 2026-10-11:「日程管理」项已删除(它本是随访模块唯一入口,指向 D16-随访管理)。现为 5 格单行,.func-sub 仍 repeat(5,1fr) —— 正好一行放满,没有换行项
待办面板 #rptWrap 位于 #upWrap 与 #catWrap 之间 新增「待审核健康报告」面板(紫色系 .rp-*,结构同构 .up-*),数据 RPTS 与 D27/D31 的 REPORT_SETS 同源,三处改动需一起调

> ⚠️ 注入时若改病种导致功能增减,必须守住三条:① 主宫格只放 fc-a(业务蓝),展开区只放 fc-b(管理紫) —— 混用会被 review_pkg.py 的 A7-2 判 FAIL;② 两区一律每行 5 个(repeat(5,1fr)),项数超出即自动换行(★ 2026-10-11 后的基线:主宫格 5 项=1 行;展开区 5 项=1 行);③ 不得为了"填满一行"去改 repeat(N,1fr) 的 N —— 列数口径全包唯一,改它等于破坏一致性。
> ⚠️ ★ 2026-10-11 追加:不得建议或自行添加功能宫格项(见 Step 3 硬约束 4)—— 宫格项与页面一一对应,加减都必须先由用户提出。

4.5 入口页 A01 —— 已删除,不适用

A01(原型入口页)已由用户从服务包中删除(2026-10-07 确认)。本 skill 全流程不再处理 A01:

  • 通用型包为 46 页(B ×14 + D ×21 + F ×11),不含任何 A01
  • 不再有「索引链接 + 三处计数」的注入与核验项(规范A / 规范B 的 A01 条目已同步作废)
  • 若源包内意外出现 A01* 文件 → 停下问用户,不得自行处置

4.6 管理端(F 系列 11 页)→ 清单见 references/规范A「第 2.5 步」(下为速览)

页 行数 注入要点(全局替换级)
F01-管理端主页 89 XX医院 ×2(标题 / 署名)
F02-查询统计 94 XX医院 ×3;allData/names/surnames/given/risks 为随机演示数据(一般不换)
F03-数据下载 198 重点页:diseaseTypes(病种类型数组)、institutions/depts/counties(机构维度)、hba1cValues(糖尿病残留,必改);XX医院×23、疾病名称×13、XX科×4
F04-科研管理 156 医生A×6、术后×6、XX医院×1
F05-全病程管理总览 142 XX医院×6;allData/surnames/given/risks
F06-随访计划管理 431 重点页:XX医院×32(全包最多)、随访计划模板;出血/术后/入组第 各 1
F07-全病程驾驶舱 136 statInfo;疾病名称×2、出血×5
F08-质控看板 123 XX医院×10
F09-检验检查报告管理 83 XX医院×7、结肠镜×1
F10-症状上报管理 83 XX医院×7、出血×2
F11-量表管理 772 重点页:scaleData/targets/qData/opts、XX医院×22、出血×2

> 上表为速览;逐字段清单以 references/规范A 第 2.5 步为准(26-1 ~ 36-6 共 44 项)。

硬约束(建议必须严谨可靠)

  1. 不得为凑数而建议新增;每条建议附病种依据
  2. 停用前必须检查:该页是否被其他页引用(失效链接)、是否在页面索引中登记
  3. 停用后编号规则:保留空号、不重排(沿用包内既有做法);在 TSV 剔除区追加留档
  4. 新增必须成对:新增患者端上报页 → 医生端必须配套三段承接(D01 功能图标 + D01 #alarmWrap 预警展示 + D04 功能图标单患者入口),不得单侧断档
    (⚠️ 新增页须先由用户提出 —— AI 不得主动建议新增页,见 Step 3 硬约束 4;用户主动提出后按本节流程走)
  5. 医生发起类业务(量表推送 / 健康报告 / 用药调整)须两端闭环齐全(规范B 第四章六项自检)—— ⚠️ 「日程管理」已不是医生端业务(2026-10-11 医生端日程下线)

4.7 ★ 量表数量确认(★★ 2026-10-11 用户裁定:不问方案、只问数量 · 在 Step 5 范围确认之前走完)

> 用户原话:「在向用户确认量表页功能的时候,去掉通过 excel 生成量表的功能提问选项,统一按照默认模拟量表的方式执行,可以问用户做几个模拟量表。
> 同时保留生成量表页面的功能,但不向用户展示,也不执行。」

4.7.1 ★ 唯一提问:本次做几个模拟量表

项 规定
问什么 只问一句:「本次做几个模拟量表?」—— 默认 3 个,建议区间 1–6(用户可自由给数)
不问什么 ❌ 不再问「量表方案」(~~沿用模板量表库 / 按我的要求改 / 我有量表原始文档 / 本期不改~~ 四选一已作废);<br>❌ 不得主动提「你可以提交 Excel / Word / PDF 量表文档」;<br>❌ 不得把「提交量表原始文档」列进任何菜单、提示、确认单选项或建议清单
默认模拟量表从哪来 沿用模板既有量表库(B07 10 条 / D15 7 条 / F11 12 条)按目标病种改写名称与维度;不每轮新造题库结构、不新增 scale/ 作答页
用户要的数量 > 库内条目数 先问用户(复用 / 扩充 / 减量),不得自行编造量表

4.7.2 病种化改写(按用户给定的数量执行)

  • 在模板既有量表库中取 N 条,按 Step 2 的病种特点改写:量表名 / 维度 / 题项措辞 / 计分口径(结构不动)
  • 不产出 scale/ 页面:改的是 B07(患者端量表库)/ D15(医生端量表管理)/ F11(管理端量表管理)中的既有条目
  • 六处同源登记照旧:B07 ↔ D13 / D15 / D19 / D04 / D30,同名量表措辞逐字符一致;机器判定 review_pkg.py A4 组
  • 改写后的量表名与维度在 4.1 功能清单确认时一并列出交用户核对(不单独回读、无「解析确认」环节)

4.7.3 ⏸️ 冻结能力(保留在包内 · 不展示 · 不执行)

资产 状态
references/规范E-量表文档转HTML页面规范.md 保留(不删除、不修改),默认不读取、不执行
references/规范F-量表报告生成规范.md 同上
scripts/scale_doc_extract.py 同上(不主动跑)
scripts/check_scale_docs.py 同上(包内无 scale/ 时本就「不适用直过」,可不跑)

> 唯一例外(用户主动时恢复):用户自己提交了量表原始文档 / 明确要求「按我的量表生成作答页」时 —— 才恢复走 规范E
> (解析 → 回读确认 → 生成 scale/&lt;短名&gt;.html + 同短名报告提示词 md → 过 check_scale_docs.py)。
> ⚠️ AI 不得主动提起这条路径;用户没提,一律按 4.7.1–4.7.2 走。恢复执行时的完整流程见本文件 附录·冻结路径(文末)。

4.7.4 管理端 F11 的同步改造(★ 2026-10-11)

F11-量表管理-管理端.html 里的「导入题目 / Excel 上传 / 下载模板」整套 UI 已从模板删除
(它是「通过 Excel 生成量表」的唯一真实入口,留着与「不展示、不执行」矛盾)。
⚠️ 注入 / 改页时不得把它加回来;机器判定 = review_pkg.py A15 组(新增)。

输出:① 两端功能列表确认结果(4.1)② 功能需求卡 + 用户「正确」答复(4.2)③ 各端功能增减建议矩阵(4.3–4.6)
④ 量表数量 + 病种化改写后的量表清单(4.7)—— 四者均交用户确认,并一并写入 本次注入-更新范围确认单.md。


4.7-附 ★ 冻结路径(仅在用户主动提交量表文档时启用)

> 本节是 2026-10-11 之前的 4.7 全文,原样保留供恢复执行时对照。AI 不得主动引用本节、不得主动提议走这条路。

步 内容
① 解析 python3 scripts/scale_doc_extract.py &quot;&lt;文档&gt;&quot; --out &quot;&lt;包目录&gt;/scale/_src/量表解析-&lt;原文件名&gt;.json&quot;;xlsx/docx 走 zip+XML 纯标准库直读,csv/tsv/txt/md 直读;pdf 由模型逐页阅读(扫描件 / 双栏 / 混排表格尤须逐页核对);原件存档到 &lt;包目录&gt;/scale/_src/
② 回读确认(★ 未拿到「正确」前不得生成任何页面) 原样列给用户:量表名(全称+缩写)/ 维度 / 题数 / 每题题干与全部选项(含顺序) / 计分规则(含反向计分、分值区间)/ 是否接入报告;缺项逐项追问(清单见 规范E §2.2)。答「差不多 / 基本对 / 大概」不算通过 → 重新回读
③ 生成作答页 严格按 references/规范E:产出 &lt;包目录&gt;/scale/&lt;短名&gt;.html(单页自包含、可填写、可提交);页面数据一律走页顶 SCALE_DEF;题目只放作答页,不得塞进 B07 的 SCALES[].groups[].qs;相对路径一律 ../assets/...;严禁 CDN
④ 配套报告提示词(★ 每张量表一份 · 无条件) 产出 &lt;包目录&gt;/scale/&lt;短名&gt;.md —— 与作答页同短名、同目录,只差扩展名;严格按 references/规范F(12 节骨架 + 8 变量 + 必含句 R1–R8 + 五段 + 两附);红线一:禁止用先验知识补分级;scoring.ranges 为空时不得出现任何分级名称或分数线;整篇不得套外层代码块
⑤ 同源闭环 B07 加记录并给出入口 + D13/D15/D04/D30/D19 五处登记同名量表(措辞与 B07 逐字符一致);用户未要求接入报告 → 不动报告链路并在《更新说明》写明「未接入报告」
⑥ 过闸门 规范B「0. 铁律闸门」7 项 → 规范E §九 自检清单(15 条)→ 规范F §十三 自检清单(12 条)→ verify_pkg.py 全 OK → check_scale_docs.py 退出码 0

> ⚠️ scale/ 页不进 46 页编号体系:不占 B/D/F 编号、不单独出《产品功能清单》文档、不计入 A12-1 的页数统计;
> 但必须在《更新说明》里单列「新增量表页」(规范E §八)—— "不进编号"≠"可以不登记"。


Step 5 · 与用户确认更新范围与内容(最谨慎的一步)

> 前提:页面上的数组内容可能是用户已手工填过的真实业务数据。一旦覆盖不可恢复。

5.1 先问数据来源状态

  • 当前包是「未改动的初版模板」还是「已经被人工改过 / 已填过真实数据」?
  • 若是改过的:哪些页 / 哪些数据块是用户自己维护的? 需用户指明。
  • 用户未指明前,不得假设。

5.2 分档确认更新范围(多选,逐条确认)

档 范围 风险
1 仅文案(占位符替换:医院/科室/医生/病种名/术式) 低
2 文案 + 数据内容(数组内业务数据) 中 — 可能覆盖用户已填数据
3 文案 + 数据 + 编码层标识符(类名/id/图标/模板代号) 中
4 含新增页面 中

5.3 逐条列出将改动的内容

按规范A 输出待改动项总表:

页面 定位(变量/元素) 当前值 将改为 档位 是否用户已填数据

让用户逐条或按档批量确认。

5.4 选择落地方式(必提,由用户定)

方式 做法 代价
A 原位替换 直接改数组内的值 / 文案 简单直观;但会覆盖数据层,原有数据无法回填
B 配置注入 把可变值抽到页面顶部 var CFG={...},渲染处引用 CFG 不覆盖数据层、可回退;但需改渲染代码,属结构性改动,必须用户明确同意(T1 例外授权)

> 不得默认采用 B;B 的改动范围超出 T1,须逐页取得用户明确授权。

5.5 必须给出的提示

  1. 备份:改动前对全包做一次整体备份到 &lt;包目录&gt;_bak_YYYYMMDD_HHMM(用户指定位置)
  2. 回滚方案:rm -rf &lt;包目录&gt; &amp;&amp; cp -r &lt;备份目录&gt; &lt;包目录&gt;(必须在执行前与用户确认此命令可用)
  3. 不可逆:一旦执行不可回滚(除非用备份还原)
  4. 分批:建议按档位或按端分批执行、每批校验

硬约束

  • 用户明确确认前,不得执行任何写操作
  • 用户未回答"数据来源"前,不得进行档位 2 及以上操作
  • 涉及用户已填数据的改动,若用户未指明字段,不得假设,必须先问

输出:本次注入-更新范围确认单.md §5(档位 + 逐条清单 + 落地方式 + 备份与回滚方案),用户确认。
> 复核配置不再落盘:Step 7.0 按 §5 现场推导成临时配置(新值进 new_terms、被替换的旧值进 old_terms、易混用对进 pair_terms;有量化专病记录时补 specialty_record;分支 B 另补 debind 整块),跑完即删。

分支 B 的 Step 5 附加三项(缺一不得进入 Step 6):

附加项 内容
时间轴目标口径 入组第 N 天 / 治疗第 N 天 / 疗程第 N 天 —— 三选一,全包唯一,写进确认单
🟡 黄词逐处处置 取自确认单 §8.2(术语三色表),逐处给「保留 / 改写 / 删除」+ 理由
删除页同步清单 文件 / 全部入口链接 / 页面索引(+ 若有页数计数器),逐条列出

Step 6 · 执行

6.1 执行前差异盘点

对比源包与「初版模板」,确认是否存在未预期的既有改动;若有且用户未提及 → 停下报告,不得直接覆盖。

分支 A 的「初版模板」= skill 内置基线:

TPL=&quot;$HOME/.workbuddy/skills/病种注入器/assets/templates/通用型全病程服务包-V3.3&quot;
diff -rq &quot;$TPL&quot; &lt;源包目录&gt; 2&gt;&amp;1 | grep -v &#x27;\.DS_Store&#x27;
  • 无输出 → 源包是未改动的初版模板,正常进入 6.2
  • 有差异 → 逐页判定「用户既有改动」vs「模板基线差异」,结论写进台账;涉及用户未提及的改动一律先停下问

> ⚠️ 源包来自模板本身(用户未带源包)时:6.1 免做差异盘点(复制件与基线必然一致),但仍要跑 detect_source_pkg.py 留证。
> ⚠️ 分支 B 不适用本条:专属包没有对应基线,改由 Step B1–B3 的资产清单与残留矩阵承担。

6.2 注入替换:严格按 references/规范A-病种注入执行清单-V2.md 执行,顺序:

第 0 步 全局 → 第 1 步 B 端 14 页 → 第 2 步 D 端 21 页 → 第 2.5 步 F 管理端 11 页 → 第 3 步 编码层 → 第 4 步 核验(不含 A01 段)

> 分支 B 的顺序不同:以"页"为单位,逐页执行 解绑 → 注入(同一页内成对完成),严格按 Step B4 处置清单走。
> 禁止"先全包解绑、再全包注入"的两遍走法 —— 两遍必然产生「目标病种名 × 前序病种概念」的中间态残留(见 T1-b 与 A9-3)。
> 镜像对必须同批处理:识别出的 B 端 ↔ D 端镜像页,在同一批里改完,不得先改一端。

6.3 新增页面:⚠️ 前置条件是 Step 4.2 闸门已过(且新增动议由用户提出 —— AI 不主动建议新增页)(需求卡已由用户回复「正确」)—— 未过闸门不得新建任何页面。执行时严格按 references/规范B-新建页面规范-V2-医患两端.md 走(同 4.2.5),逐项过其自检清单(含「0. 铁律闸门」7 项;含 §十一 E / H 的「历史卡片行序 + 时间行文案」强制项,对照 §3.3.2 —— 历史卡片标准适用于任何新建的含历史数据页面,不是 B03 的个案)

6.4 每次改动

  1. 先备份到临时目录
  2. 大块删除用「行区间 + 首末行断言 + 上下行越界断言 + 自底向上」
  3. 改完与备份跑 difflib,确认「删的行都在预期清单内、加的行只有预期的补位行」

6.5 交付前跑校验

python3 scripts/verify_pkg.py &lt;服务包目录&gt;

校验项:内联脚本语法 / 真实 DOM div 配平 / 失效链接(原「页面计数一致性」已随 A01 删除而移除)。

> ⚠️ 两脚本必须能真正跑完:review_pkg.py 曾因逐词逐文件直接读盘(53 页 × 50 词 ≈ 2600 次)被拖到超时甚至 SIGKILL —— 全部改走读盘缓存后完整复核约 4 秒。跑不完的校验等于没有校验。

分支 B 追加(解绑是否真的做干净,机器先过一遍):

python3 scripts/scan_residue.py &lt;服务包目录&gt; --terms &lt;临时目录&gt;/术语三色表.txt    # 临时入参(结论进确认单 §8.3)
python3 scripts/review_pkg.py &lt;服务包目录&gt; --config &lt;临时目录&gt;/复核配置.json       # 临时配置,跑完即删

6.6 产出待复核件(本步不交付)

  • 不写任何记忆
  • 不新出文件:改动清单(改了哪些页 / 哪些块 / 多少处)+ 遗留待确认项在对话里呈现,并由 Step 6.7 落进包内《更新说明》
  • 确认单 §7 填上「文档产出范围」;状态记在对话里(「执行完成 · 待复核」)

6.7 ★ 文档产出(成套交付的甲层 · 按需产出 · 不可跳过)

> 依据 规范D。页面改完先判断本次哪些页需要文档,再产出;不要等复核发现缺陷再补。
> ★ 2026-10-10 用户裁定:文档不再逐页产出 —— 只在两种情况下产出,其余一律不产出。

6.7.1 ★ 先判「本次哪些页要文档」(只有两种情况)

# 情况 判据(只认结构变化) 动作
① 新增页面 本次交付中新加入的页面 必须新写 {编号}-{页名}-A.md,版本 A
② 结构级大改的已有页面 该页出现 —— 分区增删(新增 / 删除一个分区)或 骨架顺序变化(分区先后次序改变),二者之一 整篇重写该页文档(八节);版本升一版(A → A2 …)

以下改动一律不产出文档:改演示数据 / 数值 / 文案、改样式(颜色 / 字号 / 圆角 / 间距 / 图标)、功能点增删(分区与骨架未变)、出链入链少量增删、资产替换、逻辑与阈值调整、类名重构。

  • ⚠️ 判据只有两条(「分区增删」「骨架顺序变化」)。不得把「改动很大」「涉及多页」「功能点 37→39」这类主观或量化感受当成结构级大改。
  • ⚠️ 边界情形(拿不准是否构成分区增删 / 骨架重排)→ 按「不算」处理,并当场问用户,不得自行升级为「要重写文档」。
  • 判定结果(新增页清单 + 结构级大改页清单)在对话里列出,并写进确认单 §7。

6.7.2 明确不做的事(★ 2026-10-10 起)

不做 说明
不做全量生成 源包无 产品功能清单/(首轮从内置模板起)→ 不生成。包内初始无文档即为正常状态
不做基线复制 / 平移 / 比对 取消「把源包基线复制到临时目录再逐页比对」整套动作;不再产出 SAME/DIFF/MISSING/EXTRA。scripts/doc_baseline_diff.py 已删除(机制取消,脚本不在包内)
不做删除页声明 页面被删:不加作废声明、不改版本、不在《更新说明》单列;其文档原样留在包内即可
不要求「页数 = 文档数」 该等式作废。文档数 = 新增页数 + 结构大改页数(可以是 0)
不做邻页跟随 新增 / 删除页面不再要求同步邻页 §四 —— 除非该邻页自己也命中 ②

6.7.3 按判断产出文档

步 做什么 产出
a 在 &lt;包目录&gt;/产品功能清单/ 下建立或复用文档目录 目录
b 新增页 读源码 → 按八节骨架写文档(事实来源只有页面源码,不读记忆);「产出事由」写「新增页」 {编号}-{页名}-A.md(版本 A)
c 结构大改页 读源码 → 整篇重写该页文档;「文档版本」升一版、「修订日期」改本次、「产出事由」写具体结构变化 重写后的 md
d 其余页 不动 —— 不重写、不升版、不改日期、不补文档 无
e《更新说明》 写 更新说明-YYYYMMDD.md,含「页面 ↔ 文档」对照表 + 本次文档产出小结(0 份时必须写明「本次无新增页、无结构级大改,未产出文档」) 更新说明
f 校验 跑 python3 scripts/check_docs.py &quot;&lt;包目录&gt;/产品功能清单&quot; → FAIL 项必须为 0(无文档目录时视为不适用) 校验输出
g 写配置 把 docs 块写进临时复核配置(dir / min_lines / update_note / required_pages / skip_pages)—— 临时文件,属 Step 7.0,复核跑完即删 配置

> ⚠️ required_pages 必须显式给出 —— 它 = 本次新增页 + 结构级大改页的清单(本次确实没有就写 [])。
> 键缺失时 A12 只报 WARN(「没声明」与「声明为空」是两回事),交付时必须已显式声明。

硬约束

  • ⚠️ 文档一律占位符化:即使包内页面已填真实医院 / 病种 / 医生名,文档里也写 ⟨医院⟩ / ⟨病种名⟩ / ⟨主诊医生⟩(规范D §二 绝对禁令 1)
  • ⚠️ 不改任何 .html:本步只产出 md
  • ⚠️ 不产出文档是常态,不是缺失:包内文档数 < 页面数属正常状态,不得据此判「不成套」、也不得「顺手补齐」
  • ⚠️ 不得把「改动大」当「结构大改」:越线产出文档同样是违规(用户要求「非必要不生成」)
  • ⚠️ 新增页必须产出文档:这条是硬要求,不得以「非必要不生成」为由省掉
  • ⚠️ 声明了就必须有(required_pages):A12-1 会逐项核对;声明漏了则机器查不出(见 A12 明细「已知局限」),靠《更新说明》对照表 + 确认单 §7 + 交付前自检三处互证
  • ⚠️ 不做基线复制平移:不得把源包基线整目录复制出来比对(那正是本轮要消除的动作)

  • 状态记在对话里(「执行完成 · 文档已按需产出 · 待复核」)

  • → 进入 Step 7 复核;复核通过后才交付

Step 7 · 交付前强制复核与根因追查(不通过不得交付)

> 复核不是"再检查一下",是交付闸门。原则:可取证、全覆盖、就地修复、追到根因。
> 用户硬要求:同一个错误不得多次犯 —— 因此本步必须产出「防复发措施」并回写。

7.0 准备复核配置(临时文件 · 不落输出目录)

按确认单 §5 / §7 生成临时复核配置(写系统临时目录;复核跑完即删,不得落在用户输出目录):

{
  &quot;old_terms&quot;:  [&quot;被替换掉的旧值1&quot;, &quot;旧值2&quot;],
  &quot;new_terms&quot;:  [&quot;新病种值1&quot;, &quot;新病种值2&quot;],
  &quot;pair_terms&quot;: [[&quot;术后第&quot;, &quot;入组第&quot;]],
  &quot;allow&quot;:      {&quot;某通用词&quot;: [&quot;允许保留该词的文件名.html&quot;]},
  &quot;expect_pages&quot;: 50,
  &quot;docs&quot;: {
    &quot;dir&quot;: &quot;产品功能清单&quot;,
    &quot;min_lines&quot;: 350,
    &quot;update_note&quot;: &quot;更新说明-20261010.md&quot;,
    &quot;required_pages&quot;: [&quot;本次新增页.html&quot;, &quot;本次结构大改页.html&quot;],
    &quot;skip_pages&quot;: []
  },
  &quot;specialty_record&quot;: {&quot;name&quot;: &quot;眼轴&quot;, &quot;patient_page&quot;: &quot;B16-XX打卡-患者端.html&quot;,
                       &quot;overview_page&quot;: &quot;D04-患者全景视图-中心医护端.html&quot;,
                       &quot;doctor_pages&quot;: [&quot;D31-XX上报处理-中心医护端.html&quot;]},
  &quot;hist_icon&quot;: {&quot;extra&quot;: {}, &quot;exempt_classes&quot;: [], &quot;exempt_pages&quot;: []},
  &quot;debind&quot;: {
    &quot;prior_terms&quot;:    [&quot;前序病种全量术语(🟢 + 🟡,取自 Step B2 三色表)&quot;],
    &quot;target_terms&quot;:   [&quot;目标病种名与其同源词&quot;],
    &quot;conflict_pairs&quot;: [[&quot;目标病种名&quot;, &quot;前序病种概念词&quot;]],
    &quot;timeline_terms&quot;: [&quot;术后第&quot;, &quot;手术日&quot;, &quot;术前&quot;],
    &quot;dict_keys&quot;:      [&quot;前序病种专属字典键&quot;],
    &quot;mirror_pairs&quot;:   [[&quot;B端页.html&quot;, &quot;D端页.html&quot;]],
    &quot;allow_comment&quot;:  {&quot;某词&quot;: [&quot;允许保留该词的文件名.html&quot;]}
  }
}
字段 含义 判定
old_terms 本次被替换掉的旧值 全包应为 0 命中
new_terms 本次注入的新值 全包应 ≥1 命中(防「漏改」)
pair_terms 容易混用的旧/新对 同一文件内不得同时出现
allow 允许保留的例外(词 → 文件名或 *) 例外必须写进确认单 §5 的「例外登记 / 已知接受项」
expect_pages 期望页数 与实测一致(新增页后必须同步 +1,见 规范B §9.2 第三处)
specialty_record 量化专病记录(指标词 + 患者端打卡页 + 全景视图 + 处理页) 驱动 A7-4(结构)/ A7-4b(趋势卡只在单患者上下文渲染)/ A7-4c(同源);配置即查,未配置则跳过
docs(★ 交付硬要求) 文档产出配置(文档目录 / 篇幅下限 / 更新说明文件名 / 本次需文档的页清单 required_pages / 无需文档的页) 驱动 A12 组(声明的需文档页 ↔ 文档存在性、八节 / 篇幅 / 版本日期 /《更新说明》);未配置则整组跳过并告警 —— 交付前必须配置(规范D §七)
hist_icon 历史卡片统一骨架(新页图标类名 → 四项规格 / 骨架属性覆盖 / 旧类名清单 / 例外类名 / 例外页) 驱动 A14 组五条;不配则用内置基线(五页一套 .his-*,规范B §3.3.3);仅新增含历史数据的页时才需要填 extra/old_classes(改骨架数值须先改 §3.3.3 表再配 card_extra)
debind(分支 B 专用) 解绑复核配置,驱动 A9 组 配置即查,未配置则整组跳过

> ⚠️ debind 只由分支 B 填。分支 A 留空 → A9 组整体跳过,不影响既有 0 FAIL / 0 WARN 基线。
> debind 的字段口径见 规范C §10.1。

7.1 四层复核(每层都要有输出,缺一层视为未复核)

层 查什么 手段 通过标准
L1 机械层 页面能不能跑 python3 scripts/verify_pkg.py &lt;包目录&gt; 语法 / div 配平 / 失效链接 全 OK
L2 需求层 Step 5 确认单里的每一条,做没做 逐条对照确认单 + 关键词命中/截图 每条都有证据,无「未复核」
L3 规范层 规范A 清单项是否落实;另查编码层(第 3 步)是否清干净 python3 scripts/review_pkg.py &lt;包目录&gt; --config &lt;配置&gt; + 与备份 difflib A 组 0 FAIL;diff 无越界改动
L4 一致性层 跨页同源数据是否同步 review_pkg.py 的 A4 组(B04↔D26 逐字符 / 六处量表库 / 报告 id 链路 / 宣教同源 / 症状通道)+ 无头实测 0 FAIL
L5 文档层 ★ 成套交付的甲层(按需产出):声明的需文档页 ↔ 文档存在性、八节齐全、篇幅、版本与日期、《更新说明》 python3 scripts/check_docs.py &quot;&lt;包目录&gt;/产品功能清单&quot; + review_pkg.py A12 组 check_docs.py FAIL 0;A12 组 0 FAIL(required_pages 必须已显式声明)

review_pkg.py 的分组含义:

组 内容 级别
A1 真实姓名(已知名单 + 患者对象姓名非「患者NN」) FAIL
A2 糖尿病 / 慢病底版残留(SDSCA/DKT/FootRisk/HypoRisk/ADDQoL/ESDQOL/DQOL/hba1cValues/FOOT/fa-shoe-prints/dm htn exp ctl) FAIL
A3 肛肠 / 痔病底版残留(吻合器/截石位/3、7、11/凡士林/PPH/Wexner/控便/莫匹罗星/地尔硫卓/硝酸甘油/腰硬联合麻醉/扩肛/里急后重) FAIL
A4 跨页一致性 6 组(数据同源) FAIL / WARN
A5 页数(按配置) FAIL
A6 患者端 UI 一致性 11 条(对照 规范B §2.4 十四条硬规则 + §5.3 打卡区排序)—— 见图下明细 FAIL / WARN
A7 医生端 UI 一致性 5 条(对照 规范B §1.4 D-1~D-9)—— 见下明细 FAIL / WARN
A8 D 端底部导航 + 全局预警徽章 4 条(对照 规范B §1.4 D-7 / D-8)—— 见下明细 FAIL
A9 源包解绑 6 条(分支 B 专用,debind 配置驱动)—— 对照 规范C §10 —— 见下明细 FAIL / WARN
A10 时间基准 3 条—— 页面「今天」必须随系统日期,不得写死(对照 规范B §5.4)—— 见下明细 FAIL
A11 用药打卡粒度 3 条—— 全病种一律按周,硬性不得改为按日 / 按月(对照 规范B §5.1)—— 见下明细 FAIL
A12 文档产出 6 条 ★—— 声明的需文档页 ↔ 文档存在性、八节、篇幅、版本与日期、《更新说明》(对照 规范D,docs 配置驱动)—— 见下明细 FAIL / WARN
A13 图标一律 FontAwesome 3 条—— ① 不得用 emoji 充当图标(静态图标位 / 裸 emoji 字面量)② ★ 图标名必须在 FA Free 里真的存在(防 FA Pro 专属图标渲染成空白),覆盖三端 B·D·F(对照 规范B §0.5)—— 见下明细 FAIL
A15 F11 Excel 生成量表入口禁令 2 条 ★(★ 2026-10-11 新增)—— 静态 DOM 不得出现「导入题目 / 从Excel导入题目 / 下载模板 / 导入量表」入口与 &lt;input type=&quot;file&quot; accept=&quot;.xlsx,.xls&quot;&gt;;不得再引外部 xlsx 库(对照 Step 4.7.4)—— 见下明细 FAIL
A14 历史卡片「统一骨架」5 条 ★—— 图标规格漂移 / 旧形态回归 / 未登记同类新类 / 卡片骨架规格漂移 / 旧类名残留(对照 规范B §3.3.3,真源同节)—— 见下明细 FAIL / WARN
B1/B2/B3 旧值残留 / 新值缺失 / 新旧混用(按配置) FAIL
C1 CDN 图标库(离线不可用) WARN

A6 组明细(2026-10-01 新增 · 用户患者端反馈的机器化;A6-7~9 为同日二次反馈补入)

编号 判定 级别 对应规则
A6-1 二级页标题栏含非空 .subtitle FAIL B-1 标题栏不写副标题
A6-2 标题栏含计数说明容器 .h-note FAIL B-2 计数不进标题栏,改挂 tab 徽章(B10/B14 逐页豁免,见 A6-9)
A6-3 历史记录区块文案 ≠ 历史数据 FAIL B-4 历史区块文案全包唯一
A6-4 历史记录区块图标 ≠ fa-solid fa-clock-rotate-left(含内联配色覆盖) FAIL B-3 / B-5
A6-5 二级页 .header / .page-header 背景不含 #004F8A / var(--deep) FAIL B-6 标题栏背景全包唯一
A6-6 B01 铃铛角标未与 B13 待办数量联动(notice_todo_count) WARN B-9 角标口径
A6-7 .header padding ≠ 14px 16px,或 .btn-back ≠ 34×34(B03 豁免) FAIL B-11 标题栏高度全包唯一 = 62px
A6-8 .btn-back 内图标为 fa-arrow-left FAIL B-12 返回图标全包唯一 = fa-chevron-left
A6-9 .header 直接子元素超出白名单 {.btn-back, .title} + 逐页豁免的右上角清单级功能位(B06 .h-mg / B10·B14 .h-note / B13 .read-all) FAIL B-1 / B-13 标题栏只承载「返回 + 标题」
A6-10 深色标题栏(含 #004F8A / var(--deep))上标题字或返回按钮字非白色;或浅色标题栏上标题字为白色 FAIL B-14 标题栏文字颜色须与背景明暗匹配(改背景必须同步改字色)
A6-11 健康日记打卡区排序:含「通用项白名单」(DIARY_COMMON_TERMS = 运动 / 睡眠 / 体重 / 饮食 / 情绪 / 饮水,可配置)的 .diary-card,其后出现不含白名单词的卡 FAIL 规范B §5.3「打卡区排序规则」 —— 病种专属项在前、通用项在后;新增专属项插到最顶(2026-10-07 用户裁定)

> B-7 空态文案、B-8 左对齐、B-10 品牌重复 属语义判断,仍为人工验收项(规范B §2.4)。
> A6-7 ~ A6-9 的反向自测:对未注入基线运行 → 报 29 条 FAIL(含 4 种标题栏高度、5 页图标混用、read-all / h-note / tt-wrap 越界),可完整复现用户两轮反馈的全部问题。
>
> A6-2 / A6-9 的豁免机制(2026-10-07 立):两表共用 HDR_CHILD_ALLOW_EXTRA 一份依据 —— 同一个 .h-note 被两条校验同时覆盖,若只豁免其一会出现「A6-9 放行、A6-2 仍报」的自相矛盾。当前豁免 4 处右上角清单级功能位(B06 .h-mg / B10·B14 .h-note / B13 .read-all),每处均在该表内写明理由;业务功能入口不得豁免。
>
> 同轮按 B-1 / B-13 清理模板:B05/B06/B07/B08/B09 的 .tt-wrap / &lt;div style=&quot;flex:1&quot;&gt; 包装层全部移除(.title 直接作子元素并补 flex:1),B05 副标题一并删除 → A6 28 → 17 条。
> A6-10 反向自测:对「标题栏背景已统一为深蓝、但字色未同步」的中间态快照运行 → 报 4 条 FAIL(B12/B13/B14/B15,逐页指出标题字色 var(--text) 与按钮字色 var(--primary) 应为白色);对已修复包 → 0 FAIL;对既有眼科 / 肛肠两个交付包 → 0 FAIL(0 误报)。
> A6-11 正反向自测(2026-10-07,6/6 全过):① 正向对未注入模板 → 0 FAIL;② 把通用项卡换到专属项卡之前 → 抓到;③ 在通用项卡之后再插新专属项卡(违反「插到最顶」)→ 抓到;④ 新专属项卡插到最顶(合规)→ 0 FAIL;⑤ 通用项词被整体替换(无法判定)→ 跳过不误报;⑥ 专属项卡标题含「运动」字样但顺序正确 → 0 FAIL(fails open,不误杀)。
> A6-11 判据为什么用白名单:专属项随病种变化、无法枚举;通用项是跨病种固定的一组 —— 枚举它才是低误报的可行判据。代价是「专属项卡恰好含通用项词」时放弃判定,宁可漏报、不可误杀。

A7 组明细(2026-10-01 新增 · 用户中心医护端四项反馈的机器化)

编号 判定 级别 对应规则
A7-1 一级页(D01/D02/D29).header 内无 header-ico FAIL D-1 标题栏「图标 + 名称」成对(D03/D21 属已登记偏差,不在范围内)
A7-2 主宫格 #funcGrid 混入 fc-b,或展开区 #funcExpand 出现 fc-a;主宫格无 fc-a FAIL D-2 类别配色(业务蓝 / 管理紫)/ D-3 蓝前紫后
A7-3 D30 缺 .im-tt 或 .t1/.t2 结构;.t2 仍为占位 — FAIL D-4 会话头部两行(身份 / 诊断);第一行未按「姓名 · 性别 · 年龄」拼接 → WARN
A7-3b .t1 内缺 .nm / .sub;或二者未显式声明 font-size/font-weight;或二者字号相同、粗细相同 FAIL D-4 第一行内层级:姓名重、性别年龄轻(赋值允许 textContent / innerHTML 两种写法)
A7-4 量化专病页缺 &lt;div class=&quot;trend-wrap&quot;&gt; / 趋势卡内无 KPI / 「最新上报数据」卡内仍含该指标词 / 两页 KPI 不同源 FAIL D-5 独立成趋势卡 / D-6 同源(配置 specialty_record 驱动,未配置则跳过)
A7-4b 趋势卡的显示上下文(处理页):① 静态 DOM 中出现趋势卡元素(未被 ?name= 条件控制);② 缺「按 ?name=/PT 动态渲染趋势卡」的证据(无趋势卡模板串 / 无生成函数 / 生成语句不在 if(!PT)return; 之后);③ 趋势卡模板里 KPI 写成字面量而非变量拼接(换患者不跟着变);④ 处理页出现指向自身的「上报处理 →」入口 FAIL D-5 上下文条款(趋势卡是单患者维度组件,全患者清单一律不得渲染)
A7-5 医生端标题栏同上(深色底字色非白 / 浅色底字色为白) FAIL D-9 同 B-14(与 A6-10 共用 _header_contrast())

> A7 组反向自测:对交付包副本构造 8 处缺陷(删 header-ico、fc-a→fc-b、.t2 改占位、删趋势卡、把指标词塞回「最新上报数据」、KPI 改一位数、把趋势卡写成静态 DOM、趋势卡 KPI 写字面量)→ 全部被抓(8/8);对已修复包正向跑 → 0 FAIL。
> A6 / A7 必须成对维护:此后凡新增一端的一致性规则,另一端同步评估是否有对称项 —— 避开「校验只长在被反馈过的那一端」的重复偏差(坑清单 R4-7)。
> ⚠️ 判定用「HTML 元素」而非「字符串存在」:A7-4 查趋势卡时须匹配 &lt;div class=&quot;trend-wrap&quot;&gt;,否则会被 CSS 里的 .trend-wrap{…} 规则误判为"已存在"(首版实测踩到)。
> ⚠️ A7-4b 反过来也要区分「静态元素」与「JS 模板串」:处理页的 &#x27;&lt;div class=&quot;trend-wrap&quot;&gt;&#x27;(带前导引号)是合法的动态模板,&lt;div class=&quot;trend-wrap&quot;&gt;(裸标签)出现在 HTML 区才是 FAIL —— 前者恰恰是正确做法(2026-10-05 D31 反馈固化)。
> ⚠️ A7-4b 的判据来源:趋势卡属单患者维度组件,而处理页默认态是全患者清单 —— 判错上下文会让"某个患者的曲线"冒充"这一屏的汇总",比不显示更误导(规范B §1.4 D-5 判定句式)。

A8 组明细(2026-10-01 新增 · 用户「D21 底栏高度不一致 / 各页预警徽标数值不一致」反馈的机器化;同日晚扩充 A8-1b「视觉口径」)

编号 判定 级别 对应规则
A8-1 带底栏的 D 页:.bottom-nav 写死 height / 缺 padding:6px 0;或 .nav-item 缺 padding:4px 0 / 字号非 10px FAIL D-7 底栏尺寸口径统一(不设 height,自然高 50px)
A8-1b 带底栏的 D 页视觉口径跨页比对:NAV_VISUAL_SPEC 规格表(4 选择器 × 25 项)逐项同值 —— 文字色 var(--tl)(禁硬编码)/ 上边框 var(--border) / 下圆角 / z-index / 选中态不得出现 font-weight / 徽章定位与 15px/15px/15px 与 font-weight:700;任一页缺项或缺值也 FAIL FAIL D-7 底栏视觉口径统一(按维度把关,不等用户逐条指出)
A8-2 带底栏的 D 页缺 .nav-badge;或各页徽标数值不一致 FAIL D-8 徽标齐备 + 全站同值
A8-3 D02 徽标 ≠ 其 WARNS 中 !handled 条数 FAIL D-8 徽标真值 = 预警列表「未处理」条数(识别不到 WARNS 命名时降级 INFO)

> A8 组反向自测:构造 6 类缺陷(导航条写死 height:62px、导航项 padding 回退 6px 0、导航项字号回退 11px、某页徽标改 5、删 D29 徽章、D02 徽标改 9)→ 6/6 全被抓;正向跑交付包 → 0 FAIL、INFO 报出「徽标全站一致:4(覆盖 D01、D02、D03、D21、D29)」+「= D02 未处理真值 4」。
> A8-1b 反向自测:构造 8 类缺陷(D21 文字色回退硬编码 #8aa3bc、D21 选中态加回 font-weight:600、D02 徽章回退 16px、D03 底栏 z-index 回退 100、D21 去掉下圆角、D29 徽章去 font-weight:700、D21 上边框回退硬编码、D03 .nav-item 缺 gap)→ 8/8 全被抓;正向跑交付包 → 0 FAIL、INFO「底栏视觉口径全站一致:25 项 × 5 页」。
> ⚠️ 自测脚本必须清 _CACHE:read_cached 是模块级缓存,反复改写同一路径的副本包时会命中旧内容,导致「规则明明生效却显示漏检」—— 每次 run() 前 _CACHE.clear()(首版自测踩到,8 例全假阴性)。
> A7-3b 反向自测:删 .sub 载体、把 .sub 字号改回 16px、粗细改回 700 → 3/3 全被抓。

A9 组明细(2026-10-03 新增 · 用户《逐页未完全修改审计》的机器化 · debind 配置驱动 · 分支 B 专用)

> 立组依据:审计在专属包上跑完 skill 后,60+ 页仍留有前序病种语义,而当时所有机器校验全绿 —— 因为 B1 组只查"旧值残留",而旧值(病种名)确实已经 0 命中了,残留的是没被列入旧值的那些词、以及旧概念与新病种名的共现。这是校验维度缺失,不是执行失误。

编号 判定 级别 对应 规范C 验收项
A9-0 prior_terms(🟢+🟡 全量)在全包命中 FAIL C-1 前序病种术语清零
A9-1 文件头注释(&lt;!-- --&gt;)内含 prior_terms(allow_comment 例外除外) FAIL C-2 ← 审计最高频载体
A9-2 同一文件内同时出现 target_terms 与 timeline_terms(时间轴口径未迁移) FAIL C-3
A9-3 conflict_pairs 任一对在同一文件共现(=「目标病种名 × 前序病种概念」,如「慢性胃炎术后需要扩肛」) FAIL C-7 ← 审计核心病
A9-4 镜像对未同步:mirror_pairs 中两端文件对同一 prior_terms 的命中集合不一致(一端 0 一端 >0) FAIL C-5 ← 审计整批镜像页落下
A9-5 dict_keys(前序病种专属字典键)在全包命中 FAIL C-8
A9-6 debind 未配置 INFO(整组跳过,不报错) —

> 为什么 A9-3 必须独立成条:pair_terms 查的是「旧值 ↔ 新值」共存,而这里的问题是「新值 ↔ 旧概念」共存 —— 旧值已经改没了,old_terms / pair_terms 都抓不到。审计里 慢性胃炎术后需要扩肛 这类串就是这么漏过去的。
> 为什么 A9-4 用"命中集合比对"而不是"逐字段比对":镜像两页的数据结构命名可能不同(B07 vs D18),逐字段比对会大面积误报;而"两端对同一批前序病种词的命中情况应当一致"是一条充分且低误报的代理判据 —— 一端清干净了另一端没清,一定命中不一致。
> A9 与 A3 的分工:A3(肛肠 / 痔病底版残留)是分支 A 专用的固定词表,不因分支 B 而扩充 —— 对某些目标病种(如肛肠科内换病种),创面 / 切口 / 术后 本身就是合法词,硬塞进固定词表会造成大面积误报。分支 B 一律走 A9 的配置驱动路径。

A10 组明细(2026-10-07 新增 · 用户「页面显示的今天都是 8 月 29 日」反馈的机器化 · 对照 规范B §5.4)

> 立组依据:模板以 2026-08-29 为「今天」编排全部演示数据,日期硬编码 → 页面永远显示 8 月 29 日。
> 改造方案 = 随包分发 assets/js/timeshift.js,页面加载时把数据按 今天 − 基准日 实时平移。

编号 判定 级别 对应规则
A10-1 页面未引入 assets/js/timeshift.js FAIL T-1 页面「今天」会停在数据基准日
A10-2 &lt;script&gt; 区内有未被 TS() / TS_RANGE() 包裹的完整日期字面量(注释除外) FAIL T-1 日期字面量必须经 TS()
A10-3 仍写死「今天」锚点:new Date(20xx, m, d) / return &#x27;20xx-xx-xx…&#x27; / TODAY_STR = &#x27;20xx-…&#x27; FAIL T-3 演示时钟须由 TS_TODAY() 派生

> A10 反向自测(2026-10-07,5/5 全过):① 正向对已转换模板 → 0 FAIL;② 删掉 timeshift.js 引入 → 抓到;③ 把一个日期还原成裸字面量 → 抓到;④ 恢复写死的 nowStamp() → 抓到(A10-2 与 A10-3 双报,同一缺陷的两面,属预期);⑤ 日期只出现在注释里 → 0 FAIL(不误报)。
> ⚠️ A10-2 的判定要用「剥掉 TS 调用后再找日期」:否则 TS(&#x27;2026-08-29&#x27;) 里的日期会被当成"未包裹"而全包误报。
> ⚠️ 注释里的日期必须放行:/* 数据基准日 2026-08-29 */ 是说明,不是显示值。
> ⚠️ TS() 的短格式守卫:10-14 天 / 10-15分钟 / 30-60% / 第 3-5 周 是范围量不是日期;但 09-02 周三 是日期 + 星期必须平移 —— 守卫要能同时满足这两侧(见 timeshift.js 内注释)。

A11 组明细(2026-10-07 新增 · 用户「用药打卡默认全部按周执行、不询问」裁定的机器化 · 对照 规范B §5.1)

> 立组依据:改造前的规则把「粒度」做成 Step 2 的待选项(日报 / 周报 / 月报),但 规范A 的 B06 / D12 执行清单里没有粒度项、review_pkg.py 也无对应校验 —— 决定接不住,会产出「日报粒度 × 周控件 ×「本周用药频率」文案」的自相矛盾页面。
> 现改为硬性按周:不再有需要承接的选择,同时用本组拦住"后人无意改回日/月口径"。

编号 判定 级别 对应规则
A11-1 用药打卡患者端页(默认按前缀 B06- 识别,可用 cfg.med_page 覆盖)未含 .week-picker FAIL §5.1 周粒度控件缺失
A11-2 该页出现 .time-picker / .day-picker / .month-picker FAIL §5.1 被改成按日 / 按月
A11-3 其他页出现 .day-picker / .month-picker FAIL §5.1 全包不得存在非周粒度控件

> A11 正反向自测(2026-10-07,6/6 全过):① 正向对模板 → 0 FAIL;② 删掉 B06 的 week-picker → 抓到 A11-1;③ .week-picker 换成 .time-picker → 抓到 A11-2;④ B06 加 .day-picker → 抓到 1 条(载体页不双报);⑤ 其他页 B04 加 .month-picker → 抓到 A11-3;⑥ B06 同时缺 week-picker 且含 .day-picker → 双报 2 条(同一缺陷两面,属预期)。
> ⚠️ 载体页判定用「前缀 + 可配置覆盖」,不写死文件名:cfg.med_page 优先,否则取 B06-*.html —— 与 A11-3 的分工靠"载体页跳过"避免同因双报。
> ⚠️ .time-picker 只在该页禁:B03-症状上报 的日期选择器就是 .time-picker,全包禁它会大面积误报。

A12 组明细(2026-10-08 立组 · ★ 2026-10-10 按用户裁定整体收窄 · docs 配置驱动)

> 立组理由不变:T3 交付物原先只有「这次改了什么」,没有一份「这页是什么」。
> 2026-10-10 的口径变化:文档不再逐页产出 —— 只在 ① 新增页 与 ② 结构级大改页(分区增删 / 骨架顺序变化)两种情况产出。据此 A12 组改为围绕「本次声明的需文档页清单」校验。

编号 判定 级别 对应 规范D
A12-1 声明的需文档页 → 文档必须存在:docs.required_pages 里的任一页缺 {去 .html}-A.md FAIL §二「什么时候产出文档」
A12-1b 文档目录缺失(required_pages 非空时)→ FAIL;声明页在包内查不到对应 html → WARN FAIL / WARN §二
A12-2 无对应页面的文档(多为页面已删除 / 改名)—— 新规则「删除页不用声明」,原样留档即合规 INFO(原为 FAIL) §7.2
A12-3 《更新说明》:文件不存在 / 行数 < 20 / 缺「页面 ↔ 文档」对照表表头 FAIL §八
A12-4 八节齐全:文档缺任一节名(逐字比)。「九、变更记录」已取消 FAIL §三
A12-5 篇幅:文档行数 < docs.min_lines(默认 350) FAIL §二
A12-6 版本与日期:缺「文档版本」行,或缺「生成日期」/「修订日期」行 FAIL §二 / §7.4
A12-skip docs 未配置 WARN(整组跳过) —
A12-req docs.required_pages 键缺失(未做「本次哪些页要文档」这一判断) WARN §七

> ⚠️ required_pages 必须显式声明(本次确实没有就写 []):「没声明」与「声明为空」是两回事 —— 前者是执行者漏做了这次判断(报 WARN),后者是「本次确无新增 / 无结构大改」(合法)。
> ⚠️ A12-1 已不再是「每页一份」:「页数 = 文档数」作废。包内文档数 < 页面数是正常状态,不得据此判交付不成套。
> ⚠️ A12 的已知局限(如实声明):required_pages 是执行时自声明的清单 —— 机器能保证「声明了却没写文档」必被抓(A12-1),做不到「该声明却没声明」(机器无从知道哪页是本次新增 / 结构大改的)。后半段靠人工:《更新说明》对照表 + 确认单 §7 + 交付前自检第一条,三处互证。
> ⚠️ 为什么 docs 未配置只报 WARN 而不是 FAIL:机器不能替人判断「这次是不是一次正式交付」——模板基线跑、中途试探跑都不该被文档缺失判死。但文档产出是交付硬要求,所以未配置时必须报 WARN,且在 Step 7.7 交付判定里作为人工必查项(配置了 docs 就必须 A12 组 0 FAIL)。不得把 docs 留空当成「跳过校验」的手段。
> ⚠️ A12 只管「有没有 / 齐不齐 / 对不对形」,不管「写得准不准」 —— 内容准确性由 check_docs.py(C1~C10:命名 / 八节 / 功能点连续 / 篇幅 / 模拟数据 / 占位符 / 小节 / 待收口项要素)与 L2 需求层的人工取证承担。两个脚本都要跑,不能互相替代。
> ⚠️ A6 / A7 / A8 / A9 / A10 / A11 / A12 / A13 / A14 的成对维护约定照旧:凡新增一类交付面,同步评估是否需要在别处加对称项。
> A12 正反向自测(★ 2026-10-10 收窄版重跑 · 15/15 全过):① 无目录 + required_pages=[] → 0 FAIL;② 无目录 + 声明非空 → A12-1 目录缺失 FAIL;③ 未声明 required_pages → WARN;④ 声明 2 页且都有文档 → 0 FAIL;⑤ 声明 3 页缺 2 份 → A12-1 FAIL;⑥ 声明页不在包内 → WARN;⑦ 孤儿文档 → INFO(不再 FAIL);⑧ 缺「八、验收自检清单」→ A12-4 FAIL;⑨ 文档含多余「九、变更记录」→ 不报;⑩ 文档 120 行 → A12-5 FAIL;⑪ 缺版本 + 缺日期 → A12-6 FAIL ×2;⑫ 更新说明无对照表 → A12-3 FAIL;⑬ 有对照表但无「版本」字样 → 不 FAIL(新口径已去掉该要求);⑭ 更新说明过简 → A12-3 FAIL;⑮ 目录空 + required_pages=[] → 0 FAIL。
> 零回归:skill 内置模板包跑 review_pkg.py → FAIL 80 / WARN 5,与改前完全一致(docs 未配置仍只报 WARN)。

A13 组明细(2026-10-10 新增 · 用户「B05 历史卡片还有 emoji 图标」反馈的机器化 · 覆盖三端 B·D·F · 坑清单 R1-33)

编号 判定 级别 对应规则
A13-1 静态图标位容器(class 含 ic/ico/icon/fic/mood/avatar)的直接文本内容为 emoji FAIL 规范B §0.5 第 4 条:图标位只能是 &lt;i class=&quot;fa-solid fa-…&quot;&gt;&lt;/i&gt;
A13-2 字符串字面量只由一个 emoji 组成(去掉 emoji 后无其他文字)→ 判定为「用 emoji 当图标」 FAIL 同上(补 A13-1 抓不到「运行时拼进容器」的洞)
A13-3 页面用到的每一个 fa-* 类名,在包内 assets/font-awesome/all.min.css(FA Free)里无定义 → 该图标 ::before 为空、渲染成空白 FAIL ★ 2026-10-11 新增(坑清单 R4-27:fa-scalpel / fa-gauge-low 是 Pro 专属,全包实测 5 页中招)。⚠️ 检测前剔注释(溯源注释会正当引用旧图标名);已登记偏差走 FA_GHOST_EXEMPT、以 WARN 报出不静默

> ⚠️ 不全文扫 emoji:toast 文案里的 ✓ / ⚠️、代码注释里的 ⚠️ 都是正常用法,全文扫描会大面积误报。判据是「这个位置是不是图标位」+「这个字面量是不是只有 emoji」。
> ⚠️ A13-1 的已知盲区(如实声明):只能抓静态写死在标记里的 emoji。若 emoji 是运行时拼进容器的(如 &#x27;&lt;div class=&quot;hist-mood&quot;&gt;&#x27;+icon+&#x27;&lt;/div&gt;&#x27;),容器源码里看到的是 JS 表达式 —— A13-2 正是为补这个洞而加(B05 就属于这种:emoji 存在 var icon 里)。
> A13 正向自测:对修复后的 skill 内置模板(46 页)→ 0 FAIL。反向:改动前的包跑旧版 review_pkg → FAIL 80 条中没有任何一条指向 B05 的 emoji(A6-4 的 &lt;i class=&quot;…&quot;&gt; 正则扫不到 .hist-mood)—— 这正是 R1-33 记录的「结构盲点」。

A14 组明细(2026-10-10 新增 · 用户两次要求:「加规范」把图标规格变成机器判据 →「历史数据的各个卡片的样式也不一样,这个也要进行统一规范」· 规范B §3.3.3 · 坑清单 R3-14 / R3-15)

编号 判定 级别 对应规则
A14-1 图标规格漂移:.his-ic 的 width/height/border-radius/font-size 四项逐项与基线 34/34/10/14 比对,不符或缺声明 FAIL 规范B §3.3.3
A14-2 旧形态回归:.his-ic / .his-card 规则里出现 border-radius:50%(圆形)或 linear-gradient(实心渐变底) FAIL 同上(B03 2026-10-10 前的形态,不得改回)
A14-3 未登记同类新类:形如 his*/hist*/hic* 且确为「显式宽高 + display:flex」的方块图标容器,却不在基线表 WARN 同上(新页须登记,改脚本基线或配 hist_icon.extra)
A14-4 卡片骨架规格漂移:.his-card/.his-top/.his-t1/.his-t2/.his-time 的关键属性(圆角 / 内边距 / 间距 / 边框 / 阴影 / 字号 / 字重 / 虚线分隔)逐项与基线不符;或用了 .his-card 却缺骨架类规则 FAIL 规范B §3.3.3「逐项数值」表
A14-5 旧类名残留:五页出现本轮废止的旧类名(B03 .hitem/.hicic/.hicbody/.hicl1~3/.hlist-empty;B05 .history-item/.hist-*;B06 .his-fic/.his-freq/.his-med;B11 .his-item/.his-info/.his-r1/.his-state;D19 .hist-*) FAIL 规范B §3.3.3「禁止项」表(改造不彻底的兜底)

> ⚠️ A14 与 A13 是两层:A13 管「用什么图标」(FontAwesome 而非 emoji),A14 管「图标与卡片装成什么形态」。两组都要过,不能互相替代。
> ⚠️ A14-1 / A14-4 只认纯单类选择器(.his-ic{…})—— 复合选择器(.his-t1 .big{…})是页内局部修饰,不构成该类的基础规格,由 A14-2 单独把关。
> ⚠️ A14-4 与 A14-1 不重复报 .his-ic:图标四项由 A14-1 专管,A14-4 只比对另外五类(同一缺陷只报一次)。
> ⚠️ A14-5 必须先剔除注释再扫 —— 「某类已于某日删除」这类变更溯源注释里会正当引用旧类名(B03/D19 都有),不剔除必然误报成残留。JS 行注释用 (?&lt;![:/])// 匹配,避免把 https:// 当注释起点。
> ⚠️ 基线真源是 规范B §3.3.3:改规格必须先改那一节、再改 review_pkg.py 的 HIST_ICON_SPEC / HIS_CARD_SPEC / HIS_OLD_CLASSES。两处不同步,校验会拿旧规格判新页面。
> ⚠️ A14 只证明「类名与数值对得上」,不证明「取色语义对」 —— B03 的「图标色 == 卡片左侧竖线色」仍属人工验收项。
> A14 正反向自测(2026-10-10 扩组后,11/11 全过):正向对 skill 内置模板(46 页)→ 0 FAIL / 0 WARN,INFO 报「骨架类名命中 his-card、his-ic、his-t1、his-t2、his-time、his-top」;反向构造 → 全抓:B03 图标宽 36px(A14-1 单报)· B05 卡片圆角 10px · B06 主行字号 13px · B11 旧类名 .his-state 残留 · D19 缺 .his-t2 规则(骨架不完整)· D19 图标渐变底(A14-2)· 未登记新类(A14-3 WARN)· .his-time 改实线 · B03 旧类名 .hitem 残留。
> 两项「应不报」也验过:① 注释里引用旧类名 → 不报;② 改非骨架类 .his-tag 的圆角 → 不报(骨架只管骨架)。
> ⚠️ 反向自测的两个坑(本轮踩到):① 必须每次 subprocess 独立跑(read_cached 缓存);② 造缺陷要按「规则块内改属性」定位 —— 直接 str.replace(&#x27;border-radius:10px&#x27;, …) 会命中该属性在文件里第一次出现的位置(往往是别的组件),造出的"缺陷"根本没落在被测类上(首版 4 例因此假阴性)。

A15 组明细(★ 2026-10-11 新增 · 需求 4「Excel 生成量表能力冻结」的机器化)

> 立组依据:用户裁定「去掉通过 excel 生成量表的功能提问选项……保留生成量表页面的功能,但不向用户展示,也不执行」。
> 该能力在模板里的唯一真实入口是 F11-量表管理-管理端.html 的「导入题目 / 从Excel导入题目 / 下载模板 / 上传解析」整套面板 ——
> 删掉它,规则才自洽;不删,下一次注入又会有人把它用起来(规范与页面口径分裂)。

编号 判定 级别 对应规则
A15-1 F11(可用 cfg.scale_admin_page 覆盖,默认按前缀 F11- 识别)静态 DOM / JS 出现 Excel 生成量表入口 —— 文案 导入题目 / 从Excel导入题目 / 下载模板 / 导入量表 / 确认导入到编辑器 / 点击上传或拖拽Excel 任一;或 &lt;input type=&quot;file&quot; 配 .xlsx / .xls accept;或 .upload-zone 容器 FAIL Step 4.7.4
A15-2 该页仍依赖外部 xlsx 库:xlsx.full.min.js / unpkg.com/xlsx / XLSX. 调用任一 FAIL 同上(能力已冻结,页面不得再依赖该库)

> ⚠️ A15 只管「Excel → 量表」这一条链路:不禁止其他页面用 Excel 做数据导出(F03-数据下载 的导出能力属独立功能,不在本组范围内)。
> ⚠️ .upload-zone / .uz-* 类名只在 F11 内属本组管辖 —— 其他页另有上传控件(如患者端 B11 上传资料)不受影响。
> ⚠️ A15 与 A13 / A14 的关系:A15 管「某个能力该不该出现在页面上」,A13 管「图标用什么」,A14 管「卡片长什么样」—— 三组各管一层,都要过。
> A15 正反向自测(2026-10-11):正向对改造后的 F11 → 0 FAIL;反向对改造前的 F11 → A15-1 / A15-2 双报;对 F03-数据下载(合法含 Excel 导出)→ 0 FAIL(不误报)。

7.2 取证纪律(禁止凭印象)

每条复核结论必须附四类证据之一:

  1. 脚本输出(verify_pkg.py / review_pkg.py)
  2. 与备份的 difflib 逐行 diff
  3. 关键词命中数(改前 vs 改后)
  4. 无头实测结果或截图

> 「我记得改过了」不构成证据。未取证的条目一律记为「未复核」,不得计入通过。

7.3 复核清单(逐项打勾,未勾即未过)

7.3.1 需求层
- [ ] Step 5 确认单中每一条都有一条复核记录(条目 → 证据 → 结论)
- [ ] 用户明确要求「保留不动」的项,确认确实没动(diff 佐证)
- [ ] 用户明确要求「停用 / 删除」的项,确认入口、索引、TSV、计数四处都已同步

7.3.2 规范层
- [ ] 未向用户建议新增功能页(★ 2026-10-11 铁律)—— 本次执行中提出的建议项全部落在现有页面内;若确有新增页,动议来自用户(Step 3 硬约束 4)
- [ ] 未打包、未自行改版本号(★ 2026-10-11 铁律 T0-d)—— 除非用户明确说了「打包 / 封版 / 提交 / 上架」或给出版本号
- [ ] 规范A 对应页的必改项全部落实(配置项 B1/B2/B3 全过)
- [ ] 编码层(第 3 步)已清:糖尿病底版 / 肛肠底版 / 真实姓名 全包 0 命中(A1/A2/A3)
- [ ] 旧值在全包范围内为 0(不只本次改过的页)
- [ ] 新值在全包范围内确实出现(防漏改)

7.3.3 铁律层(T1)
- [ ] 改动都能对应到需求里的一句话(不能对应的=越界改动,回退)
- [ ] 无新增未明确元素(图标 / 字段 / 按钮 / 区块 / 标签 / 文案 / 颜色 / 层级)
- [ ] 无删除 / 合并 / 重排既有元素
- [ ] 未改布局与排版格式(网格列数 / 分区顺序 / 间距 / 对齐 / 卡片结构)
- [ ] 有疑问处都先问过用户,未自行补位

7.3.4 一致性层
- [ ] B04 ↔ D26 四组数据逐字符一致
- [ ] 量表库六处(B07 / D13 / D15 / D19 / D04 / D30)同名量表措辞一致
- [ ] 报告链路(B07 RPT_OF → B14 REPORTS → B15 DATA → D27 REPORT_SETS → D28 DATA_BY_PT)id 与名称对得上
- [ ] 报告详情「两类内容分派」(2026-10-09 用户裁定):B15 / D28 每条报告带 type(scale / complex);量表评估报告只渲染 ① 量表评估与报告、三块(②综合评估 + ③体征监测 + ④用药打卡)只在 type:&#x27;complex&#x27; 渲染;量表报告条目不含 score / rows / monitor / med。验收:抽 ?id=sc1 只看到一块、抽 ?id=cp1 四块齐全(对照 规范A 15-6b / 21-5b / 25-27,根因见 坑清单 R1-29)
- [ ] 症状通道(B03 ↔ D01 ALARMS ↔ D11)同源
- [ ] 宣教(B10 ↔ D23 CONTENTS ↔ D30 EDU_LIB)同源
- [ ] 日程(B08 ↔ B09)同源 —— ⚠️ ★ 2026-10-11 起医生端日程已下线:D04 的日程区块、D25 的入口均已删除,本条不再比对 D 端
- [ ] 患者后端 → 医生端承接成对齐全(新增上报页必有医生端三段承接)
- [ ] 患者端 UI 口径一致(A6 组 0 FAIL):标题栏无副标题 / 无计数;历史区块 fa-clock-rotate-left + 历史数据 全包唯一;二级页标题栏背景唯一、文字颜色与背景明暗匹配(深底白字);铃铛角标 = 待办数量
- [ ] 图标一律 FontAwesome(A13 组 0 FAIL):全包三端无 emoji 充当图标 —— 图标位容器内容必须是 &lt;i class=&quot;fa-solid fa-…&quot;&gt;&lt;/i&gt;;「只由一个 emoji 组成的字符串字面量」一律视为违规(规范B §0.5 第 4 条);★ 且每个 fa-* 类名必须在包内 FA Free 的 all.min.css 里有定义(A13-3,防 Pro 专属图标渲染成空白 —— 坑清单 R4-27)
- [ ] 历史卡片新骨架(★ 2026-10-11 二次统一):四个上报页(B03/B05/B06/B11)的卡片 —— 行2 无图标列(.his-ic 已删)、内容左对齐;卡片右上角有审核状态标签(待审核 / 已审核 / 已驳回,四页三态齐备);右侧有删除按钮(.his-del,图标形式无文字、垂直居中跨行2/行3);行1 周范围前带「第 x 周」;已驳回不显示驳回理由;行1/行3 其余口径不变(规范B §3.3.3)
- [ ] 历史卡片删除交互(人工验收):仅 待审核 态可点删除 → 弹确认 → 真删(数组移除、列表实时减少);已审核 / 已驳回 态按钮置灰不可点
- [ ] 历史卡片「统一骨架」跨页一致(A14 组 0 FAIL):三页(B03/B05/B06/B11 + 医生端 D19)均为卡片形态、类名与结构同为一套 .his-* —— .his-card 圆角 14px / 内边距 11px 12px / 间距 9px / 1px 边框 + 阴影;.his-ic 34×34 / border-radius:10px / font-size:14px;主行 14px/700、副行 12px、时间行 11px + 1px dashed 虚线分隔;无圆形 / 无渐变实心底 / 无旧类名残留;新增含历史数据的页直接复用 .his-*(A14-3 报 WARN 即为未登记)—— ⚠️ 取色语义(如 B03 图标色 == 卡片左侧竖线色)仍属人工验收项(规范B §3.3.3)
- [ ] 时间基准(A10 组 0 FAIL):每页引入 assets/js/timeshift.js;日期字面量全部经 TS()/TS_RANGE();nowStamp() / demoNow() / OP_DATE 均取真实当前时间(规范B §5.4)
- [ ] 用药打卡粒度(A11 组 0 FAIL):B06 含 .week-picker 且不含 .time-picker;全包无 .day-picker / .month-picker —— 用药打卡硬性按周,未把选择做成待选项(规范B §5.1)
- [ ] 健康日记打卡区排序(A6-11 0 FAIL):B05 中病种专属打卡项在前、通用项(运动/睡眠/体重…)在后;新增专属项插到最顶(规范B §5.3)
- [ ] 规范B §2.4「十四条硬规则」逐条打勾(B-7 / B-8 / B-10 为人工验收项)
- [ ] 医生端 UI 口径一致(A7 组 0 FAIL):一级页标题栏「图标 + 名称」成对;宫格业务蓝在前、管理紫在后;会话头部两行(身份 / 诊断)且第一行姓名 / 性别年龄分级;量化专病指标独立成趋势卡;标题栏文字颜色与背景明暗匹配(深底白字)
- [ ] 趋势卡只在单患者上下文出现(A7-4b 0 FAIL):D04 显示;处理页仅带 ?name= 时由 JS 动态插入,默认全患者清单不渲染;KPI 由当前患者记录派生(无字面量)
- [ ] D 端底栏与全局徽章一致(A8 组 0 FAIL):五页底栏尺寸 + 视觉口径同款(25 项,实测均 50px 且计算样式 90/90 一致);「预警」徽标五页齐备且同值 = D02 预警列表「未处理」条数
- [ ] 量化专病指标数据同源:患者端打卡页 ↔ D04 ↔ 处理页(单患者上下文),KPI 数值逐字符一致、曲线点数 = 患者端历史条数;处理页换 ?name= 时 KPI 随之变化
- [ ] 规范B §1.4「九条硬规则」逐条打勾

7.3.5 交付物层
- [ ] 甲层 · 成套产物齐备(重点项,2026-10-08 起;★ 2026-10-10 收窄):① 服务包页面 ② 产品功能清单/ 按需产出的文档 ③ 更新说明-YYYYMMDD.md(含「页面 ↔ 文档」对照表 + 本次文档产出小结)
- [ ] 本次新增页都写了文档;结构级大改页(分区增删 / 骨架顺序变化)已整篇重写;其余改动过的页未产出文档(这是对的,不是漏);删除页未加作废声明(新规则允许)
- [ ] required_pages 已在临时复核配置里显式声明(本次无新增页、无结构级大改则写 [])
- [ ] 邻页文档跟着改过:新增 / 删除页导致的出链、入链变化已同步进对应邻页文档 §四
- [ ] 量表页配套(条件项 · ★ 2026-10-11 收窄):仅当包内存在 scale/*.html(即用户主动提交了量表文档)时才是必查项 —— 此时每张 scale/*.html 都要有同短名的 scale/*.md 报告生成提示词,check_scale_docs.py 退出码 0,《更新说明》已登记;包内无 scale/ 时本项不适用、直接视为通过(默认路径下不再产出 scale/)
- [ ] F11 无 Excel 生成量表入口(A15 组 0 FAIL)(★ 2026-10-11)—— 该能力已冻结,不得展示、不得执行
- [ ] 包外唯一产物齐备(★ 2026-10-09):本次注入-更新范围确认单.md 已出,§1–§7 按分支填全(分支 B 另含 §8);包外目录里不得出现任何其他文件 —— 台账 / 改动摘要 / 校验报告 / 缺陷登记 / 复核配置 / 源包判定单 / 资产清单 / 术语三色表 / 残留矩阵均已取消
- [ ] 备份存在,回滚命令已与用户确认可用

7.3.6 解绑验收层(仅分支 B,逐条过 规范C §10)
- [ ] C-1 前序病种术语(🟢🟡 全量)全包 0 命中(白名单例外逐条登记并写明理由)—— A9-0
- [ ] C-2 文件头注释 0 命中前序病种术语 —— A9-1
- [ ] C-3 时间轴口径全包唯一,无前序口径残留;文案 ↔ 数值 ↔ data-* 三者一致 —— A9-2 + 人工数值比对
- [ ] C-4 残留矩阵每一行的处置都已完成并取证,无"未复核" —— 对照确认单 §8.3 逐行打勾
- [ ] C-5 镜像对全部成对同步,同源字段逐字符一致 —— A9-4
- [ ] C-6 删除页同步齐全(文件 / 入口 / 索引,+若包内有页数计数器则含计数)—— 人工核对
- [ ] C-7 无「目标病种名 × 前序病种概念」共现 —— A9-3
- [ ] C-8 无前序病种字典键与注释残留;后端标识(model_version / model_code)未被误改 —— A9-5 + 人工
- [ ] C-9 专属内容资产群(问卷 / 科普 / 病历模板 / 量表题库 / 标签库 / 科研队列 / 预警类型 / 随访模板)已按处置清单完成 —— 对照 Step B1 第 2 类清单

7.4 发现问题的处置(就地闭环)

  1. 立即修复该处(不攒到最后)
  2. 判定回归范围:
问题性质 必须重跑
单页文案 该页相关项 + L1
数据 / 结构 L1 + L3 + L4
跨页同源数据 L4 全组 + L1
编码层标识符 A2/A3 全包复跑 + L1
改动到页面的分区结构 / 骨架顺序(分区增删、骨架重排) L5 文档层:该页文档整篇重写(规范D §七)+《更新说明》登记 + check_docs.py + A12 组
仅改动数据 / 样式 / 文案 / 功能点 / 链路(分区与骨架未变) 不产出文档;L5 只需对包内已有文档跑一次 check_docs.py + A12 组(required_pages 通常为空)
本次新增页面 L5 文档层:为新增页新写文档 +《更新说明》对照表 + 正文补进 required_pages
本次删除页面 不需要做任何事(★ 2026-10-10:删除页不用声明)—— 其文档原样留档
  1. 重新取证;不得跳过重跑直接标记通过

7.5 根因追查(RCA)—— 「不要一个错误多次犯」

每个缺陷必须归因到四类之一:

代号 类别 回写对象 是否需用户确认
R1 规范 / 清单缺失或歧义 references/规范A / 规范B / 规范D / 规范E(均为 skill 内本地资产,无外部正本) 需确认
R2 数据语义错位(文案改了数值没改 / 多处拷贝不同步 / 映射键没改) 同上 需确认
R3 执行手法错误(锚点 / 拼接 / 正则 / 选择器) references/坑清单-已知缺陷与防复发.md 自动追加
R4 校验手段不足(没查到 / 只查了单页) scripts/review_pkg.py 规则 自动补充并告知

判定顺序(逐层问,问到即止)

  1. 清单 / 规范里有没有写这一项?→ 没写 = R1
  2. 写了但含义有歧义、或与源码不符?→ R1
  3. 规范没问题,是数据语义没对上(文案 / 数值 / 映射键)?→ R2
  4. 规范没问题、数据也对,是执行时写错了(锚点 / 拼接 / 正则 / 选择器)?→ R3
  5. 前面都对,但复核时没查出来(是用户或后来才发现的)?→ R4

回写落地(必须做,否则等于没追根因)

  • R3 → 在坑清单对应类别追加一条(症状 / 根因 / 防复发 / 取证)
  • R4 → 在 review_pkg.py 补上能查出该问题的规则,并用已知样本自测(如 sm10 / 患者01)
  • R1 / R2 → 产出「建议回写内容」;等用户确认后再改 skill 内的规范文件(规范A / 规范B / 规范D / 规范E)
  • R3 / R4 类直接追加进 references/坑清单-已知缺陷与防复发.md(skill 自身资产,属工具维护);不再另出缺陷登记文件 —— 结论在对话里给出
  • ⚠️ 复核发现的每个问题都要有落点:要么进坑清单、要么进确认单、要么在对话里说清 —— "发现过但没记录"不算完成

根因记录字段(写进坑清单条目;不再单独成文件)

# 现象(含页面/行) 根因类别 影响面 修复 防复发措施 已回写 证据

7.6 复发判定与机制升级

  • 坑清单里已登记过的坑再次发生 → 判为机制性缺陷
  • 处理:停下,向用户报告三点 —— ① 该坑已登记却仍复发 ② 现有防复发措施为什么没拦住 ③ 2–3 个备选机制方案;用户选定后再继续
  • 同一 R 类在单次注入中出现 ≥ 2 次 → 同样按机制性缺陷处理
  • 禁止:把复发问题当新问题重新登记一遍了事

7.7 交付判定(全绿才交付)

项 要求
verify_pkg.py 退出码 0
fetch_fonts.py check(T0-b) 退出码 0;交付包内 assets/font-awesome/ 需含全部字体 —— 字体缺失时走本地字体的页面图标静默全废,且现有校验脚本都查不出来
review_pkg.py A 组 0 FAIL;B 组按配置全过
review_pkg.py A12 组(文档产出)★ 0 FAIL(docs 未配置时整组跳过并告警;交付时必须已配置,且 required_pages 已显式声明)
review_pkg.py A13 组(图标一律 FA) 0 FAIL(三端无 emoji 充当图标)
review_pkg.py A14 组(历史卡片统一骨架)★ 0 FAIL;A14-3 的 WARN 须逐条判清:确属历史卡片行前图标 → 补登记(并同步 hist_icon.extra);确属其它组件的同名巧合 → 登记进 hist_icon.exempt_classes。不得留悬空 WARN
check_docs.py(文档内质)★ FAIL 项 0
check_scale_docs.py(量表配套)★ 退出码 0(包内无 scale/ 时视为不适用、直接通过)—— 作答页 ↔ 报告提示词一一对应 + md 骨架 / 变量 / 必含句 R1–R8 / 五段 / 两附 / 示例隔离 / 自包含 / 篇幅 + 事实底稿取自本页
甲层成套产物(页面 / 按需文档 / 更新说明)★ 三者齐备:本次新增页与结构级大改页都有对应文档;《更新说明》含「页面 ↔ 文档」对照表 + 本次产出小结(0 份时已写明)。⚠️ 文档数 < 页面数是正常状态
review_pkg.py A9 组(分支 B) 0 FAIL(debind 未配置时整组跳过)
L2 需求层 确认单逐条有证据,无「未复核」
L4 一致性层 0 FAIL
L5 文档层 ★ 0 FAIL(=上三行之和:A12 组 + check_docs.py + 甲层三者齐备)
解绑验收层(分支 B) C-1 ~ C-9 全过
缺陷的根因落地 每个缺陷都有根因类别 + 防复发措施 + 证据,并已写进 references/坑清单(或在对话里说清落点)
备份 / 回滚 备份存在,回滚命令已确认

任一不满足 → 不得交付,回到对应步骤。
通过后:更新台账为「已完成」,交付甲层成套产物 + 乙层六份交付物 + 复核结论摘要(含 WARN 项与「已知接受项」)。


交付后再变更(增量同步 · 2026-10-08 用户硬要求)

> 用户原话:「如果用户生成完后,又修改了某些 html 页面,或新增了 html 页面,也执行相同的操作。」
> 即:交付不是终点。页面再变一次,就按 6.7.1 重新判一次「要不要产出文档」 —— 只有命中「新增页 / 结构级大改」才产出(重写的文档升一版),其余改动不动文档。《更新说明》每次都要出。

触发条件(任一命中即走本节):

触发 例子
用户改了某个已交付的 html 页面 调整某卡片的字段、改状态机、改文案结构
用户新增了 html 页面 加一个病种专属上报页 + 医生端承接页
用户删除 / 停用了页面 摘掉某入口页
用户改了包内共用的 JS / CSS / assets 改 timeshift.js 基准日

执行路径(不对重走 Step 1–5 —— 需求已定,只跑变化面):

步 做什么
① 重新入闸 跑 detect_source_pkg.py 留证(包已成型,仍须留证);读 本次注入-更新范围确认单.md(§1 判定 + §5 范围)恢复上下文
② 差异盘点 与上一次交付的包副本做 diff -rq,逐页确认"用户改了什么" —— 用户未提及的改动一律先问(同 Step 6.1)
③ 范围确认 只需确认变化面的档位(通常 1~2 档),并把变化项登记进 本次注入-更新范围确认单.md 的续页;变化面含"用户要加新功能"时,Step 4.1 / 4.2 两道闸门照走(功能清单只列变化面涉及的两端页;新增需求必须走完需求卡 → 回读 → 「正确」确认)
④ 备份 改动前整体备份为 &lt;包目录&gt;_bak_YYYYMMDD_HHMM(同上一次交付的包一起备份,便于回退到任一版本)。不需要再复制文档基线(2026-10-10 起不做基线比对)
⑤ 改页面 按 T1 / T1-b 与 规范A / 规范B 执行;新增页必须成对(患者端上报页 ↔ 医生端三段承接)
⑥ 文档按需产出 按 6.7.1 判(只认两条结构变化):新增页 → 写文档(版本 A);分区增删 / 骨架顺序变化 → 整篇重写该页文档(升一版);其余改动一律不产出文档(数据 / 文案 / 样式 / 功能点 / 链路)。不做基线比对、不做全量重写、删除页不声明
⑦ 更新说明 新出一份 更新说明-YYYYMMDD.md,只说明本次新生成了哪些 md 文档(「页面 ↔ 文档」对照表 + 本次产出小结;0 份时写明「本次无新增页、无结构级大改,未产出文档」)
⑧ 复核 L1~L5 全跑(verify_pkg.py / review_pkg.py --config(含 docs 块)/ check_docs.py / 无头实测);A12 组 0 FAIL、A13 组 0 FAIL、A14 组 0 FAIL(A14-3 的 WARN 逐条判清)
⑨ 交付 交付新版成套产物,并在台账追加一条版本记录

硬约束

  • ⚠️ 不得跳过文档产出:本次新增页 / 结构级大改页没写文档 = 不成套,不得交付;反过来说,非这两种情况的页面改动不需要、也不应该产出文档
  • ⚠️ 不得整批重写文档:重写会抹掉 §九 变更记录与 §五 的"已于某日处理"标注,追溯链断掉
  • ⚠️ 不得顺手补齐文档:改了数据 / 样式 / 文案 / 功能点的页就是不该产出文档;「既然打开了顺手补一份」属违规(规范D §七)
  • ⚠️ 不得只改文档不改页面:文档是页面的描述,页面是事实来源(规范D §五);发现文档与页面不符,先确认哪个是对的,再问用户
  • ⚠️ 版本号只增不减:A → A2 → A3;不得复用已用过的版本号
  • ⚠️ 变化面里若含跨页同源数据(同源键 / 量表库 / 报告链路 / 宣教库 / 患者端日程),按 7.4 回归范围跑 L4 全组

中止与异常处理

情况 处理
用户要求与 T1 冲突(如要求改布局排版) 先说明冲突,取得用户明确授权后方可例外执行;授权须记入台账
联网检索不到医生姓名 如实说明,保留占位符,不臆造
用户未回答数据来源 / 未确认档位 不得执行档位 2 及以上
用户要求跳过 Step 4.1 功能列表确认、直接开做 停下说明:4.1 是强制闸门(2026-10-08 用户硬要求),须先把两端功能清单列全并取得确认;不得以"模板够用""不用看了"为由跳过
用户提出要加新功能但未取得二次确认(未答复"正确") 停下:先按 4.2.2 把要素追问齐 → 4.2.3 出需求卡 → 4.2.4 回读并取得「正确」答复;不得按自己的理解先做、不得"先做一版给你看"
用户对需求卡的回复是"差不多""大概对" 不算通过:按 4.2.4 重新回读,逐条问「这一条对不对」,直到拿到明确的「正确」或逐条修订结论
用户要求用药打卡按日 / 按月 停下说明:本 skill 用药打卡硬性只允许按周(2026-10-07 用户裁定,规范B §5.1);不得改为 .time-picker / .day-picker / .month-picker。确需改口径须先经用户明确授权并改 skill 规则,不得就地改页面
用户未说明源包来源(自带目录 / zip / 内置模板) 停下问,不得默认取内置模板(可能覆盖用户既有成果)
源包与内置模板的差异涉及用户未提及的改动 停下报告,逐页确认后再继续
源包页数与基线不符(46 页以外的页数体系) 以源包实际文件清单为准,重新核对基线并写入台账;不得按任何固定页数口径凭空补页
源包内出现 A01* 文件 停下问用户(与「A01 已删除」的既定基线冲突),不得自行处置
有人要求就地修改模板本体 拒绝;改为 cp -R 复制到用户指定目录后再改,模板保持只读基线
执行中发现未预期的既有改动 停下报告,等用户裁决
用户中途改变需求 更新台账,回到受影响的最早步骤重走
页面数与基线不符 以实际文件为准,先与用户核对再继续
发现规范与源码不一致 以源码为准,并在交付摘要中记录该不一致
复核不通过 就地修复 → 按 7.4 回归范围重跑 → 重新取证;不得跳过重跑直接标记通过
已登记的坑再次复发 判为机制性缺陷:停下报告(坑 + 为何没拦住 + 2–3 个备选机制方案),等用户选定
同一 R 类出现 ≥ 2 次 同上(按机制性缺陷处理),不得当新问题重新登记了事
复核发现越界改动(违反 T1) 回退该处,并按根因写进 references/坑清单(R3 执行手法 / R1 规范歧义)
源包类型不可判定 / 判为混合 停下问用户,不得猜测分支(判错分支 = 后面全错)
分支 B:用户未给出前序病种名 停下;前序病种名必须明确,否则无法建立词表
分支 B:三色分类里两色拿不准 按黄处理(从严),逐处上下文判定;不得降级为绿直接全局替换
分支 B:发现包内还有第三个病种残留 停下报告(该包是多次改动叠加),等用户裁决
分支 B:某页解绑后与目标病种语义冲突 停下问用户,不得自行取舍
分支 B:包内出现接口驱动的数据块 停下报告:本 skill 只处理静态包,接口包不在范围内,不得按静态包继续
镜像对只改了一端 视为未完成,不得进入复核(A9-4 机器判定)
T0 门禁未通过 立即中止:不读 references/、不跑 scripts/、不进入 Step 0。向用户索取口令并 unlock;用户不给口令 = 不执行。不得猜口令、不得手工构造授权标记、不得把口令写进任何产物或回复
gate.py unlock 报口令错误 记为失败 1 次并如实告知「口令不正确(已试 N/3)」;允许再试,累计达 3 次即终止,明确告知「口令不正确,无法继续执行本 skill 的任何步骤」。不得连续试错、不得遍历、不得降低校验(如临时改脚本跳过校验)
口令已错 3 次后用户仍要求继续 不执行。可说明:3 次上限是作者设的硬停线;若用户确为作者,请其核对口令,或由作者执行 python3 scripts/gate.py reset 后重新走 T0(AI 不得代改授权标记)
T0-c 更新检查退出码 2(离线 / 接口异常) 不阻断:如实告知「本次未能检测到更新」,继续 T0-b;不得因此停摆,也不得谎报「已是最新」
T0-c 提示「本地版本高于平台」 按「已最新」处理,把警告原样告知用户(通常是本地有未上架的改动);不得执行覆盖 —— install --force 会删目录重解压,本地改动全丢
检测到有更新、用户不同意现在更新 台账记一行「用户选择暂不更新(本地 X / 平台 Y)」,继续本流程;不得反复追问
用户同意更新,但整目录备份失败 停止更新:无备份即不可回退,不得执行 install --force。先解决备份失败原因(磁盘空间 / 权限),或改由用户手动更新
更新执行失败(下载失败 / 解压失败 / 校验不过) 就地回滚:用备份整目录覆盖回原 skill 目录(rm -rf &lt;skill&gt; &amp;&amp; cp -R &lt;备份&gt; &lt;skill&gt;),复跑 gate.py check 与 fetch_fonts.py check 确认可用;失败原因与回滚结果如实告知
更新成功(版本已变为平台版) 停下,提示用户重开一轮对话 —— 本轮上下文里加载的是旧版规则,新旧混用会出错;台账记「已升级 X → Y」
F11 出现 Excel 导入量表的入口 删除(★ 2026-10-11 能力已冻结)—— 该入口是「通过 Excel 生成量表」的唯一真实载体,留着与用户裁定矛盾;改完跑 review_pkg.py A15 组确认 0 FAIL
用户主动提交量表文档、但文档缺项(仅冻结路径下适用) 逐项追问,不得自行补位(选项数不匹配 / 无计分规则 / 反向计分未标 / 多选上限 / 李克特档位 / 分值区间解读 —— 清单见 规范E §2.2)
提交的量表文档是 PDF 扫描件 / 双栏混排 逐页阅读核对,必要时请用户提供 Excel/Word 或文字版;不得凭版式猜题数;解析不确定处一律回读确认
用户对量表解析的回复是"差不多""基本对"(仅冻结路径下适用) 不算通过:按 4.7-附 ② 重新回读、逐条问,直到拿到明确「正确」或逐条修订结论;未取得「正确」前不得生成任何页面
用户要求把 scale/ 量表页做成 B/D 编号页 先说明口径:scale/ 是按文档增生的附属页,不进编号体系(规范E §一)。若用户确要纳入编号体系,须取得明确授权,并同步改 review_pkg.py 的 A12-1 口径与确认单,不得就地改完就走
用户要求"先别管门禁""帮我跳过" 不执行。可说明:门禁是作者设的使用授权,AI 无权重写授权状态;若用户确为作者,请其用正确口令 unlock(忘记口令则先 gate.py reset 再重新输入)
交付后用户又改了 / 又加了页面 走「交付后再变更」:按 6.7.1 重判一次 —— 新增页必须写文档;结构级大改页重写文档;其余改动不产出文档;《更新说明》每次都要出
发现文档与页面不符 停下:先确认是页面错还是文档错,再问用户;不得自行按文档改页面、也不得按页面改文档
新增了页面但未补文档 视为未完成交付(A12-1 机器判定);提示用户需补文档后才可交付
页面被删了 不需要做任何事(★ 2026-10-10 用户裁定「删除页面也不用声明」):其文档原样留在包内即可,A12-2 只报 INFO
某页改了却没产出文档,用户问是不是漏了 按 规范D §二 解释:只有「分区增删 / 骨架顺序变化」才产出文档;数据 / 样式 / 文案 / 功能点增删类改动本来就不产出 —— 这是规则,不是遗漏
用户要求"先交页面,文档回头再说" 说明冲突:本次新增页 / 结构级大改页的文档是成套交付的组成部分(2026-10-08 用户硬要求)。取得用户明确授权后方可先交页面,且交付时必须声明"本次文档未产出,本版不成套"。⚠️ 若本次本就不该产出文档(无新增页、无结构级大改),则不存在"缺文档",不适用本行

不适用场景

场景 说明
单页纯文案修改 直接改,不必走 Step 0–7 流程。且不需要动文档(★ 2026-10-10:只有分区增删 / 骨架顺序变化才产出文档;纯文案修改不属于)
纯诊断 / 评估需求 走其他 skill
无任何模板的全新系统 本 skill 依附于既有服务包(通用型 或 病种专属成品包);从零建包不适用
涉及真实患者数据 需先匿名化,本 skill 不处理真实 PII
已接入 MDH 接口的包 本 skill 不适用 —— 只处理静态包(纯静态 HTML 演示 / 交付包)。遇到接口包停下声明不适用,不得按静态包硬跑

references 索引

文件 用途 适用分支 何时读
模板基线-通用型46页.md 内置模板的配套说明:46 页逐页清单 + 字节数 + SHA256(16) / 两段式用法(差异盘点 · 默认源包)/ 差异判定规则 / 模板维护规则 仅 A Step 0.1 必读;Step 6.1 差异盘点时对照
规范A-病种注入执行清单-V2.md 通用型 46 页口径的逐页注入项(960 行 / 641 行表格 / 471 项)+ 编码层清理 + 核验。⚠️ A01 段已作废(用户已删除 A01),其对应的核验项不适用 仅 A Step 0 必读;Step 5/6 按需检索
规范B-新建页面规范-V2-医患两端.md 铁律 + 外壳/标题栏/底栏/组件/业务闭环/定制化/卡片格式 + §1.4 医生端九条硬规则(D-7 含底栏视觉 25 项口径)+ §2.4 患者端十四条硬规则 + §3.3.2 历史卡片「行序 + 文案」口径(★ 新建含历史数据页面的强制标准) + 自检清单(§十一 E / H 各含一条历史卡片强制项) A / B 通用 Step 0 必读;Step 6 必读
规范C-源包解绑规范.md 分支 B 的唯一逐页依据:源包类型判定 / 前序病种资产清点(六类)/ 术语三色分类 / 八类残留载体扫描法 / 逐页处置决策矩阵 / 时间轴口径迁移 / 镜像成对同步 / 字典键·注释·标识符处理 / 解绑验收 C-1~C-9 仅 B 分支 B:Step 0 与 Step B0–B4 必读;Step 6/7 按需检索
规范D-产品功能清单文档规范.md 交付文档规范(成套交付的甲层 · ★ 2026-10-10 整体收窄):§〇 本轮规则变更(只有新增页 / 结构级大改页产出)/ 八节骨架(取消 §九)/ 绝对禁令(占位符化、零模拟数据)/ 逐节写作要点 / 事实来源与最小核对清单 / 交叉页一致性 / §七 产出规则(判据只认结构变化;不做全量生成、不做基线复制平移、删除页不用声明、不要求页数=文档数)/ §八《更新说明》(收窄:只说明本次新生成了哪些 md 文档)/ 口径统一表 / 完成前自检 A / B 通用 Step 6.7 必读(每次交付都要读);Step 7.1 L5 文档层对照
规范E-量表文档转HTML页面规范.md ⏸️ 量表文档 → HTML 作答页规范(冻结能力:默认不读、不执行;仅用户主动提交量表文档时按 Step 4.7-附 启用):&lt;包目录&gt;/scale/ 目录与命名 / 抽取纪律(禁止臆造 · 缺项追问清单) / 页面骨架(复用 B07 范式)/ 数据契约 SCALE_DEF / 可填写 · 可提交(必答校验 / 计分 / localStorage / 已提交态 / 如实告知本地留存)/ 与 B07 及 D 端五处的同源闭环 / §九 15 条自检清单 / §十 反例 / §十一 订正记录(2026-10-09:§四 数据契约与 §五 留存记录结构改为实际实现形态 —— 由原示例的 dims/reverse/required 与 {answers, score, level, submittedAt} 订正为 groups/options+funcOptions/items[{no,g,stem,note}] 与 {scale, answers, total, func, risk9, submittedAt}) A / B 通用 Step 4.7.4 必读(用户提交量表文档时);Step 6 生成量表页时对照;与 规范F 配套 —— 本规范管「作答页」、规范F 管「作答页 → 报告」
规范F-量表报告生成规范.md ⏸️ 量表「报告生成提示词」规范(冻结能力:同规范E,按 Step 4.7-附 启用):每张作答页配套同短名 &lt;短名&gt;.md / md 12 节骨架 / 8 个变量契约(含静态包 localStorage 实况) / SCALE_DEF → 提示词概念映射 / ★红线一:禁止用先验知识补分级 / 风险分层与紧急处理 / 运行时报告固定五段 + 两附 / 输出格式两段(md 自身 / 运行时报告) / 示例隔离三件套 / 边界情形(无分级·无维度·不计分·无风险条目…) / §十二 check_scale_docs.py C1–C13 / §十三 自检清单 / §十四 反例 A / B 通用 Step 4.7.5 必读(每张量表都要走);Step 7.1 复核 check_scale_docs.py 对照
坑清单-已知缺陷与防复发.md 根因四分类(R1 规范缺失 / R2 语义错位 / R3 执行手法 / R4 校验不足)+ 105 条已登记坑及防复发措施(★ 2026-10-11(三)新增 3 条:R1-36(规范里的类名口径停在已下线页面 —— D04/D25 日程区块当天已下线,规范B §4.2.1 却仍按 .dot.on/.sc-node.cur/.sc-nm 写,照规范去改 B08/B09 一条类名都对不上 → 规范必须附「实现映射表」、页面下线时同步扫规范)· R3-34(B09 默认月份写死 2026年8月 → 时间平移后事件全落在 9~10 月,日历圆点永为 0、刚补的三态色板一个点都看不到 → 「与当前时间相关的视图游标」一律由 TS_TODAY_STR 派生,并断言「当前视图内有事件元素」)· R4-28(状态/配色改造只断言类名存在、不断言计算色值 → 「类名换了、色没改」照样 pass;同批还抓到 TS(&#x27;2026-08-29&#x27;) 冒充「今天」→ 必须 getComputedStyle 取 RGB 逐项核对,且图标底与胶囊同源断言);2026-10-10 新增 R2-7(种子数据按「真实今天的直觉」写、忽略基准日 → 演示出未来时间;A10 不查此语义)与 R1-34(版本号自行累加、从未与平台对账 —— 本地记到 1.0.8、平台实际 1.0.4 → 版本号由用户指定 + 升版前先对账)与 R4-21(校验器不认包装函数 —— seedT 包装被判「日期未走 TS()」 → 日期字面量必须直接写在 TS 调用里);R3-15:「行序一致」被当成「样式统一」—— 五页只对齐了行序、卡片形态仍是五种(圆角 12/10/14/无、边框四种、阴影有/无、间距 8/9/0)→ 五页统一为 .his-* 卡片骨架 + A14 扩为 5 条;R3-14:跨页「同规格」结论未逐页取证就写进规范 —— 把「看起来一样」当成「实测一样」(B03 实为 36×36 圆形渐变实心,全包唯一)→ 规范改逐页规格表 + 禁「均…级」概括;R1-33:规范只写「统一 FA6 Solid」没禁止用 emoji 当图标,且校验从不检查「图标位放的是不是图标」→ 立规范B §0.5 第 4 条 + 新增 A13 组(静态图标位 / 裸 emoji 字面量)+ B05·F07 改 FA;R4-20:校验正则把「属性顺序」当不变量 —— 元素再挂一个 style 就静默跳过整页(B03 历史区图标因此长期逃检)→ 正则放宽为 class=&quot;…&quot;[^&gt;]*&gt; + 立「校验器也要做正反向取证」原则;R1-32:设计标准只写在"页面改动记录"里、没进「新建页面自检清单/铁律闸门」 → 新建页面永远继承不到;并暴露 §6.2 与 §3.3.2 边界不明 → 标准升格 + 接入 §十一 E/H + 划清分工;R3-13:改了"静态 HTML 默认值"却没改 JS 赋值源 → 改完看着像生效、其实被覆盖(B02 proPkg)—— "文本在 HTML 里" ≠ "文本由 HTML 决定";2026-10-09 新增 R1-31:包外过程文件「份数与名字都不确定」(同一次 skill 跑出 10/6/6/2 四种)—— 清单只写下限、没写上限,加上分支归属含糊 → 包外收敛为唯一一份《更新范围确认单》、取消 9 类包外文件;R1-30:量表报告规范只定义了"报告结构"、没定义"提示词 md 这份产物",且输入源写"量表配置 JSON"与实际 SCALE_DEF 字段对不上(维度→groups、严重程度→scoring.ranges 常空、风险条目→只在 items[].note、适用人群/参考来源→实际没有)→ 立 规范F + check_scale_docs.py;R1-29:同一张报告详情模板承载两类语义不同的报告,却没规定「哪类渲染哪些块」→ B15/D28 补 type 分派;2026-10-08 新增 R1-25:从未按 SkillHub 市场的 frontmatter 规范自查就准备上架;R1-26:references 写死作者本机绝对路径;R1-27:SkillHub 不允许提交字体文件、包内不能带字体二进制 → 立 T0-b + fetch_fonts.py;R1-28:references 声明了从未存在的「外部正本」与 diff 对账流程 → 约束空转,且给"能不能改"提供了错误理由(门槛其实是用户确认,不是正本)→ 全库改口径;R4-16:交付物缺"这页是什么"→ 立 A12 组;R4-17:把"软门禁"当安全措施 → 立 T0;R4-18:官方 upgrade --check-only 缺 config.json 会静默 skip、跑了个寂寞 → 立 T0-c + check_update.py;R4-19:校验范围按"包根一击"写死,scale/ 这类子目录页会整体逃过 L1 → verify_pkg.py 扩围 + 新增资源相对路径检查) A / B 通用 Step 7.5 必读;Step 6 执行前建议过一遍

> ✅ 本 skill 的 references 全部是「本地资产」——不存在任何外部正本(用户 2026-10-08 裁定:「以 skill 内这份为准,无外部的规范」)。
> 因此不必再与任何包外文件做 diff 对账;规范A / 规范B / 规范C / 规范D / 规范E / 规范F / 坑清单 / 模板基线清单 / scripts/ 一律以本 skill 内这份为唯一正本。
> 维护方式(按根因分类,见 Step 7 与坑清单):
> · R3 / R4 类(执行手法、校验手段)→ 坑清单 可自动追加;scripts/ 可直接改(属工具维护,不是写记忆);
> · R1 / R2 类(规范缺失歧义、语义错位)→ 产出「建议回写内容」,等用户确认后再改 规范A / 规范B / 规范D / 规范E / 规范F。这不是因为"有外部正本要同步",而是用户级刚性约束:对 skill 内容 / 流程的任何修改都必须先经用户交互确认。
> ⚠️ 旧版本文中若仍有「外部规范副本 / 源头正本 / 回同步正本」的措辞,一律按本行口径理解(已失效)。

assets 索引

资产 内容 适用分支 性质
assets/js/timeshift.js(随模板分发于 assets/templates/…/assets/js/) 时间基准模块:基准日 2026-08-29 + TS()/TS_RANGE()/TS_TODAY()/TS_OP() + 静态 data-ts 填充 + 状态栏实时时钟 A / B 通用 每页 &lt;head&gt; 必引(规范B §5.4)
assets/templates/通用型全病程服务包-V3.3/ 通用型标准模板:46 页 HTML + assets/js/(echarts / chart / xlsx)+ assets/font-awesome/(css + 3 字体),共 58 文件 / 4.2M 仅 A(通用型) 只读基线 —— 不得就地修改;一次注入 = 一次复制

两种用法:① 基线参照(Step 6.1 差异盘点,用户自带源包时);② 默认源包(用户未提供源包时,cp -R 到输出目录再注入)。

TPL=&quot;$HOME/.workbuddy/skills/病种注入器/assets/templates/通用型全病程服务包-V3.3&quot;
diff -rq &quot;$TPL&quot; &lt;源包目录&gt;                              # 用法①:差异盘点
cp -R &quot;$TPL&quot; &quot;&lt;输出目录&gt;/&lt;目标包名&gt;&quot;                     # 用法②:作为注入起点

> ⚠️ 模板内不含 .workbuddy/(项目工作区)、标准版产品功能清单/、.DS_Store;这些不属于模板资产。
> ⚠️ 模板更新规范见 references/模板基线-通用型46页.md §4(新版另建目录,不覆盖旧版)。

scripts 索引

脚本 用途 何时跑
scripts/check_update.py T0-c 更新检查:读本地 SKILL.md 版本 + 从锁文件/_meta.json/frontmatter 解析 slug 与 namespace → 查平台 GET /api/v1/skills/{slug}?namespace=… 取 latestVersion.version,与本地按 SemVer 比较;包内若有含 update_url 的 config.json 则并行跑一次官方 skillhub upgrade --check-only 交叉印证。退出码 0=已最新(含"本地高于平台")/ 3=有更新 / 2=检测失败(不阻断);--json / --quiet / --selftest。纯标准库 T0 之后、T0-b 之前必跑(每次执行 skill 都跑)
scripts/detect_source_pkg.py 入口闸门:按三条判据判定源包类型(通用型 / 病种专属 / 混合 / 不可判定),输出判据原始数据 Step 0.0 必跑(任何分支)
⏸️ scripts/scale_doc_extract.py 量表文档解析(冻结能力,仅按 Step 4.7-附 启用):xlsx/docx 走 zip+XML 纯标准库直读,csv/tsv/txt/md 直读;只如实抽取段落与表格行并给"像题目/像选项"线索,不做语义结论;PDF 只给提示(由模型逐页阅读)。--out 落中间件 JSON、--json/--text/--selftest Step 4.7.2 必跑(用户提交量表文档时)
scripts/scan_residue.py 分支 B 扫描器:--extract 自动提取候选前序病种词;--terms &lt;三色表&gt; 产出页 × 八类载体残留矩阵 Step B2 / Step B3 / Step 6.5 必跑(分支 B)
scripts/sync_scale.py 规模口径同步器:从 规范A 实测「行数 / 行表格 / 项数」三项派生值,按明确句式白名单在 SKILL.md + references/*.md 全库同步旧值;默认 dry-run,--apply 才写;另设疑似清单(句式不明的 N 项/N 行)只报告不改 —— 防 R3-11「按句式匹配必然漏」+ 防误伤别的语义数值 改完 规范A 后必跑(R3-11)
scripts/apply_timeshift.py 时间基准实时化:把包内日期字面量批量包裹 TS()/TS_RANGE()、修 nowStamp()/demoNow()/OP_DATE 锚点、注入 timeshift.js(幂等) 新建/改造页面后;交付前
scripts/fetch_fonts.py T0-b 首次运行资源自举:check(0 = 字体齐备 / 2 = 缺)、fetch(下载缺失的 Font Awesome 6.4.0 字体,逐文件 sha256 钉死,幂等、失败重试 3 次、原子落盘)、verify(打印哈希)、strip(上架前删除字体二进制)。源 = cdnjs FA 6.4.0 官方镜像,与原内置文件逐一 sha256 比对一致。纯标准库、无第三方依赖 Step 0 之前必跑(铁律 T0-b);上架打包前必跑 strip
scripts/gate.py T0 准入门禁(软门禁):check 静默判定(0 = 已授权 / 2 = 未授权)、unlock &lt;口令&gt; 校验并持久化到本机(~/.workbuddy/.dzq-unlock.json,放在 skill 目录外,SkillHub 更新不会连带删除)、status 看状态、reset 清标记。⚠️ 文件头有性质声明:软门禁不是安全边界(口令校验值在包内、四位数字可穷举、标记是普通文件),不得对外宣称它"安全/加密/防破解" Step 0 之前必跑(铁律 T0)
scripts/verify_pkg.py L1 机械层:内联脚本语法 / 真实 DOM div 配平 / 失效链接(不含页数核验 —— A01 已删除) Step 6.5 与 Step 7.1(任何分支)
⏸️ scripts/check_scale_docs.py 量表配套层(冻结能力,仅包内存在 scale/ 时才跑):scale/ 下作答页 ↔ 报告提示词 md 一一对应(C1)+ md 骨架 12 节(C2)/ 8 变量占位符(C3)/ 必含句 R1–R8(C4)/ 五段标题按序(C5)/ 两附在末(C6)/ 示例隔离三件套(C7)/ 同短名(C8)/ 未被外层代码块包裹(C9)/ 篇幅(C10)/ 自包含(C11)/ ranges 为空时的游离分值门槛提示(C12,WARN)/ 事实底稿取自本页(C13)。退出码 0=全过 / 2=有 FAIL;包内无 scale/ 时不适用直过。纯标准库 Step 4.7.5 生成后必跑;Step 7.1 量表配套层
~~scripts/doc_baseline_diff.py~~ ⛔ 已删除(★ 2026-10-10)—— 原为「文档基线比对器」(忽略 4 行 + §九 整节逐页比对,产出 SAME/DIFF/MISSING/EXTRA)。用户裁定「不用再将基线文档进行复制平移」后,整套基线比对机制取消,脚本文件已从本 skill 删除(不参与任何流程、不存在于包内) —
scripts/check_docs.py L5 文档层 · 文档内质:C1 命名 / C2 八节(★ 2026-10-10:「九、变更记录」已取消)/ C3 功能点编号连续 / C4 与 §3.0 合计一致 / C5 篇幅 / C6 零模拟数据 / C7 占位符 / C8 必备小节 / C9 待收口项含证据 / C10 与事实底稿交叉。--briefs 可选(无底稿工具链时不用传) Step 6.7.8 必跑;Step 7.1 L5
scripts/review_pkg.py L3+L4 规范层与一致性层:真实姓名 / 糖尿病底版残留 / 肛肠底版残留 / 跨页一致性 6 组 / A6 患者端 UI 11 条(含 A6-11 打卡区排序) / A7 医生端 UI 4 条(含 A7-3b) / A8 D 端底栏与全局徽章 4 条(含 A8-1b 视觉口径) / A9 源包解绑 6 条(debind 驱动) / A10 时间基准 3 条 / A11 用药打卡粒度 3 条 / A12 文档产出 6 条(docs 驱动,★ 2026-10-10 收窄) / A13 图标一律 FontAwesome 2 条(A13-1 静态图标位用 emoji / A13-2 裸 emoji 字面量;覆盖三端) / A14 历史卡片统一骨架 5 条(详见 SKILL.md §7.1 明细;基线真源 = 规范B §3.3.3) / A15 F11 Excel 生成量表入口禁令 2 条(★ 2026-10-11;见 SKILL.md §7.1 明细) / 页数 / 配置驱动的旧值·新值·混用检查 / CDN 图标提示 Step 7.1 必跑(任何分支,--config &lt;临时&gt;/复核配置.json —— 临时文件,跑完即删)
python3 scripts/gate.py check                                          # T0 准入门禁(退出码 0 才继续)
python3 scripts/gate.py unlock &lt;口令&gt;                                   # 首次授权(持久化到本机;口令错误 3 次即终止)
python3 scripts/check_update.py                                        # T0-c 更新检查(0=最新 / 3=有更新 / 2=检测失败)
python3 scripts/fetch_fonts.py check                                   # T0-b 字体自举(退出码 0 才继续)
python3 scripts/fetch_fonts.py fetch                                   # 缺字体时补齐(首次运行执行一次即可)
python3 scripts/fetch_fonts.py strip                                   # ★ 上架打包前:删掉字体二进制(打包动作本身须先获用户明确指示,见 T0-d)
python3 scripts/detect_source_pkg.py &lt;源包目录&gt;                       # Step 0.0 闸门
python3 scripts/scale_doc_extract.py &lt;量表文档&gt; --out &lt;包&gt;/scale/_src/量表解析-x.json   # ⏸️ 冻结路径:仅用户主动提交量表文档时(Step 4.7-附 ①)
python3 scripts/scan_residue.py &lt;源包目录&gt; --extract                  # Step B2 候选词
python3 scripts/scan_residue.py &lt;源包目录&gt; --terms &lt;tmp&gt;/术语三色表.txt  # Step B3 残留矩阵(结论进确认单 §8.3)
python3 scripts/verify_pkg.py &lt;服务包目录&gt;
python3 scripts/check_docs.py &quot;&lt;服务包目录&gt;/产品功能清单&quot;              # Step 6.7 文档内质(八节)
python3 scripts/review_pkg.py &lt;服务包目录&gt; --config &lt;tmp&gt;/复核配置.json  # 临时配置,跑完即删

常见问题

5 问
答案由本站依据条目字段整理
package-new怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_6b6e1800/package-new。安装方式为未标注。装完刷新技能列表或重开客户端。

package-new支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

package-new权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

package-new收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

package-new用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。