mcpField
P
press

press

github.com/paulnsorensen测试与质量19656 次安装6 天前更新
代码仓库

关于 press

Press 是由 Cook 调用的对抗式测试技能,用于检验测试通过时,已报告的缺陷是否仍会出现。它只添加或运行对抗测试,不修改生产代码,并将通过结果交给 /age,或把发现和覆盖缺口交回 Cook。

主要功能

  1. 01用对抗案例测试已批准行为
  2. 02仅添加或运行对抗测试
  3. 03不修改生产代码
  4. 04在修正过程中跟踪重复攻击
  5. 05向 /age 或 Cook 报告结果

适用场景

  1. 01检查已接受的修复是否解决原始问题
  2. 02发现常规验收检查遗漏的缺陷
  3. 03识别行为主张的测试覆盖缺口

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/paulnsorensen/easy-cheese --skill press

安装后在 Claude Code 中输入/press确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

wedge.toml
references/
commands.md
gap-analysis.md

详细介绍

/press

Press 是 Cook 在其 Press 循环中调度的对抗性检查。/press <slug> 仍可调用以手动重新运行。通过时,它会向 /age 报告 GREEN,并向 Cook 报告发现的问题或 coverage_gap。

Press 从不编辑生产代码。实现和首轮验收覆盖由 Cook 负责。Press 会针对已批准的契约进行攻击式检查,并报告暴露出的每个缺陷。

阶段入口

运行 python3 skills/press/scripts/press.pyz wheypoint-resolve --ref <slug>。 authoritative 使用记录;其 working_context 是首批 tilth_read。 not-found 会在无上下文的情况下继续;legacy 会显示其来源和 slug,然后继续。 遇到 gated、ambiguous 和 error 时停止并显示负载。 显示提示性 stale-commit 和 grounded-path-missing 发现。 将其 record.revision_id 保留为 <base>(§ 基准修订版)。

输入

Cook 会在行为工作完成其 taste test 后自动调度 Press,因此无需调用。 如需手动重新运行,Press 接受以下调用,并在 GREEN 时交接给 Age:

/press <slug> [--auto] [--hard] [--open-pr]

阶段入口完成后,Press 会读取 .cheese/cook/<slug>.md 中的 Cook 交接内容。

--auto 会选择自主链路。参见 ## 自动模式。

--hard 请求可选的最终门禁。Press 会将此标志转交给 Age。

--open-pr 是发布许可。只能由用户提供。Press 会将此标志转交给 Age。Press 从不添加此标志。

Press 会原样保留 Cook 的 durable_flags: 值。Press 会忽略 Cook 的 taste_test: 值。

对抗性循环

只提出一个问题:“即使所有测试都通过,用户最初遇到的问题仍可能发生吗?” 选择一个相关的虚假成功攻击,而不是全部四种。记录问题、攻击方式,以及它为何会威胁该主张。确认验收检查能够拒绝这种情况。 references/gap-analysis.md 列出了攻击方式和证据顺序。

Press 不会编写首轮覆盖。若缺少覆盖,Press 会报告 coverage_gap。 每次 Cook 修正后,都用相同的攻击和测试摘要重放同一攻击。 无效证据或生产树发生变化时,停止运行。结果表定义了上限。

Press 没有全局 dispatch: /cook 操作。

基线感知门禁

Press 会为项目门禁保留基线感知的就绪状态。Cook 的 baseline: 行会指定一个制品。该制品记录已确定的状态。

通过 baseline: 路径读取该制品。若某项失败的测试及签名与制品匹配,则不要再次标记。新增或变更的失败会阻止流程继续。

参见 ../cook/references/quality-gates.md。另请参见 references/gap-analysis.md。

流程

  1. 阅读 — 加载已批准的规范、Cook 交接内容和基线区块。如果 .cheese/glossary/<slug>.md 文件存在,则使用其中的规范术语。
  2. 检查 — 在添加测试前,先阅读验收检查。
  3. 攻击 — 只添加或运行对抗性测试。不要更改生产路径。
  4. 分类 — 选择 green、finding、coverage_gap、invalid_evidence 或 production_changed。
  5. 报告 — 编写 .cheese/press/<slug>.md。包括问题、所选攻击、它为何会威胁该主张、尝试过程、证据和评审后续事项。
  6. 交接 — 将 GREEN 交给 /age。将 finding 或 coverage_gap 交给 Cook。

源码更改请使用 code-intelligence-routing.md。

可移植性请参阅 ../cheese/references/harness-portability.md。 该参考文档说明,斜杠命令是宿主环境的呈现形式,而非控制模型。

Press 报告一个就绪状态值。将 ready for /age 映射为 status: ok 和 next: age。

将 follow-up recommended 映射为 status: ok-with-concerns: <concern> 和 next: age。对于同时记录了评审后续事项的 GREEN 通过,使用此状态。已记录的每项关注事项均由 Age 负责。

