---
name: concept-design
description: Models or reviews requirements as Jackson concepts defined by Purpose, OP, State, and Actions, then composes them with Syncs. Use this skill whenever the user asks to discuss requirements, review a concept model, or mentions 概念设计 / 概念建模 / concept-design (formerly jackson-concept-design); stop at model confirmation without producing PRD or code.
---

# 概念设计（Jackson）

## 目标

输入：需求、访谈记录或既有概念模型。输出：由独立 concepts 与 synchronizations 组成的概念模型（模板见「记法与模板」），停在模型确认——除非用户明确要求，不出 PRD、架构或代码。确认后交接：文档化 → `concept-prd`；代码落地 → `concept-implementation`；存量审计 → `concept-audit`。

Concept 同时是用户为有效使用软件而掌握的**心理构造**，和与之对应的**连贯功能单元**；界面和术语表达概念，代码实现概念，都不是概念本身。本文是按 Jackson 的结构、判据与设计动作整理的操作循环，不冒充作者原文流程。

## 原则

1. 先确认 purpose 与边界，再确认名称和细节；全程区分已确认、推断与待决定。
2. 从具体场景自下而上找目的；表、页面、实体名、团队边界都不直接映射成 concept。
3. 概念规格零点名其他概念（`notes` 段除外）；共享对象用类型参数抽象（`Comment [Target]`）；跨概念行为只写在 sync。
4. State 与 actions 完整规定行为，OP 只解释本质；三者都不写界面、协议或表结构。
5. Sync 用 when / where / then 因果记法；书（2021）的事务语义已被作者废弃，存量旧记法按现行改写。
6. 被否决的候选与待决取舍全部进「排除与未决」表，不留空悬。

## 流程

重复 1–5 直到 misfits 消失，再进入 6。

1. **找需要**：受益者、misfit、现有做法、期望结果与约束；把"要什么"追问成"为什么"。完成：「需求与 Misfits」节可填。
2. **识别候选**：从具体场景找细粒度目的，优先熟悉、可复用的概念；边界不明先保留备选。完成：每个候选有一句 purpose。
3. **逐个刻画**：写 Name、Purpose、具体 OP，由 OP 推导 actions 与最小 state；删除行为不需要的 state，补齐必要 action；成立后把上下文对象参数化。完成：每个候选四节齐。
4. **批评边界**：读 `references/criteria.md`，按资格五条与四词逐个判断；结论只用 `保留 / 拆分 / 合并 / 参数化 / 降级为 type、action、implementation / 移至 sync / 待确认`。完成：每个候选有结论词。
5. **组合再设计**：读 `references/sync-notation.md`。include 并实例化 concepts；写 syncs 与应用入口；核查未被 sync 提及的动作是否有意排除；按欠同步、过同步、synergy 检视并用 tighten / loosen 调整；画依赖图、枚举子集圈定 MVP。完成：「命题」全部成立。
6. **呈现并确认**：按模板输出，请用户确认模型；不主动进入 PRD 或代码。

## 命题

产出必须满足，每条可对照文本判真假：

- 每个 concept 恰好一个 purpose；OP 至少一条场景，且以兑现该 purpose 的结局收尾。
- 每个 concept 附四词结论（专一 / 完整 / 独立 / 熟悉），结论词出自流程第 4 步词表。
- 规格只含 purpose / state / actions / operational principle（可选 notes）；除 notes 外不出现其他概念名，无 interactions / dependencies 段。
- 每个 action 带 requires / ensures；错误是独立输出 case `(error: String)`；queries 以 `_` 开头且只读。
- 每条 sync 满足行为保持：只调用概念已声明的动作、只经 queries 读状态；每条附组合理由或风险。
- 每个可失败动作有错误 sync，或有意不处理并记入排除表。
- 未被 sync 提及的动作均为有意排除并记入排除表。
- 依赖图只含 extrinsic 依赖、无违反 Parnas 规则处；MVP 子集从图中圈定。

## 记法与模板

- **Purpose**：need-focused、specific、evaluable，恰好一个。
- **OP**：少量端到端故事，只写 actions 与结果；先用具体对象写以检验价值，再改写为多态通用版。
- **State**：为支持行为必须记住的事实，Alloy 风格关系式（`password: U -> String`）；User、Item 等实体通常是类型参数，不是顶层模块。
- **Actions**：`动作 (入参: 类型) : (出参: 类型)` + requires / ensures，按输出模式拆 case；不拆成界面步骤。
- **Queries**：`_getUser (session) : (user)`，只读不改 state，专供 sync 的 where 段。
- **四词**：专一（多目的即 conflation → 拆分）、完整（只有片段即 fragmentation → 合并或补齐）、独立（无需引用其他 concept 即可理解）、熟悉（沿用已知概念；新概念须给出既有组合给不了的价值）。

输出模板：

````markdown
## 需求与 Misfits
- 用户 / 需要 / 问题 / 结果 / 约束

## Concepts

```text
concept <Name> [<TypeParam>]

## purpose
[恰好一个]

## state
- <字段>: <TypeParam> -> <类型>

## actions
<动作> (<入参: 类型>) : (<出参: 类型>)
  requires [前置] ensures [效果]
<动作> (<入参: 类型>) : (error: String)
_<查询> (<入参>) : (<出参>)

## operational principle
after <动作> (<参数>) : (<结果>)
then <动作> (<参数>) : (<结果>)

## notes
[可选：应用角色、类型参数实例化；不设 interactions / dependencies 段]
```

- 判断: 专一 / 完整 / 独立 / 熟悉（每概念附结论）

## Synchronizations
```text
app <应用名>
  include <Concept> [<Type>]

  sync <名>
    when <Concept.action (参数)>
    where <Concept._query (参数) : (绑定)>
    then <Concept.action (参数)>    // 组合理由 / 风险
```

## 依赖图与子集
- 依赖: C1 -> C2, ...（extrinsic，只在此处）
- 子集: {MVP: ...} / {扩展: ...}

## 排除与未决
| 候选/问题 | 结论 | 理由/取舍 |
````

## 参考

| 何时读 | 文件 |
| --- | --- |
| 流程第 4 步：资格五条、四词展开、组合后再查、误判速查表、design moves | `references/criteria.md` |
| 流程第 5 步：sync 记法示例、因果语义规则、模式与信号、依赖图与子集 | `references/sync-notation.md` |
| 需要核验判据出处或引用作者原文 | `references/sources.md` |
