concept-design · diff
git:20260907.f2ef089 to git:20260907.a47d4df
47 added, 156 removed. Audit A to A.
---
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 概念设计
-
- 把需求转成可理解、可评价、可组合的概念模型。停在模型确认;除非用户明确要求,不生成 PRD、架构或代码。本文是按 Jackson 的结构、判据与设计动作整理的操作循环,不冒充作者原文流程。模型确认后:文档化为 PRD 规格用伴生技能 `concept-prd`,代码落地用 `concept-implementation`,存量审计用 `concept-audit`。
-
- ## 核心模型
-
- Concept 同时是用户为有效使用软件而掌握的**心理构造**,和与之对应的**连贯功能单元**。应用由独立 concepts 组成,由 synchronizations(syncs)联结成应用行为;界面和术语表达概念,代码实现概念,但都不是概念本身。
-
- ```text
- Concept = Name + Purpose + Operational Principle + State + Actions
- ```
-
- - **Name**:简短易记,唤起正确、熟悉的心理模型。
- - **Purpose**:为何存在、给谁什么价值;need-focused、specific、evaluable,且恰好一个。
- - **Operational Principle(OP)**:少量端到端典型故事,展示如何使用并兑现 purpose。写法:
- - 历史要足够长,结尾兑现 purpose——注册本身无价值,随后认证才展示 Password 的目的;
- - 一次只解释一个 concept,写 actions 与结果,不写界面、协议或表结构;
- - 先用当前场景的具体对象写以检验价值,成立后再改写为多态通用版本;
- - OP 解释本质,不替代规范:行为由 state machine(state + actions)完整规定。
- - **State**:运行中为支持行为必须记住的事实,不是领域知识或数据库设计。记法用 Alloy 风格关系式(`password: U -> String`;课程 SSF 散文式等价)。User、Item 等实体通常只是类型参数或身份类型,不是顶层模块。
- - **Actions**:用户或系统执行的抽象行为,读取或改变 state;签名写 `动作 (入参: 类型) : (出参: 类型)` 加 requires/ensures,按输出模式拆 case——错误是独立的输出 case(`: (error: String)`),供错误 sync 匹配;不拆成界面步骤。
- - **Queries**(`_` 前缀):只读、不改 state 的查询(`_getUser (session) : (user)`),是常用读取模式的速记,专供 sync 的 where 段;不是 action。
-
- ## 设计循环
-
- 重复 1–5 直到 misfits 消失。先确认 purpose 与边界,再确认名称和细节;全程区分已确认、推断与待决定。
-
- 1. **找需要**:明确受益者、misfit、现有做法、期望结果与约束;把"要什么"追问成"为什么"。暂不讨论页面、数据库和服务。
- 2. **识别候选**:从具体场景自下而上找细粒度目的,优先熟悉、可复用的概念;不从名词表、实体、页面或团队边界映射。边界不明先保留备选。
- 3. **逐个刻画**:写 Name、Purpose、具体 OP,由 OP 推导 actions 和最小 state;删除行为不需要的 state,补齐必要 action,成立后参数化上下文对象。
- 4. **批评边界**:对每个候选过一遍资格判据与四词(见下节),结论只用:`保留`、`拆分`、`合并`、`参数化`、`降级为 type/action/implementation`、`移至 sync`、`待确认`。
- 5. **组合再设计**(记法与规则见「组合:Sync」):
- - 选入 concepts 并以类型参数实例化(`include Session [User.User]`);
- - 写 syncs 表达跨概念行为与应用入口;
- - 核查未被 sync 提及的动作——它们不在应用中出现,须是有意排除;
- - 按欠同步、过同步与 synergy 检视组合质量;
- - 画依赖图、枚举子集,圈定 MVP 与讲解、开发顺序。
-
- 调整用三对 design moves:**split/merge**(控制力 vs 简单)、**unify/specialize**(通用 vs 贴合)、**tighten/loosen**(自动化 vs 灵活)。
-
- ## 判据
-
- **资格**——候选是否够格成为 concept:
-
- - **用户可感(User-facing)**:用户能体验其功能;API 中程序员也是用户。
- - **语义性(Semantic)**:表达抽象意义,不是控件、样式或技术机制。
- - **行为性(Behavioral)**:有动态行为,不只是分类与属性。
- - **目的性(Purposive)**:独立带来真实、可评价的价值。
- - **端到端(End-to-end)**:从动作延伸到兑现目的的结果。
-
- 第六条资格——独立性——与四词中的**独立**是同一判据,见下。
-
- **四词**——批评边界与输出判断统一用这四个词:
-
- - **专一(Specificity)**:只承担一个不可分的目的;多目的即 conflation,拆分。
- - **完整(Completeness)**:含兑现目的所需的全部功能;只有片段即 fragmentation,合并或补齐。
- - **独立(Independence)**:无需引用其他 concept 即可理解;共享对象用类型参数抽象,如 `Comment<Target>` 而非 `Comment<Post>`。
- - **熟悉(Familiarity)**:优先沿用已知概念并保持惯例;新概念须提供熟悉概念或其组合给不了的价值。
-
- **组合后再查**:
-
- - **复用(Reusability)**:通常是四词达标的结果,不是充分条件。
- - **一致(Integrity)**:同一 concept 各处保持名称、目的与行为,组合不改变其含义。
-
- ## 常见误判速查
-
- 名称只是线索:Trash、Password、Reservation 因 purpose 与 behavior 成为 concepts。
-
- | 候选 | 通常归属 | 另立 concept 的条件 |
- | --- | --- | --- |
- | User、Order 等实体 | state 中的类型/身份 | 自身有独立目的和完整动态行为 |
- | 表、类、微服务、页面、控件 | 实现或表达层 | 实现结构恰好承载一个完整 concept 时才可能对应;界面元素不成为 concept |
- | register、save 等 | 单个 action | 自身兑现独立目的时重新判断 |
- | 故事、用例、feature、workflow | 场景/流程切片 | 独立、端到端服务恰好一个目的且有自己的状态机 |
- | 跨概念触发规则 | sync | 自有目的、状态和完整行为 |
-
- ## 组合:Sync
-
- Sync 是概念之外的独立组合层:按因果规则,某些动作发生后引发另一些动作。Concept 规范不点名其他 concepts;组合只写在组合层(app 级的 syncs)。现行记法是 when / where / then 三段式(Beyond Objects,2026;示例改写自 Jackson 的 ExpiringUserSession):
-
- ```text
- app ExpiringUserSession
- include User
- include Session [User.User]
- include ExpiringResource [Session.Session]
+ # 概念设计(Jackson)
- sync login
- when Requesting.login (name, pass)
- where User._authenticate (name, pass) : (user)
- then Session.start (user), ExpiringResource.allocate (session, 300)
+ ## 目标
- sync loginFailed
- when Requesting.login (name, pass)
- where User._authenticate (name, pass) : (error)
- then Requesting.respond (error)
+ 输入:需求、访谈记录或既有概念模型。输出:由独立 concepts 与 synchronizations 组成的概念模型(模板见「记法与模板」),停在模型确认——除非用户明确要求,不出 PRD、架构或代码。确认后交接:文档化 → `concept-prd`;代码落地 → `concept-implementation`;存量审计 → `concept-audit`。
- sync terminate
- when ExpiringResource.expire (resource)
- then Session.end (resource)
- ```
+ Concept 同时是用户为有效使用软件而掌握的**心理构造**,和与之对应的**连贯功能单元**;界面和术语表达概念,代码实现概念,都不是概念本身。本文是按 Jackson 的结构、判据与设计动作整理的操作循环,不冒充作者原文流程。
- **语义规则(因果规则,现行版):**
+ ## 原则
- - **when** 匹配已完成的动作(completion)及其输出;参数全部具名,允许只匹配子集。
- - **where** 经 queries 读取概念状态并绑定变量;绑定不成立则本条 sync 不触发。
- - **then** 触发新的动作调用(invocation);绑定变量跨段传递,sync 同时是数据流。
- - **外部请求也是动作**:端点、定时器等外部入口具体化为 `Requesting` 伪概念的动作,由 sync 接力,响应同样由 sync 产生;应用动作 = 由 Requesting 触发的 sync。
- - **错误即输出**:动作失败输出 `(error: …)` 这个普通的可匹配 case,由错误 sync 响应或补偿,不需要事务语义。
- - **行为保持**:sync 只能调用概念已声明的动作、只能经 queries 读状态,不能使概念做出孤立时不可能的行为;组合因此不破坏一致(Integrity)。
- - **旧版语义已废弃**:书(2021)的 CSP 对称约束与"全有或全无"事务语义被作者本人放弃——"designers find this approach hard to understand … hard to implement, since it requires transactions"(Beyond Objects)。存量模型的旧记法按本节改写。
- - 未被任何 sync 提及的概念动作不在应用中出现;排除是设计决策(Yellkey 不开放 renew),记入排除与未决表。
- - **实现层**由 mediator 或规则引擎落地 sync:组合层引用概念,概念之间零相互引用。
+ 1. 先确认 purpose 与边界,再确认名称和细节;全程区分已确认、推断与待决定。
+ 2. 从具体场景自下而上找目的;表、页面、实体名、团队边界都不直接映射成 concept。
+ 3. 概念规格零点名其他概念(`notes` 段除外);共享对象用类型参数抽象(`Comment [Target]`);跨概念行为只写在 sync。
+ 4. State 与 actions 完整规定行为,OP 只解释本质;三者都不写界面、协议或表结构。
+ 5. Sync 用 when / where / then 因果记法;书(2021)的事务语义已被作者废弃,存量旧记法按现行改写。
+ 6. 被否决的候选与待决取舍全部进「排除与未决」表,不留空悬。
- **模式与信号:**
+ ## 流程
- - **Placeholder 动作**:为同步而设计的概念提供占位动作,钉到其他概念的真实动作上——访问控制的 access、订阅的 notify。
- - **欠同步**:漏掉的自动化(Zoom 举手不随发言结束自动放下)→ tighten。
- - **过同步**:自动化抢走用户控制(日历删除事件即向邀请人发拒绝)→ loosen 或做成可配置。
- - **分解线索**:表面单概念、目的冲突,常是多概念同步(Facebook Like ≈ Upvote、Reaction 等的 sync);回循环第 4 步拆分。
- - **Flow**:打穿概念的业务流程 = 一个外部请求触发、多条细粒度 sync 接力的动作链;流程本身不是另立概念的理由,升格判据见速查表末行(自有目的、状态和完整行为)。
- - **Synergy**:一个概念借另一概念实现自身功能,整体大于部分之和(Trash 做成 Folder,移动动作免费获得还原);强求则反噬(Outlook 把系统日志装进邮件文件夹)。
+ 重复 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 或代码。
- - **Intrinsic dependency**:concept 定义引用另一 concept——必须消除(参数化或移至 sync)。
- - **Extrinsic dependency**:在具体应用中,没有 C2 则纳入 C1 没有意义(Comment 依赖 Post);可以存在,但不写进 C1 的定义。
+ ## 命题
- 以 extrinsic 依赖画图(Parnas 的 uses relation):节点为概念,边 C1 → C2 表示含 C1 的版本必须含 C2。Parnas 规则:**不能没有 B 就用 A,就永远不该想没有 B 用 A**。
+ 产出必须满足,每条可对照文本判真假:
- 依赖图的产出:
+ - 每个 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 子集从图中圈定。
- - **产品家族**:每个"不缺依赖"的概念子集是一个可行产品;用它圈定 MVP 与版本演进。
- - **顺序**:讲解与开发都先做被依赖者(先 Post 后 Comment)。
+ ## 记法与模板
- ## 输出格式
+ - **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 即可理解)、熟悉(沿用已知概念;新概念须给出既有组合给不了的价值)。
- 每概念四节 + 可选 notes,除 notes 外零点名其他概念;确认后可经 `concept-prd` 原样落为与代码共存的 `CONCEPT.md`(与 wyx 架构护栏兼容)。
+ 输出模板:
````markdown
## 需求与 Misfits
- 用户 / 需要 / 问题 / 结果 / 约束
## Concepts
```text
concept <Name> [<TypeParam>]
## purpose
- [恰好一个:为何存在、给谁什么价值]
+ [恰好一个]
## state
- <字段>: <TypeParam> -> <类型>
## actions
<动作> (<入参: 类型>) : (<出参: 类型>)
requires [前置] ensures [效果]
<动作> (<入参: 类型>) : (error: String)
- [错误 case 单列,供错误 sync 匹配]
_<查询> (<入参>) : (<出参>)
- [只读;供 where 段]
## operational principle
after <动作> (<参数>) : (<结果>)
then <动作> (<参数>) : (<结果>)
- [可多条场景,每条以兑现 purpose 收尾]
## notes
- [可选。使用上下文备注的唯一落点(应用角色、类型参数实例化);
- 不设 interactions / dependencies 段——跨概念信息属于 syncs 与依赖图]
+ [可选:应用角色、类型参数实例化;不设 interactions / dependencies 段]
```
- 判断: 专一 / 完整 / 独立 / 熟悉(每概念附结论)
## Synchronizations
```text
app <应用名>
include <Concept> [<Type>]
sync <名>
when <Concept.action (参数)>
where <Concept._query (参数) : (绑定)>
- then <Concept.action (参数)> // 每条 sync 注明组合理由/风险
+ then <Concept.action (参数)> // 组合理由 / 风险
```
## 依赖图与子集
- - 依赖: C1 -> C2, ...(extrinsic,只在此处;不写进概念规格)
+ - 依赖: C1 -> C2, ...(extrinsic,只在此处)
- 子集: {MVP: ...} / {扩展: ...}
## 排除与未决
| 候选/问题 | 结论 | 理由/取舍 |
````
- ## 完成条件
-
- - 每个 concept 恰好一个 purpose,OP 以兑现该 purpose 的结局收尾。
- - 每个 concept 的四词判断均有结论,结论词出自设计循环第 4 步词表。
- - State 与 actions 完整规定行为(queries 只读不改 state),无界面、协议或表结构细节。
- - 概念规格只含 purpose / state / actions / operational principle(可选 notes);除 notes 外零点名其他概念,无 interactions / dependencies 段;跨概念行为全部落在 sync 块,且每条满足行为保持。
- - Sync 用 when / where / then 记法;每个可失败动作的 error case 有错误 sync 处理,或有意不处理并记入排除与未决表。
- - 未被 sync 提及的动作均为有意排除;欠同步、过同步已按 tighten/loosen 检视。
- - 依赖图画出且无违反 Parnas 规则处;MVP 子集从图中圈定。
- - 被否决的候选与待决取舍全部进入排除与未决表,无空悬项。
-
- ## 依据
-
- 核验只用作者原文:
-
- - [Beyond Objects](https://arxiv.org/abs/2606.27258)(2026:现行规格五要素 + queries、when/where/then 因果语义、废弃书版事务语义)
- - [WYSIWID 论文](https://arxiv.org/abs/2508.14511)(规格四节无跨概念段、错误作为可匹配输出、规格即实现 prompt)
- - [官方教程](https://essenceofsoftware.com/tutorials/)(含
- [资格判据](https://essenceofsoftware.com/tutorials/concept-basics/criteria/)、
- [Sync 组合](https://essenceofsoftware.com/tutorials/concept-basics/sync/)、
- [依赖与子集](https://essenceofsoftware.com/tutorials/concept-basics/dependency/))
- - [概念设计综述](https://essenceofsoftware.com/posts/distillation/)(概念独立性原句 "Each concept is defined without reference to any other concepts")
- - [Design moves](https://essenceofsoftware.com/posts/design-moves/)
- - [6.1040 概念评分标准](https://61040-fa25.github.io/resources/concept-rubric)(使用上下文引用仅限 notes 段)
+ ## 参考
- 引用时区分原句、忠实转述与本技能的操作性综合。
+ | 何时读 | 文件 |
+ | --- | --- |
+ | 流程第 4 步:资格五条、四词展开、组合后再查、误判速查表、design moves | `references/criteria.md` |
+ | 流程第 5 步:sync 记法示例、因果语义规则、模式与信号、依赖图与子集 | `references/sync-notation.md` |
+ | 需要核验判据出处或引用作者原文 | `references/sources.md` |