跳转到内容
pstack 中文学习站

architect

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

先设计,再实现。用 not implemented 函数体和伪代码,画出类型、函数签名、类的形态和模块边界。把几个模型的视角综合起来,再照着选定的草图填代码。如果实现证明草图错了,就扔掉草图,重新设计。

动手前先开一个 todolist,每个阶段一条。

  1. 摸清
  2. 草图
  3. 确认
  4. 实现
  5. 推倒

新代码会碰到的每个系统,都要真正建立心智模型。对相关子系统运行 how skill。

说出一个文件名不算摸清。要产出 how 规定的、沿调用链追过的模型。如果设计要重新划定归属或分层,还要对现有形态运行 why skill,让当初的理由成为约束,而不是靠猜。

只有工作确实是从零开始、周围没有要对接的系统时,才跳过阶段 A。

运行 arena skill,任务是画设计草图,并带上阶段 A 摸清问题时产出的材料。把 references/runner-prompt.md 作为每个 runner(各自独立出方案的模型)的提示词。每个候选按 references/rationale-template.md 的结构产出一份设计包。

runner 取 pstack-models.mdc rule 里的 architect runners 这一行,不用 arena runners 那一行。如果没有这条 rule 或没有这一行,就用 claude-opus-5-5-max、gpt-5.6-sol-max、grok-4.7-xhigh-fast。别名和被拒的条目,按 arena skill 阶段 A 里的 runner 规则处理。

设计两遍。综合之前至少要有两个结构上不同的候选,第一个看起来够用也一样。这就是 exhaust-the-design-space 原则 skill 落到实处。要的是整体形态不同的方案,不是在同一个形态里修修补补。

综合之前,拿 references/design-red-flags.md 把每个候选筛一遍。浅模块、信息泄漏、按时间顺序拆分、透传方法,要么改,要么拒。

在可行的候选之间比较接口深度。哪个设计用更小、更简单的公开接口藏住更多复杂度,就选哪个。接口能力丰富,可以把能力集中在一处,而不是分散到好几层,调用链反而更短。

arena 最后返回一份综合后的设计包。综合时做的决定,写进 rationale 的「综合决策」一节。

默认:直接拿综合后的设计去实现,中间不停下来等人。

只有调用的人明确要求时,才加一个确认点,比如「/architect with checkpoint」「实现之前先停下来给我看」之类。这时把综合后的设计拿出来,停下等对方点头。

两种情况下,综合结果都可以单独作为一次提交,也就是 foundational-thinking 原则 skill 说的「先搭脚手架」。按 outcome-oriented-execution 原则 skill,填代码期间有计划、有范围的临时破坏没有关系。如果想在实现前对设计做一次对抗性施压,对综合后的草图运行 interrogate skill。

如果人对形态有异议(在确认点上或者事后提出),把它当作阶段 A 的证据。先重新摸清问题、重跑阶段 B,再接着写代码。

把 not implemented 函数体换成代码,把伪代码换成逻辑。综合后的草图就是契约。

偏离草图是值得说出来的信号,不是该默默消化的阻力。如果某个函数需要草图没想到的参数,问一句:是草图错了,是需求漏了,还是实现做多了。

如果实现一直在产生草图消化不了的阻力,就扔掉草图。按 redesign-from-first-principles 和 fix-root-causes 原则 skill,不要在错误的设计上继续打补丁。

要看的是规律,不是单个现象。征兆有:

  • 同一种 workaround 在互不相关的代码里反复出现。
  • 好几个互不相关的边界情况都要加特殊分支。
  • 类型要靠逃生口(any、强制转换、实际上总会被赋值的可选字段)才能编译通过。
  • 草图说状态不共享,却冒出「这里得加锁」的念头。
  • 调用方得知道抽象内部的规矩才能用它。
  • 整个实现里有两处或更多互相独立、但形态相同的阶段 D 偏离。

要自己判断。几个边界情况不足以判一个架构的死刑。有些问题本来就复杂。数据复杂不等于设计复杂。

推倒的时候:

  1. 对已经写出来的东西重新运行 how skill。
  2. 按 redesign-from-first-principles,把新约束当成第一天就有的前提,重新设计。
  3. 按 subtract-before-you-add 原则 skill,先减再加。新草图在长大之前,应该先比旧草图小。
  4. 回到阶段 B,重跑 arena。

先写调用方怎么用,再从用法推出类型草图。小改动是一个文件,放新类型和签名。大一点的工作是模块图加类型定义。rationale 跟着一起交,按 references/rationale-template.md 的结构写,里面有用法草图和综合决策。