将 finding 映射为 status: ok-with-concerns: <defect> 和 next: cook。 将 coverage_gap 映射为 status: ok-with-concerns: coverage-gap: <gap> 和 next: cook。

将 blocked 映射为 status: halt: <reason> 和 next: done。blocked 表示证据无效或生产环境已更改。

自动模式

--auto 会运行相同的对抗性循环,并且无需用户提示即可选择下一阶段。

在 ready for /age 或 follow-up recommended 后,执行 /age <slug> --auto。如果用户提供了 --hard,则添加 --hard。如果用户提供了 --open-pr,则添加 --open-pr。

在 blocked、halt: correction-cap 或 halt: coverage-gap 后停止。不要执行 Age。

如果调用方提供了禁止链式执行指令,请遵守。编写 Press 交接内容后停止。不要启动其他阶段。Cook 的扇出路径负责处理此指令。已退役的 /ultracook 编排器此前负责处理此指令。请检查该指令本身,不要检查来源名称。请参阅 ../cook/references/auto-mode.md。

输出

每次 Press 结果都写入 .cheese/press/<slug>.md。

使用 python3 skills/press/scripts/press.pyz write-handoff-artifact 写入文件;包含一个或多个 --grounded <path[#start-end]> 参数。使用规范前言:

python3 skills/press/scripts/press.pyz write-handoff-artifact \
  --slug <slug> --status <status> --phase press --next <next> [--base <base>] \
  --artifact .cheese/cook/<slug>.md --orientation "<one-line orientation>" \
  --durable-flags "<preserved Cook value>" --baseline "<baseline artifact path>" \
  --grounded <path[#start-end]> --body-file <body-path>
status: <canonical status field>
next: age | cook | done
artifact: .cheese/cook/<slug>.md
durable_flags: <preserved Cook value>
baseline: none | <baseline artifact path>
<one-line orientation>

交接契约定义了 status: 语法。前言不接受其他键。将所有 Press 值写入报告正文。

artifact: 用于指明所使用的 Cook 报告。不要在此行写入攻击证据。

baseline: 用于指明 Cook 记录的那一项制品。请参阅 ../cook/references/quality-gates.md。

在前言下方编写以下正文部分:

  • ## Attempts — 每次尝试一行。注明尝试编号和结果。
  • ## Evidence — 注明稳定的攻击标识、测试摘要,以及发现问题时失败的测试。
  • ## Review follow-ups — 记录每个契约外问题。若运行未记录问题,则写 none。Age 会读取此部分。

将结果映射到终止前言:

结果statusnext
GREENokage
GREEN,且记录了问题ok-with-concerns: <concern>age
发现问题(攻击测试暴露缺陷)ok-with-concerns: <defect>cook
coverage_gapok-with-concerns: coverage-gap: <gap>cook
一次 Cook 运行中的第二次 coverage_gaphalt: coverage-gapdone
证据无效或生产变更(blocked)halt: <reason>done
同一攻击的第三次发现问题halt: correction-capdone
未以绿色结束的第六轮 Presshalt: press-round-limitdone

next: done 表示终止,不会启动其他阶段。

next: cook 表示交接给 Cook 进行修正(correction = true),适用于发现问题或出现 coverage_gap。随后 Press 会重放或重新运行同一攻击。

Cook 负责统计轮数。Cook 会在调度中传递轮数和攻击标识。Press 只能根据该轮数输出 halt: correction-cap 或 halt: coverage-gap。手动运行 /press <slug> 时,会从 .cheese/press/<slug>.md 读取此前的轮次。references/gap-analysis.md 说明了上限,包括 6 轮的 press-round-limit。

交接

Pipeline: culture → mold → cook (⇄ press) → age → cure → plate

由 Cook 调度 Press 时,将交接返回给 Cook 并停止。 手动重新运行并得到 GREEN 后,使用共享的交接门槛。使用 /age <slug> 开始审查。

发现问题或出现 coverage_gap 后,将交接给 Cook,并在报告中注明失败的测试或缺口。

如果调用方提供了 --hard、--auto 和 --open-pr,则将它们转交给 /age。不要添加 --open-pr。

规则

  • 不要编辑生产代码、生产夹具或生产适配器。
  • 重放时不要更改攻击。
  • 不要将契约外行为视为实现请求。将其记录在 ## Review follow-ups 下。GREEN 通过时,将运行报告为 ok-with-concerns。
  • 保留基于基线的就绪状态。

执行规范

Press 优先使用证据。未经验证的失败不算发现问题。

在每次交接决策前注明结果。注明攻击摘要。缺少任何一个值时都应停止。不要猜测。

生成的 bundle 命令清单:references/commands.md。

评论

支持 Markdown