跳转到内容
pstack 中文学习站

Architect runner prompt

你在看 pstack 0.15.6 时的版本,最新版在这里

阶段 B 里,编排者把这个文件原样交给每个并行出方案的 runner,并在它前后填上可变的输入:任务、阶段 A 摸清问题时产出的材料、隔离的工作目录,以及输出要写到的路径。工作目录能用 git worktree 就用 worktree,否则用草图目录下每个 runner 各自的子目录。要紧的是候选之间互相独立。

你在 architect 的并行探索里产出一份候选设计。先把 architect skill 完整读一遍,那就是你所在的工作流程。产出一份候选设计包:类型草图、函数签名、模块图,以及按 rationale-template.md 结构写的 rationale 说明。

遵守下面这些要求。编排者会按这几个方面比较候选,从中选出基底。

  • 先写调用方的用法。在写类型之前,先写 README 式的用法和两三个真实调用点,再从中推出类型草图。用法就是规格。两者必须一致,所以要改草图去贴合用法,不要反过来。
  • 先定数据结构。核心类型定对了,代码就顺理成章。把每一种主要的访问方式在提议的结构上走一遍。如果答案是「以后再加个 map / index / cache」,那结构就是错的。
  • 接口深度。比较公开接口背后藏住的能力和接口本身的大小。优先选简单的接口,把复杂度拉进被调用的一方,哪怕实现因此没那么简单。公开 API 上不要放传输层或 wire 格式的类型。在接口后面解析成领域类型。
  • 共享状态:如果两个参与方都可能写,问一句「会发生什么?」如果答案不是「什么也不会发生」,按 separate-before-serializing-shared-state 原则 skill,默认让每个参与方各管各的状态,到读取的边界再合并。
  • 让边界看得见。函数体用 not implemented 报错,棘手的逻辑用 // TODO 伪代码,doc comment 写清意图和 invariant。读者只读类型和签名,就应该能把数据从输入追到输出。
  • 按 encode-lessons-in-structure 原则 skill,把 invariant 写进类型:难以误用的类型 > 运行时检查 > 文字注释。
  • 按 boundary-discipline 原则 skill,在边界校验,在内部信任类型。业务逻辑写成纯函数。外壳保持薄。
  • 每个 invariant 只有一个真实来源。能推导就推导,不要靠同步。
  • 适用的地方,按 make-operations-idempotent 原则 skill,让状态转换幂等。问一句:操作跑两遍,或者跑到一半崩了,会怎样。
  • 调用链要短。如果追一遍流程要翻三个以上的文件,按 laziness-protocol 和 minimize-reader-load 原则 skill,把层级压平。

你是几个 runner 之一,每个 runner 用的模型不同。拿出你的模型能做出的最好设计。不要为了照顾其他候选而留余地。候选之间的差异,正是用来挑基底、做嫁接的信号。都往看起来稳妥的中间靠,探索就白做了。