dsh-vibe-math 2.2.0 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2254,6 +2254,16 @@ export function apply(ctx) {
2254
2254
  let beginLock = false
2255
2255
  async function armNextVerify() {
2256
2256
  dbg.arm += 1
2257
+ // A MEETING and a VERIFICATION never run at the same time. `startMeeting` already
2258
+ // parks a meeting while a verification is in flight; this is the missing mirror for
2259
+ // the other direction. Without it, a member replying `propose_verify` while a
2260
+ // meeting was live started a second consensus process immediately, because
2261
+ // `maybeQueueVerify` calls this directly (bypassing schedulePass, whose meeting
2262
+ // check is what used to hide the asymmetry). The meeting's watchdog clock would
2263
+ // then be starved while two coordination processes competed for the same members.
2264
+ // The proposal stays in the queue; schedulePass reaches this again once the
2265
+ // meeting is over.
2266
+ if (meeting) return
2257
2267
  // Only one begin may be in flight. Without this, two callers (a scheduling pass
2258
2268
  // and a fresh proposal) could both pass the `currentVerify()` check before either
2259
2269
  // has published its verdict record and would start the SAME object twice.
@@ -898,6 +898,20 @@ pass,而该 pass 又立刻唤醒同一个任务所有者 —— 一个未完
898
898
  节流后,⑥ 成为兜底:空闲窗口到期时,**拥有进行中任务的成员收到的是常规工作轮**
899
899
  (其状态块里写着"我的任务"),而不是泛泛的心跳轮。
900
900
 
901
+ **① / ② 的相对顺序不可观测,但"互斥"必须双向成立。** 上面的列表把"进行中的验证"写在
902
+ "进行中的会议"之前,代码里则是先看会议再看验证 —— 这**没有差别**,因为两者**永不同时存在**。
903
+ 关键是这条互斥必须**两个方向都堵住**:
904
+
905
+ - 会议侧:`startMeeting` 在 `hasVerifyInFlight()` 时把会议**暂存**(pendingMeeting);
906
+ - 验证侧:`armNextVerify` 在 `meeting` 非空时**直接返回**,让提议留在队列里,
907
+ 等会议收口后由下一次 `schedulePass` 启动。
908
+
909
+ 只做前一半是不够的:`maybeQueueVerify` **直接**调用 `armNextVerify`(绕过了 `schedulePass`
910
+ 的会议检查),所以成员在会议进行中回执 `propose_verify` 时,第二个共识过程会**真的并发启动**,
911
+ 进而与会议争夺同一批成员、饿死会议的看门狗时钟。
912
+ (这个不对称是在为 v5 画架构图、被迫把"会议与验证互斥"写成明确的不变式之后,
913
+ 拿它去逐条对代码才暴露出来的 —— 见 `../AUDIT-CHECKLIST.md` §3。)
914
+
901
915
  与 v4 的实质差别:v4 靠 `activityTimeoutMs` 心跳**轮询**;v5 的主驱动是 **M1 的一次性活动等待**(DSH 官方机制),心跳降级为兜底,token 消耗显著下降。
902
916
 
903
917
  **永不永久停死**(v4 §25 的血泪教训):任何一次唤醒失败都必须**重新武装**调度(`armHeartbeat()`);`scheduleNext` 心跳分支失败后不得无条件 `return`。
@@ -0,0 +1,369 @@
1
+ # Vibe Math V5 架构图
2
+
3
+ > 本文件是 v5 的图源(GitHub 上 Mermaid 会**原生渲染**)。总览大图另有一张生成好的
4
+ > **SVG**:[`../示例图/框架图-v5.svg`](../示例图/框架图-v5.svg),由
5
+ > [`../docs/generate_framework_diagram_v5.mjs`](../docs/generate_framework_diagram_v5.mjs) 生成
6
+ > (零依赖,`node docs/generate_framework_diagram_v5.mjs`)。
7
+ > 文字规格见 [`实现方案.md`](实现方案.md)。
8
+
9
+ **一句话**:v5 = **一个所办**(对外接口,不研究不投票)+ **一所研究所**(院士 / 常驻研究员 / 临时工)
10
+ + **一个只做媒介的框架**(中继 · 沉淀 · 计数 · 调度)。
11
+
12
+ ---
13
+
14
+ ## 1. 总览:三层 + 两个面
15
+
16
+ ```mermaid
17
+ flowchart TB
18
+ subgraph L0["👤 所办(会话根代理 / 人)—— 对外接口"]
19
+ OFF["自然语言接口 + 汇报者<br/>不研究 · 不投票<br/>只汇报、转达人的指令<br/>代持平台要求的一次性创建权"]
20
+ end
21
+
22
+ subgraph L1["🏛️ 研究所(所内自治:编制、组织与分派都在成员之间完成)"]
23
+ ACAD["院士 acad<br/>领头人 · 组织与协调中心<br/>L1 全所视图 / L2 分派 / L3 优先级<br/>L4 主持会议 / L5 督导 / L6 调人 / L7 对外"]
24
+ RES["常驻研究员 r-n(有表决权)<br/>continuable 持久会话 · 自主方向<br/>可自主雇佣/解雇自己的临时工"]
25
+ TMP["临时工 t-n(无表决权)<br/>为特定任务临时雇入<br/>可读/可想/可发言/可写自己的库"]
26
+ end
27
+
28
+ subgraph L2["⚙️ 框架 vibe-v5 —— 只是媒介"]
29
+ MSG["消息中继(持久邮箱)<br/>群聊 / 私信 / 致全体表决者<br/>所办通知 / 分派 / 督办 / 框架提示"]
30
+ MTG["会议 / 辩论<br/>议程 · 名册对账 · 随机发言序<br/>与验证互斥 · 看门狗"]
31
+ TASK["任务板(CAS + DAG)<br/>版本号比较交换 · 依赖环检测"]
32
+ VOTE["m 票共识验证<br/>独立初评 → 公开辩论"]
33
+ CTX["上下文与活性<br/>阈值压缩 · 免轮询活动等待 · 心跳"]
34
+ STAFF["编制与雇佣<br/>真实解雇(释放子会话)"]
35
+ SCHED["调度器<br/>优先级 + 并发闸 maxParallel"]
36
+ end
37
+
38
+ subgraph L3["💾 状态与产物"]
39
+ PROJ["会话日志的 host-only 投影单元<br/>键 vibeMathV5<br/>11 类事件 · 纯折叠 applyV5Event"]
40
+ FS["人可读产物<br/>Members/&lt;id&gt;/* · Shared/* · Verified/ · Problems/"]
41
+ end
42
+
43
+ RULE{{"求真门槛<br/>布尔一致 且 布尔票 ≥ m = min(quorumCap, 有表决权人数)<br/>否则留库 + 平均概率 + 辩论录"}}
44
+
45
+ OFF -->|"vibe_v5_* 工具 / /v5 命令"| SCHED
46
+ SCHED -->|"status / report(自然语言汇报)"| OFF
47
+ SCHED -->|"每轮提示词:状态块 + 本轮问句"| ACAD
48
+ SCHED -->|"每轮提示词:状态块 + 本轮问句"| RES
49
+ SCHED -->|"每轮提示词:状态块 + 本轮问句"| TMP
50
+ ACAD -->|"JSON 回执"| SCHED
51
+ RES -->|"JSON 回执"| SCHED
52
+ TMP -->|"JSON 回执"| SCHED
53
+ ACAD -.->|"所内组织:分派 / 优先级 / 督办(虚线 = 不由框架执行)"| RES
54
+ ACAD -.->|"调配"| TMP
55
+ MSG --- SCHED
56
+ MTG --- SCHED
57
+ TASK --- SCHED
58
+ VOTE --- SCHED
59
+ CTX --- SCHED
60
+ STAFF --- SCHED
61
+ SCHED <-->|"append 事件 / 折叠读状态"| PROJ
62
+ SCHED <-->|"读写产物"| FS
63
+ VOTE --> RULE
64
+ RULE -->|"定论"| FS
65
+
66
+ classDef human fill:#f1eefc,stroke:#5b4bb8,stroke-width:1.5px,color:#2b2359
67
+ classDef house fill:#fdf5e2,stroke:#b26a00,stroke-width:1.5px,color:#6b4200
68
+ classDef frame fill:#eaf3fd,stroke:#0b6fb8,stroke-width:1.5px,color:#084d80
69
+ classDef data fill:#eef7f1,stroke:#1f7a52,stroke-width:1.5px,color:#125a3c
70
+ classDef gate fill:#fdeef0,stroke:#b3202c,stroke-width:2px,color:#7d1620
71
+ class OFF human
72
+ class ACAD,RES,TMP house
73
+ class MSG,MTG,TASK,VOTE,CTX,STAFF,SCHED frame
74
+ class PROJ,FS data
75
+ class RULE gate
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 2. 成员生命周期
81
+
82
+ ```mermaid
83
+ stateDiagram-v2
84
+ direction LR
85
+ [*] --> provisioning : newMember(分配代号,代号永不复用)
86
+ provisioning --> active : spawnMember 成功<br/>先落盘编制、再构造入职提示词
87
+ provisioning --> failed : startContinuable 抛错
88
+ active --> active : 一轮结束(subagent/end)→ 回执 → 调度
89
+ active --> dismissed : fire(真实释放子会话 + 收回任务 + 丢弃邮件)
90
+ dismissed --> [*]
91
+ failed --> [*] : 在 [未就位] 里对全所可见
92
+
93
+ note right of active
94
+ 每轮:框架发「状态块 + 本轮问句」,
95
+ 成员回一个 JSON(say/progress/record/
96
+ verdict/task_*/hire/fire/reject_assign/…)
97
+ end note
98
+ note right of dismissed
99
+ 未完成的任务自动释放回板;
100
+ 代号永不复用,重新雇佣会得到新代号
101
+ end note
102
+ ```
103
+
104
+ ---
105
+
106
+ ## 3. 一轮唤醒的时序(唯一的推进驱动)
107
+
108
+ ```mermaid
109
+ sequenceDiagram
110
+ autonumber
111
+ participant S as 调度器(框架代码)
112
+ participant M as 成员(continuable 子会话)
113
+ participant L as 会话日志投影(vibeMathV5)
114
+
115
+ S->>S: schedulePass:按优先级挑一个成员
116
+ S->>S: 先 ack 收件箱,再构造本轮提示词
117
+ S->>M: 【轮次】+ 状态块(编制/m/我的任务/新消息)+ 回执契约
118
+ M->>M: 读同事的库 · 推导 · 写自己的 Progress/ 与卡片
119
+ M-->>S: subagent/end + 单个 JSON 回执
120
+ S->>L: append 事件(message / progress / verdict / …)
121
+ S->>S: handleReply:发言 / 入库 / 任务 / 提议 / 投票 / 雇佣
122
+ S->>S: 记 contextPct;必要时发压缩指令
123
+ S->>S: scheduleNext()(蹦床:同一时刻只有一个调度 pass)
124
+ ```
125
+
126
+ > 关键点:**成员的一轮结束是唯一的推进驱动**。没有轮询;`vibe_v5_wait` 是一次性活动等待,
127
+ > 心跳只是最后的兜底,且每次唤醒后**永远重新武装**,所以调度器不会永久冻结。
128
+
129
+ ---
130
+
131
+ ## 4. 共识验证状态机(m 票布尔一致)
132
+
133
+ ```mermaid
134
+ stateDiagram-v2
135
+ [*] --> queued : 任何成员 propose_verify
136
+ queued --> initial : armNextVerify(会议进行中则排队等待)
137
+ initial --> debate : 所有表决者都答完<br/>但未定论且轮次 < verdictMaxRounds
138
+ debate --> debate : 重新投票(history 存上一轮)
139
+ initial --> true_ : 布尔票 ≥ m 且全为 1
140
+ initial --> false_ : 布尔票 ≥ m 且全为 0
141
+ debate --> true_
142
+ debate --> false_
143
+ initial --> undecided : 轮次用尽,或布尔票不足 m,或出现 1 与 0 分歧
144
+ debate --> undecided
145
+ true_ --> [*] : 写 Verified/卡 + 改写来源卡 + 辩论录
146
+ false_ --> [*] : 同上(结论为假)
147
+ undecided --> [*] : 留原库 + 全组平均概率 + 完整辩论录(不强行裁决)
148
+
149
+ note right of initial
150
+ 票是 [0,1] 的数值:
151
+ 恰好 1 = 断言为真;恰好 0 = 断言为假;
152
+ 严格介于两者 = 弃权/存疑
153
+ (不计入 m,但计入平均)
154
+ end note
155
+ note left of undecided
156
+ 看门狗:超过 2×activityTimeoutMs
157
+ 没有新票 → 放弃该验证并回到自组织
158
+ end note
159
+ ```
160
+
161
+ **判定规则(`judgeVerdict`)**:任何一张反向布尔票都**阻塞**定论 —— 少数派无法靠别人弃权
162
+ 把结论推过去。`quorumMode: "all-unanimous"` 可切回 v4 的"全体有表决权者一致"口径。
163
+
164
+ ---
165
+
166
+ ## 5. 会议流程(与验证互斥)
167
+
168
+ ```mermaid
169
+ flowchart TB
170
+ A["任何人 vibe_v5_meeting"] --> B{"院士或所办?"}
171
+ B -->|"否(含临时工)"| C["只能提议:框架转呈全体表决者<br/>署名 = 真实提议人"]
172
+ B -->|"是"| D{"已有验证进行中?"}
173
+ D -->|"是"| E["暂存 pendingMeeting<br/>(只保留第一条,后到者不覆盖)"]
174
+ D -->|"否"| F["真正召开:写纪要头 + 公告群聊"]
175
+ E -->|"验证清空后"| F
176
+ F --> G["按随机顺序逐个唤醒发言<br/>每人看到此前已发言者的意见"]
177
+ G --> H{"全部在册成员都发言了?"}
178
+ H -->|"否"| I["继续收集(跳过仍在忙的人)<br/>看门狗:2×activityTimeoutMs 无新发言 → 放弃"]
179
+ I --> H
180
+ H -->|"是"| J["收口:汇总表决 / 讨论结论<br/>检查是否全体认为已解决"]
181
+ J --> K["暂存会议补开(若有)"]
182
+ ```
183
+
184
+ **互斥的双向保证**(v2.2.2 起对称):
185
+ - `startMeeting`:验证进行中 → **会议暂存**;
186
+ - `armNextVerify`:会议进行中 → **验证排队**(此前只做了前一半,成员在会上提议验证会真的
187
+ 并发启动第二个共识过程,进而饿死会议的看门狗时钟)。
188
+
189
+ ---
190
+
191
+ ## 6. 调度优先级(`schedulePass`)
192
+
193
+ ```mermaid
194
+ flowchart TB
195
+ S["一轮结束 / 提议 / 定时器到期 → scheduleNext()(蹦床:只有一个 pass 在跑)"] --> P1
196
+ P1{"有进行中的会议?"} -->|"是"| M["continueMeetingRound()<br/>缺人则继续问;齐了就收口"]
197
+ P1 -->|"否"| P2{"有进行中的验证?"}
198
+ P2 -->|"是"| V["continueVerifyRound()<br/>缺票则继续问;齐了就裁定"]
199
+ P2 -->|"否"| P3["armNextVerify():启动队列里的下一个验证"]
200
+ P3 --> P4{"有暂存会议?"}
201
+ P4 -->|"是"| P5["beginMeeting()"]
202
+ P4 -->|"否"| P6["按 maxParallel 填并发预算:<br/>① 已认领/被分派的在办任务(按 activityTimeoutMs 节流)<br/>② 加急邮件(私信/分派/督办/框架提示)<br/>③ 到期群聊摘要"]
203
+ P6 --> P7{"本所停滞超过 stallAutoMeetingMs<br/>且无人在跑?"}
204
+ P7 -->|"是"| P8["自动召集一次同步会议(只促成,不指派)"]
205
+ P7 -->|"否"| P9{"最久未动者已空闲 ≥ activityTimeoutMs?"}
206
+ P9 -->|"是"| P10["推一把:有在办任务 → 常规工作轮;否则 → 心跳轮"]
207
+ P9 -->|"否"| P11["armDigest() + armHeartbeat()"]
208
+ ```
209
+
210
+ ---
211
+
212
+ ## 7. 状态:纯折叠 + 双后端
213
+
214
+ ```mermaid
215
+ flowchart LR
216
+ subgraph EV["11 类事件"]
217
+ E["institute · member · task · message · delivered ·<br/>meeting · debate · verdict · queue · counters · progress"]
218
+ end
219
+ EV --> FOLD["applyV5Event(纯函数折叠,只此一份)"]
220
+ FOLD --> ST["V5State<br/>{ institutes, order, diagnostics }"]
221
+ ST --> R1["读:stateOf(session, 'vibeMathV5')"]
222
+ ST --> R2["未知/损坏事件 → 跳过 + 记入 diagnostics<br/>(可用性优先,绝不因一条坏事件卡死全场)"]
223
+
224
+ subgraph B1["主后端(宿主有 sessionProjections)"]
225
+ P1["事件只追加进会话日志<br/>不进模型上下文 = 零 token 成本"]
226
+ P2["checkpoint 由 DSH 负责;restore 时<br/>从快照 + 日志尾部重新折叠"]
227
+ end
228
+ subgraph B2["回退后端(宿主没有该服务)"]
229
+ F1["加固 JSON:State/&lt;institute&gt;.v5state.json<br/>同一份折叠 · 串行写 · 写前必 load"]
230
+ end
231
+ R1 --> B1
232
+ R1 --> B2
233
+
234
+ style FOLD fill:#eaf3fd,stroke:#0b6fb8
235
+ style P1 fill:#eef7f1,stroke:#1f7a52
236
+ style P2 fill:#eef7f1,stroke:#1f7a52
237
+ style F1 fill:#fdf5e2,stroke:#b26a00
238
+ ```
239
+
240
+ **为什么用投影**:v4 的 `State/*.json` 直写带来"损坏静默覆盖 / 并发丢写 / 跨进程陈旧快照"一整类问题。
241
+ v5 的副作用只是往会话日志追加事件,跨进程与同进程恢复**走同一条代码路径**。
242
+
243
+ ---
244
+
245
+ ## 8. 提示词是怎么构成的(成员读到的文字 = 产品)
246
+
247
+ ```mermaid
248
+ flowchart LR
249
+ subgraph P["人设 persona(入职时冻结,随会话持久化,压缩后依然有效)"]
250
+ CH["公共规章(十节)<br/>编制与同事 · 通用规章 · 资料库与 progress<br/>组织与协调 · 表决规则 · 每轮节奏<br/>雇佣解雇 · 任务板 · 上下文纪律 · 停止条件"]
251
+ end
252
+ subgraph R["每轮提示词(临时,短)"]
253
+ ST["状态块<br/>&#91;状态&#93; 你是 &lt;代号&gt;(职位)|轮次|m|表决者数<br/>&#91;在册&#93; … &#91;未就位&#93; …<br/>&#91;任务板&#93; … &#91;新到的消息/通知&#93; …"]
254
+ ASK["本轮问句(常规 / 心跳 / 会议 / 表决)<br/>+ 收件箱(先 ack 再构造,绝不重复投递)"]
255
+ SPEC["回执契约(按职位裁剪)<br/>say / progress / record / propose_verify / verdict<br/>propose_meeting / task_* / reject_assign / input<br/>hire / fire / vote_solved / solved / contextPct / compacted"]
256
+ end
257
+ P --> MEM["成员(子会话)"]
258
+ R --> MEM
259
+ MEM --> OUT["单个 JSON 回执"]
260
+
261
+ style CH fill:#fdf5e2,stroke:#b26a00
262
+ style ST fill:#eaf3fd,stroke:#0b6fb8
263
+ style ASK fill:#eaf3fd,stroke:#0b6fb8
264
+ style SPEC fill:#eaf3fd,stroke:#0b6fb8
265
+ ```
266
+
267
+ **身份不变式(有测试与语料保证)**:
268
+
269
+ - 提示词里的身份 = 这条提示词**实际发给的成员**;题头、`[状态]`、人设资料库路径三者必须一致;
270
+ - 成员**先落盘进编制、再构造**它的入职提示词(否则会漏掉自己、并按加入前的编制算 m);
271
+ - 章程快照**冻结在入职时**(它写着"你入职时的在册编制"),重建会话时原样复用;
272
+ - 会话重建框为 `【会话重建】`,**不**自称"刚入职";
273
+ - 领袖叙事跟随真实编制:没有院士时,章程不得声称存在院士或承诺其派活;
274
+ - 框头按**真实来源**标注(所办分派 ≠ 院士分派;督办 ≠ 分派;致全体表决者 ≠ 私信);
275
+ - 框架反馈有独立发送者(`【框架提示】`),且**一次提示词只投递一条消息**。
276
+
277
+ ---
278
+
279
+ ## 9. 任务板(compare-and-set + DAG)
280
+
281
+ ```mermaid
282
+ flowchart LR
283
+ A["task_create<br/>subject / description / blocked_by / write_scopes / priority"] --> B["pending"]
284
+ B -->|"task_claim(全部依赖已完成才可认领)"| C["in_progress"]
285
+ C -->|"complete"| D["completed"]
286
+ C -->|"release"| B
287
+ D -->|"reopen"| B
288
+ B -->|"delete(有依赖者则拒绝)"| E["deleted"]
289
+ C -->|"reassign(仅院士/所办)"| C
290
+ F["任何修改都要带 expected_revision<br/>版本不符 → V5_TASK_STALE_REVISION"] -.-> A
291
+ G["owner 被解雇 → releaseTasksOf 自动收回"] -.-> B
292
+
293
+ style B fill:#eaf3fd,stroke:#0b6fb8
294
+ style C fill:#fdf5e2,stroke:#b26a00
295
+ style D fill:#eef7f1,stroke:#1f7a52
296
+ ```
297
+
298
+ ---
299
+
300
+ ## 10. 职权矩阵
301
+
302
+ | 动作 | 院士 | 常驻研究员 | 临时工 | 所办 |
303
+ |---|---|---|---|---|
304
+ | 发言 / 私信 / 致全体表决者 | ✅ | ✅ | ✅ | ✅(所办通知) |
305
+ | 写自己的成果库 / 认领任务 | ✅ | ✅ | ✅ | ❌(不是成员) |
306
+ | **表决**(进 `Verified/`) | ✅ 一票 | ✅ 一票 | ❌ | ❌ |
307
+ | 提议验证 / 提议开会 | ✅ | ✅ | ✅ | ✅(可直接召开) |
308
+ | **直接召开会议** | ✅ | ❌(只能提议) | ❌ | ✅ |
309
+ | **分派任务**(`vibe_v5_assign`) | ✅ | ❌ | ❌ | ✅ |
310
+ | 设定优先级(`vibe_v5_prioritize`) | ✅ | ❌ | ❌ | ✅ |
311
+ | 督导(`vibe_v5_nudge`) | ✅ | ❌ | ❌ | ✅ |
312
+ | **雇佣临时工** | ✅ | ✅(自己的) | ❌ | ✅ |
313
+ | **解雇临时工** | ✅(任何) | ✅(自己雇的) | ❌ | ✅ |
314
+ | 增聘 / 解聘**常驻研究员** | ❌(建议) | ❌(建议) | ❌ | ✅ |
315
+ | 暂停 / 恢复 / 停止 / 调参 | ❌ | ❌ | ❌ | ✅ |
316
+
317
+ > **分派不改变真假**:院士能分派工作、定优先级,但不能让任何断言因此变正确 ——
318
+ > 对象进 `Verified/` 仍然只能靠 m 票布尔一致。
319
+
320
+ ---
321
+
322
+ ## 11. 目录结构与制品
323
+
324
+ ```text
325
+ <会话工作区>/VibeMath/Projects/<项目>/Institutes/<研究所>/
326
+ ├─ Institutes.md # 编制镜像(人读快照,勿手改)
327
+ ├─ Problems/<id>.md # 原问题
328
+ ├─ Problems/conclusion.md # 结题记录(全体有表决权者一致认为已解决时生成)
329
+ ├─ Members/<代号>/
330
+ │ ├─ Progress/progress.md # 研究日志(叙述体,可追加;压缩后恢复状态的主要依据)
331
+ │ ├─ Propos/<id>.md # 命题
332
+ │ ├─ Methods/<id>.md # 方法 / 理论 / 工具
333
+ │ └─ Subproblems/<id>.md # 子问题
334
+ ├─ Shared/
335
+ │ ├─ Chat/<日期>.md # 群聊记录
336
+ │ ├─ Meetings/<mt-id>.md # 会议纪要(含表决小节)
337
+ │ ├─ Debates/<对象>.md # 辩论录(各轮票与理由 + 平均概率)
338
+ │ ├─ TaskBoard.md # 任务板镜像
339
+ │ └─ State-of-institute.md # 各成员对"是否已解决"的判断快照
340
+ ├─ Verified/<类型>/<id>.md # 定论(只读;只有它能被当作已确立)
341
+ └─ State/
342
+ ├─ README.md # 说明"权威状态在会话日志投影里,不是这里"
343
+ └─ <研究所>.v5state.json # 仅当宿主缺 sessionProjections 时的回退权威源
344
+ ```
345
+
346
+ **可信分层**:只有 `Verified/` 与标注"已验证·真/假"的卡片**绝对可信**;
347
+ `Progress/`、`Methods/`、未定论命题、他人推测都只是**经验参考**,引用时必须注明"未验证"。
348
+
349
+ ---
350
+
351
+ ## 12. 不变式速查(这些都有测试守着)
352
+
353
+ | 不变式 | 由谁保证 |
354
+ |---|---|
355
+ | 提示词身份 = 收件人;题头/状态块/人设三者一致 | `prompt-v5-integrity.test.mjs`(逐条断言 + 语料) |
356
+ | 成员先落盘进编制、再构造入职提示词 | 同上 |
357
+ | 章程冻结在入职时;重建会话自称"重建" | 同上 |
358
+ | 无院士时不出现任何院士叙事 | 同上 |
359
+ | 框头署名 = 真实来源 | 同上 |
360
+ | 一次提示词不重复投递同一条消息 | 同上 |
361
+ | 回执契约涵盖框架真正处理的每个字段 | 同上 |
362
+ | 只有 ≥ m 张一致的布尔票才能定论 | `selfdrive-v5.mjs` / `e2e-v5-round2.test.mjs` |
363
+ | 反向布尔票阻塞结论 | 同上 |
364
+ | 临时工无表决权、不能雇佣 | 同上 |
365
+ | 只有院士/所办能分派、定优先级、督办 | 同上 |
366
+ | 会议与验证互斥(双向) | `prompt-v5-integrity.test.mjs` |
367
+ | 解雇是真实的(释放子会话、收回任务) | `selfdrive-v5.mjs` |
368
+ | 跨进程恢复不丢研究所 | `e2e-v5-round2.test.mjs` |
369
+ | 每条不变式都有能让套件变红的探针 | `audit-v5-sensitivity.mjs` + [`../AUDIT-CHECKLIST.md`](../AUDIT-CHECKLIST.md) |
@@ -0,0 +1,168 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1720 1116" width="1720" height="1116" role="img" aria-label="Vibe Math V5 研究所架构图">
3
+ <defs>
4
+ <marker id="both" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#7d93a3"/></marker>
5
+ <marker id="bothHuman" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#5b4bb8"/></marker>
6
+ <marker id="bothFrame" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#0b6fb8"/></marker>
7
+ <marker id="bothData" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#1f7a52"/></marker>
8
+ <marker id="bothHouse" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse"><path d="M 0 0 L 10 5 L 0 10 z" fill="#b26a00"/></marker>
9
+ </defs>
10
+ <rect width="1720" height="1116" fill="#ffffff"/>
11
+ <g font-family="'Microsoft YaHei','PingFang SC','Hiragino Sans GB','Noto Sans CJK SC','Source Han Sans SC',sans-serif">
12
+ <text x="860" y="40" font-size="27" font-weight="700" fill="#10202e" text-anchor="middle">Vibe Math V5 —— 研究所体系</text>
13
+ <text x="860" y="67" font-size="13" font-weight="400" fill="#5d7788" text-anchor="middle">框架只是媒介:中继消息 · 沉淀产物 · 计数表决 · 管理上下文。它绝不指派任务 —— 组织与分派是所内院士的职责</text>
14
+ <rect x="40" y="84" width="1640" height="94" rx="14" fill="#fdeef0" stroke="#b3202c" stroke-width="2"/>
15
+ <text x="58" y="111" font-size="15" font-weight="700" fill="#b3202c">求真门槛 —— 唯一让对象进入 Verified/ 的规则</text>
16
+ <text x="58" y="131" font-size="12" fill="#5d7788">m = min(quorumCap, 在册有表决权人数) · 票是 [0,1] 概率:恰好 1 = 断言为真,恰好 0 = 断言为假,严格介于两者 = 弃权/存疑(不计入 m,计入全组平均)</text>
17
+ <rect x="62" y="140" width="506" height="28" rx="10" fill="#ffffff" stroke="#b3202c" stroke-width="1.6"/>
18
+ <text x="315" y="158.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">布尔票 ≥ m 且全部为 1 或全部为 0 → 定论,写入 Verified/</text>
19
+ <rect x="588" y="140" width="506" height="28" rx="10" fill="#ffffff" stroke="#b3202c" stroke-width="1.6"/>
20
+ <text x="841" y="158.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">同时出现 1 与 0 → 阻塞:少数派无法靠别人弃权把结论推过去</text>
21
+ <rect x="1114" y="140" width="524" height="28" rx="10" fill="#ffffff" stroke="#b3202c" stroke-width="1.6"/>
22
+ <text x="1376" y="158.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">未达门槛 → 留在原库 + 全组平均概率 + 完整辩论录(不强行裁决)</text>
23
+ <rect x="40" y="190" width="1640" height="100" rx="14" fill="#f1eefc" stroke="#5b4bb8" stroke-width="2"/>
24
+ <text x="58" y="217" font-size="15" font-weight="700" fill="#5b4bb8">所办(会话根代理 / 人)—— 研究所的对外接口</text>
25
+ <text x="58" y="237" font-size="12" fill="#5d7788">不参与研究 · 不投票 · 只汇报与转达人的指令;代持平台要求的一次性创建权</text>
26
+ <rect x="62" y="246" width="372" height="38" rx="10" fill="#ffffff" stroke="#5b4bb8" stroke-width="1.6"/>
27
+ <text x="248" y="261.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">自然语言接口 + 汇报者</text>
28
+ <text x="248" y="277.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">「求解 XX」「进度如何」「暂停」</text>
29
+ <rect x="452" y="246" width="372" height="38" rx="10" fill="#ffffff" stroke="#5b4bb8" stroke-width="1.6"/>
30
+ <text x="638" y="261.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">vibe_v5_configure → start</text>
31
+ <text x="638" y="277.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">message / meeting / hire / fire</text>
32
+ <rect x="842" y="246" width="330" height="38" rx="10" fill="#ffffff" stroke="#5b4bb8" stroke-width="1.6"/>
33
+ <text x="1007" y="261.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">pause / resume / stop</text>
34
+ <text x="1007" y="277.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">set 调参(立即生效)</text>
35
+ <rect x="1190" y="246" width="448" height="38" rx="10" fill="#ffffff" stroke="#5b4bb8" stroke-width="1.6"/>
36
+ <text x="1414" y="261.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">/v5 斜杠命令(与工具等价)</text>
37
+ <text x="1414" y="277.3" font-size="9" font-weight="400" fill="#2c4557" text-anchor="middle">configure|start|resume|pause|status|report|members|message|meeting|hire|fire|set</text>
38
+ <rect x="226" y="302" width="1454" height="240" rx="14" fill="#fdf5e2" stroke="#b26a00" stroke-width="2"/>
39
+ <text x="244" y="329" font-size="15" font-weight="700" fill="#8a5200">研究所(所内自治)—— 编制、组织与分派都在成员之间完成,框架永不指派</text>
40
+ <text x="244" y="349" font-size="12" fill="#5d7788">院士 acad:领头人 / 组织与协调中心 · 常驻研究员 r-n:有表决权 · 临时工 t-n:无表决权(由雇主雇入与解雇)</text>
41
+ <rect x="248" y="362" width="300" height="142" rx="10" fill="#ffffff" stroke="#b26a00" stroke-width="1.6"/>
42
+ <text x="398" y="376.6" font-size="13.5" font-weight="700" fill="#10202e" text-anchor="middle">院士 acad</text>
43
+ <text x="398" y="394.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">领头人 · 组织与协调中心</text>
44
+ <text x="398" y="411.6" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L1 建立全所视图(overview)</text>
45
+ <text x="398" y="429.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L2 拆解并分派任务(assign)</text>
46
+ <text x="398" y="446.6" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L3 设定优先级(prioritize)</text>
47
+ <text x="398" y="464.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L4 召集并主持会议(convene)</text>
48
+ <text x="398" y="481.6" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L5 督导进度(nudge)</text>
49
+ <text x="398" y="499.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">L6 调配临时工 · L7 对外代表</text>
50
+ <text x="398" y="520" font-size="10" font-weight="400" fill="#b3202c" text-anchor="middle">四条边界:一票与他人等重 / 分派的是工作不是结论 /</text>
51
+ <text x="398" y="536" font-size="10" font-weight="400" fill="#b3202c" text-anchor="middle">成员可据理反对 / 不能自我扩张编制</text>
52
+ <text x="576" y="372" font-size="11.5" font-weight="700" fill="#8a5200" text-anchor="start">常驻研究员(有表决权 · 可自主雇佣/解雇自己的临时工)</text>
53
+ <rect x="576" y="380" width="326" height="52" rx="10" fill="#ffffff" stroke="#b26a00" stroke-width="1.6"/>
54
+ <text x="739" y="402.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">常驻研究员 r-1</text>
55
+ <text x="739" y="419.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">continuable 持久会话 · 自主方向 · 主动汇报</text>
56
+ <rect x="922" y="380" width="326" height="52" rx="10" fill="#ffffff" stroke="#b26a00" stroke-width="1.6"/>
57
+ <text x="1085" y="402.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">常驻研究员 r-2</text>
58
+ <text x="1085" y="419.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">continuable 持久会话 · 自主方向 · 主动汇报</text>
59
+ <rect x="1268" y="380" width="326" height="52" rx="10" fill="#ffffff" stroke="#b26a00" stroke-width="1.6"/>
60
+ <text x="1431" y="402.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">常驻研究员 r-3</text>
61
+ <text x="1431" y="419.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">continuable 持久会话 · 自主方向 · 主动汇报</text>
62
+ <text x="576" y="452" font-size="11.5" font-weight="700" fill="#8a5200" text-anchor="start">临时工(无表决权 · 为特定任务临时雇入 · 雇主或院士可解雇)</text>
63
+ <rect x="576" y="460" width="326" height="52" rx="10" fill="#ffffff" stroke="#c99a4a" stroke-width="1.6"/>
64
+ <text x="739" y="482.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">临时工 t-1</text>
65
+ <text x="739" y="499.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">由 r-1 雇入 · 可读/可想/可发言/可写自己的库</text>
66
+ <rect x="922" y="460" width="326" height="52" rx="10" fill="#ffffff" stroke="#c99a4a" stroke-width="1.6"/>
67
+ <text x="1085" y="482.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">临时工 t-2</text>
68
+ <text x="1085" y="499.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">由 r-2 雇入 · 可读/可想/可发言/可写自己的库</text>
69
+ <rect x="1268" y="460" width="326" height="52" rx="10" fill="#ffffff" stroke="#c99a4a" stroke-width="1.6"/>
70
+ <text x="1431" y="482.2" font-size="13" font-weight="700" fill="#10202e" text-anchor="middle">临时工 t-3</text>
71
+ <text x="1431" y="499.2" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">由 r-3 雇入 · 可读/可想/可发言/可写自己的库</text>
72
+ <text x="576" y="536" font-size="10.5" font-weight="400" fill="#5d7788" text-anchor="start">所内组织动作(分派 · 优先级 · 督办 · 会议 · 用人)由院士发起,不是框架行为 —— 框架只负责送达</text>
73
+ <rect x="226" y="566" width="1454" height="286" rx="14" fill="#eaf3fd" stroke="#0b6fb8" stroke-width="2"/>
74
+ <text x="244" y="593" font-size="15" font-weight="700" fill="#084d80">框架 vibe-v5 —— 只是媒介(middleware):中继 · 沉淀 · 计数 · 调度</text>
75
+ <text x="244" y="613" font-size="12" fill="#5d7788">每轮发「状态块 + 本轮问句」(规章在 persona 里,不进对话);成员回一个 JSON:say / progress / record / verdict / task_* / hire / fire / reject_assign / input / vote_solved</text>
76
+ <rect x="248" y="620" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
77
+ <text x="475.66666666666663" y="638.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">消息中继(持久邮箱)</text>
78
+ <text x="475.66666666666663" y="655.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">群聊 / 私信 / 致全体表决者</text>
79
+ <text x="475.66666666666663" y="671.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">所办通知 / 分派 / 督办 / 框架提示</text>
80
+ <text x="475.66666666666663" y="688.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">逐收件人落盘 · 先落盘再投递 · 群聊合批</text>
81
+ <rect x="725.3333333333333" y="620" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
82
+ <text x="952.9999999999999" y="638.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">会议 / 辩论</text>
83
+ <text x="952.9999999999999" y="655.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">议程 · 实时名册对账 · 随机发言序</text>
84
+ <text x="952.9999999999999" y="671.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">与验证互斥:任一方进行中,另一方排队</text>
85
+ <text x="952.9999999999999" y="688.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">看门狗:卡死即放弃并回到自组织</text>
86
+ <rect x="1202.6666666666665" y="620" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
87
+ <text x="1430.3333333333333" y="638.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">任务板(CAS + DAG)</text>
88
+ <text x="1430.3333333333333" y="655.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">开 / 认领 / 释放 / 完成 / 重开 / 分派</text>
89
+ <text x="1430.3333333333333" y="671.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">版本号比较交换 · 依赖环检测</text>
90
+ <text x="1430.3333333333333" y="688.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">写范围重叠告警 · 解雇自动收回</text>
91
+ <rect x="248" y="708" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
92
+ <text x="475.66666666666663" y="726.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">m 票共识验证</text>
93
+ <text x="475.66666666666663" y="743.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">发起 → 独立初评 → 公开辩论重投</text>
94
+ <text x="475.66666666666663" y="759.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">布尔一致 + ≥ m 才定论</text>
95
+ <text x="475.66666666666663" y="776.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">Verified/ 卡 + 辩论录 + 全组平均概率</text>
96
+ <rect x="725.3333333333333" y="708" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
97
+ <text x="952.9999999999999" y="726.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">上下文与活性</text>
98
+ <text x="952.9999999999999" y="743.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">阈值压缩(人设不丢)· 免轮询活动等待</text>
99
+ <text x="952.9999999999999" y="759.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">优先级调度 · 心跳永远重武装</text>
100
+ <text x="952.9999999999999" y="776.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">并发闸 maxParallel · 停滞自动开会</text>
101
+ <rect x="1202.6666666666665" y="708" width="455.3333333333333" height="78" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
102
+ <text x="1430.3333333333333" y="726.8" font-size="12.5" font-weight="700" fill="#10202e" text-anchor="middle">编制与雇佣</text>
103
+ <text x="1430.3333333333333" y="743.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">院士/研究员可雇自己的临时工</text>
104
+ <text x="1430.3333333333333" y="759.8" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">雇主或院士可真实解雇(释放子会话)</text>
105
+ <text x="1430.3333333333333" y="776.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">代号永不复用 · 按人/全所双配额</text>
106
+ <rect x="248" y="796" width="1410" height="38" rx="10" fill="#ffffff" stroke="#0b6fb8" stroke-width="1.6"/>
107
+ <text x="953" y="819.1" font-size="11.5" font-weight="700" fill="#10202e" text-anchor="middle">调度器优先级:进行中的会议或验证(二者互斥,永不同时)→ 队列中的验证 → 暂存会议 → 已认领/被分派的在办任务(按 activityTimeoutMs 节流)→ 加急邮件 → 群聊摘要 → 停滞自动开会 → 兜底心跳</text>
108
+ <rect x="40" y="876" width="790" height="196" rx="14" fill="#eef7f1" stroke="#1f7a52" stroke-width="2"/>
109
+ <text x="58" y="903" font-size="15" font-weight="700" fill="#125a3c">状态权威源:会话日志的 host-only 投影单元(键 vibeMathV5)</text>
110
+ <text x="58" y="923" font-size="12" fill="#5d7788">副作用只是往会话日志追加事件 —— 不进模型上下文(零 token 成本),checkpoint / restore 交给 DSH</text>
111
+ <rect x="62" y="932" width="360" height="124" rx="10" fill="#ffffff" stroke="#1f7a52" stroke-width="1.6"/>
112
+ <text x="242" y="958.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">applyV5Event(纯折叠,只此一份)</text>
113
+ <text x="242" y="974.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">11 类事件:institute / member / task /</text>
114
+ <text x="242" y="990.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">message / delivered / meeting / debate /</text>
115
+ <text x="242" y="1006.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">verdict / queue / counters / progress</text>
116
+ <text x="242" y="1022.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">未知或损坏事件 → 跳过并记入 diagnostics:</text>
117
+ <text x="242" y="1038.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">可用性优先,绝不因一条坏事件卡死全场</text>
118
+ <rect x="434" y="932" width="374" height="124" rx="10" fill="#ffffff" stroke="#1f7a52" stroke-width="1.6"/>
119
+ <text x="621" y="958.3" font-size="12" font-weight="700" fill="#10202e" text-anchor="middle">checkpoint / restore / resume</text>
120
+ <text x="621" y="974.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">投影随会话日志一起 checkpoint;restore</text>
121
+ <text x="621" y="990.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">时从快照 + 日志尾部重新折叠 → 跨进程与</text>
122
+ <text x="621" y="1006.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">同进程恢复走同一条代码路径</text>
123
+ <text x="621" y="1022.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">回退:宿主无 sessionProjections 时改用</text>
124
+ <text x="621" y="1038.3" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">加固 JSON:State/&lt;institute&gt;.v5state.json</text>
125
+ <rect x="852" y="876" width="828" height="196" rx="14" fill="#eef7f1" stroke="#1f7a52" stroke-width="2"/>
126
+ <text x="870" y="903" font-size="15" font-weight="700" fill="#125a3c">文件面:人可读产物(投影之外的一切都只是镜像)</text>
127
+ <text x="870" y="923" font-size="12" fill="#5d7788">共识的权威在投影;文件是工作区与可读产物,手工改坏不会破坏研究所</text>
128
+ <rect x="874" y="932" width="784" height="124" rx="10" fill="#ffffff" stroke="#1f7a52" stroke-width="1.6"/>
129
+ <text x="1266" y="967.1" font-size="11.5" font-weight="700" fill="#10202e" text-anchor="middle">Members/&lt;id&gt;/Progress|Propos|Methods|Subproblems/</text>
130
+ <text x="1266" y="982.6" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">只有本人可写,人人可读(跨读被鼓励)</text>
131
+ <text x="1266" y="998.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">Shared/Chat/*.md · Shared/Meetings/&lt;mt-id&gt;.md · Shared/Debates/&lt;obj&gt;.md</text>
132
+ <text x="1266" y="1013.6" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">Shared/TaskBoard.md · Institutes.md(编制镜像)· State/README.md(说明此处非权威)</text>
133
+ <text x="1266" y="1029.1" font-size="10.5" font-weight="400" fill="#2c4557" text-anchor="middle">Problems/&lt;id&gt;.md(原问题)· Problems/conclusion.md(结题)· Verified/&lt;类型&gt;/&lt;id&gt;.md(定论,只读)</text>
134
+ <path d="M 127 290 L 127 700 L 226 700" fill="none" stroke="#5b4bb8" stroke-width="2" marker-start="url(#bothHuman)" marker-end="url(#bothHuman)"/>
135
+ <text x="127" y="336" font-size="12" font-weight="700" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">工具面</text>
136
+ <text x="127" y="356" font-size="11" font-weight="400" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">vibe_v5_*</text>
137
+ <text x="127" y="374" font-size="11" font-weight="400" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">/v5 命令</text>
138
+ <text x="127" y="398" font-size="13" font-weight="700" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">↓</text>
139
+ <text x="127" y="470" font-size="12" font-weight="700" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">汇报</text>
140
+ <text x="127" y="490" font-size="11" font-weight="400" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">status</text>
141
+ <text x="127" y="508" font-size="11" font-weight="400" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">report</text>
142
+ <text x="127" y="532" font-size="13" font-weight="700" fill="#5b4bb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">↑</text>
143
+ <text x="127" y="600" font-size="10" font-weight="400" fill="#5d7788" text-anchor="middle">所办不投票</text>
144
+ <text x="127" y="616" font-size="10" font-weight="400" fill="#5d7788" text-anchor="middle">不能让结论变真</text>
145
+ <text x="127" y="644" font-size="10" font-weight="400" fill="#5d7788" text-anchor="middle">也不替成员</text>
146
+ <text x="127" y="660" font-size="10" font-weight="400" fill="#5d7788" text-anchor="middle">思考或署名</text>
147
+ <line x1="560" y1="542" x2="560" y2="566" stroke="#0b6fb8" stroke-width="2" marker-start="url(#bothFrame)" marker-end="url(#bothFrame)"/>
148
+ <line x1="1400" y1="542" x2="1400" y2="566" stroke="#0b6fb8" stroke-width="2" marker-start="url(#bothFrame)" marker-end="url(#bothFrame)"/>
149
+ <text x="980" y="559" font-size="10.5" font-weight="400" fill="#0b6fb8" text-anchor="middle" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">↑ 每轮提示词(状态块 + 本轮问句)  ↓ 单个 JSON 回执</text>
150
+ <line x1="556" y1="400" x2="578" y2="400" stroke="#b26a00" stroke-width="1.8" stroke-dasharray="7 5" marker-start="url(#bothHouse)" marker-end="url(#bothHouse)"/>
151
+ <line x1="556" y1="430" x2="578" y2="430" stroke="#b26a00" stroke-width="1.8" stroke-dasharray="7 5" marker-start="url(#bothHouse)" marker-end="url(#bothHouse)"/>
152
+ <line x1="400" y1="852" x2="400" y2="876" stroke="#1f7a52" stroke-width="2" marker-start="url(#bothData)" marker-end="url(#bothData)"/>
153
+ <text x="392" y="868" font-size="10.5" font-weight="400" fill="#1f7a52" text-anchor="end" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">append / fold / stateOf</text>
154
+ <line x1="1280" y1="852" x2="1280" y2="876" stroke="#1f7a52" stroke-width="2" marker-start="url(#bothData)" marker-end="url(#bothData)"/>
155
+ <text x="1288" y="868" font-size="10.5" font-weight="400" fill="#1f7a52" text-anchor="start" paint-order="stroke" stroke="#ffffff" stroke-width="4" stroke-linejoin="round">读写产物</text>
156
+ <text x="52" y="1098" font-size="12" font-weight="700" fill="#10202e" text-anchor="start">图例</text>
157
+ <rect x="108" y="1087" width="14" height="14" rx="3" fill="#ffffff" stroke="#5b4bb8" stroke-width="2"/>
158
+ <text x="129" y="1099" font-size="11" font-weight="400" fill="#2c4557" text-anchor="start">所办 / 人(外部接口,不研究不投票)</text>
159
+ <rect x="438" y="1087" width="14" height="14" rx="3" fill="#ffffff" stroke="#b26a00" stroke-width="2"/>
160
+ <text x="459" y="1099" font-size="11" font-weight="400" fill="#2c4557" text-anchor="start">所内成员与所内组织(虚线 = 不由框架执行)</text>
161
+ <rect x="768" y="1087" width="14" height="14" rx="3" fill="#ffffff" stroke="#0b6fb8" stroke-width="2"/>
162
+ <text x="789" y="1099" font-size="11" font-weight="400" fill="#2c4557" text-anchor="start">框架(中继 / 沉淀 / 计数 / 调度)</text>
163
+ <rect x="1098" y="1087" width="14" height="14" rx="3" fill="#ffffff" stroke="#1f7a52" stroke-width="2"/>
164
+ <text x="1119" y="1099" font-size="11" font-weight="400" fill="#2c4557" text-anchor="start">状态与产物</text>
165
+ <rect x="1428" y="1087" width="14" height="14" rx="3" fill="#ffffff" stroke="#b3202c" stroke-width="2"/>
166
+ <text x="1449" y="1099" font-size="11" font-weight="400" fill="#2c4557" text-anchor="start">求真门槛(唯一定论规则)</text>
167
+ </g>
168
+ </svg>