用途
Report Output Discipline 是一份共享的「报告产出物输出格式纪律」,用于统一规定各类报告类产出物(artifact)应当以何种格式落地。它不生产具体报告内容,而是解决一个跨技能的一致性问题:同一份报告应该输出 Markdown、HTML 还是 JSON,取决于谁会读取它,而非取决于由哪个技能生成。
主要能力
1. 按消费者分类
每个登记的产出物只属于一个类别,按顺序判断并在首个命中处停止:
| 顺序 | 类别 | 登记表须持有的证据 |
|---|---|---|
| 0 | 既有 HTML 契约条目 | 证据以「既有契约」开头并指明其读取点 |
| 1 | machine(机器消费) | 非智能体消费者读取字段或协议,给出 path:line 加字段或协议 |
| 2 | dual(双用途) | 存在具名的智能体消费点,如下游工作流阶段或宿主在会话启动时加载,记录为 path:line |
| 3 | human(人类消费) | 以上均不匹配,这是唯一的默认值 |
注意:仅为渲染而进行的读取(读整个文件以便显示)不构成机器消费。默认归为 human,因为误判为 machine 会静默取消 HTML 义务,且下游无从发现该错误。
2. 应用格式契约
- human + 接入 + 非例外 → 写入 Markdown 源文件,并在旁边派生出 HTML。Markdown 是唯一的编辑入口,手工编辑的 HTML 不算可接受的变更。
- machine → 仅 Markdown 或 JSON,不生成 HTML 副本。
- dual → 源文件保持自身格式(Markdown 或 JSON),工作流阶段中不强制派生步骤;可按需派生,但绝不强制。
- 会话级结论(阶段结果、验证结论、评审结果)保留在对话中,不生成文件。
3. 通过共享渲染器渲染
HTML 由 scripts/render-core.mjs 生成,脚本路径相对于该技能的安装目录:
node <skill-dir>/scripts/render-core.mjs <source.md> [--root <dir>] [--at <iso>]
若 <skill-dir> 未知,需询问用户技能的安装位置。当 Node 或渲染器不可用时,应打印 Markdown 路径并说明原因,绝不以手写 HTML 作为替代。渲染器的行为契约(转义、链接规范化、内联 CSS、页脚溯源、确定性)统一定义在 report-output-format 能力中,不在宿主中重复描述。Mermaid 流程图围栏会预渲染为内联 SVG;超出支持子集或不受支持的图表类型会渲染为可见的降级标记并保留原始源码,绝不静默降级为普通代码块。
4. 将派生 HTML 排除在变更集之外
派生 HTML 不得进入版本控制,否则一次纯文档变更会被归类为 UI 变更。宿主在写入文件时应确保这一点:在产出物所在仓库追加一条忽略规则,或写入已被忽略的目录。只能追加,绝不覆盖已有规则。若规则无法写入,应予以说明、给出需要添加的确切行、仍然生成 HTML,并声明 UI 验证义务依然适用。
5. 告知读者页面位置
派生 HTML 后,在对话中同时报告两个路径。是否打开浏览器由宿主自行决定。
6. 登记表是唯一决策点
reference.md 保存产品登记表,包含:产品、产出技能、类别、消费者证据、源格式、派生格式、路径、抑制方式与集成状态。读取对应行即可,不要在正文中重新推导类别。新产出物应先登记再集成。
7. 保持宿主精简
宿主正文只需指明其登记行并指向本技能,不复制分类表、格式规则或渲染器契约。
使用方式
宿主技能在 frontmatter 的 dependencies 中声明该依赖,并在写入报告产出物之前加载它。随后按登记表查询产出物类别,依格式契约决定是否派生 HTML,通过共享渲染器生成页面,并处理版本控制忽略规则。
适用场景
适用于多个技能共同产出报告类文件、需要统一输出格式规范的场景,尤其是同时存在人类阅读报告与机器消费数据的混合流程。
限制
资料中未提供该技能的具体安装方式、支持的平台范围、收费情况或性能指标。其具体效果取决于所安装环境中的 Node 与渲染器是否可用。