@fanchao8609/agent_brain_sync 1.8.8 → 1.9.0

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.
@@ -1,161 +0,0 @@
1
- import { test } from "node:test";
2
- import assert from "node:assert";
3
- import { check } from "./check.js";
4
-
5
- /** 合规样本: 苹果选水果 */
6
- const GOOD = `
7
- ## L1
8
- - [动作] 想快速判断买哪个品种
9
- - [动作] 想决定手上这个吃不吃
10
- ## L2
11
- - [父:0][主观][当下][判断] 在问口味好不好
12
- - [父:1][主观][当下][判断] 在问能不能吃
13
- ## L3
14
- - [产出] 几个口味维度的横向结论
15
- `;
16
-
17
- test("合规样本 PASS", () => {
18
- const r = check(GOOD);
19
- assert.ok(r.ok, r.errors.join("; "));
20
- });
21
-
22
- test("L1 空泛失败: '想了解一下'", () => {
23
- const r = check(`
24
- ## L1
25
- - [动作] 想了解一下这个技术
26
- - [动作] 想快速定位原因
27
- ## L2
28
- - [父:1][主观][当下][判断] x
29
- ## L3
30
- - [产出] 一个结论
31
- `);
32
- assert.ok(!r.ok);
33
- assert.ok(r.errors.some((e) => /心情不是动作/.test(e)), r.errors.join(";"));
34
- });
35
-
36
- test("L1 只有一个候选失败: 无兄弟则无法竞争", () => {
37
- const r = check(`
38
- ## L1
39
- - [动作] 想快速定位原因
40
- ## L2
41
- - [父:0][主观][当下][判断] x
42
- ## L3
43
- - [产出] 一个结论
44
- `);
45
- assert.ok(r.errors.some((e) => /只有 1 个候选/.test(e)), r.errors.join(";"));
46
- });
47
-
48
- test("L2 缺轴失败: 边界没划全", () => {
49
- const r = check(`
50
- ## L1
51
- - [动作] 想快速定位原因
52
- - [动作] 想确认改动影响
53
- ## L2
54
- - [父:0][主观][当下] x
55
- ## L3
56
- - [产出] 一个结论
57
- `);
58
- assert.ok(r.errors.some((e) => /缺轴 \[判断\|操作\]/.test(e)), r.errors.join(";"));
59
- });
60
-
61
- test("L2 一轴落两端失败", () => {
62
- const r = check(`
63
- ## L1
64
- - [动作] 想快速定位原因
65
- - [动作] 想确认改动影响
66
- ## L2
67
- - [父:0][主观][客观][当下][判断] x
68
- ## L3
69
- - [产出] 一个结论
70
- `);
71
- assert.ok(r.errors.some((e) => /落了两端/.test(e)), r.errors.join(";"));
72
- });
73
-
74
- test("L2 无父标注失败: 追溯不到来源", () => {
75
- const r = check(`
76
- ## L1
77
- - [动作] 想快速定位原因
78
- - [动作] 想确认改动影响
79
- ## L2
80
- - [主观][当下][判断] x
81
- ## L3
82
- - [产出] 一个结论
83
- `);
84
- assert.ok(r.errors.some((e) => /缺 \[父:N\]/.test(e)), r.errors.join(";"));
85
- });
86
-
87
- test("L3 不可验收失败: '一些建议'", () => {
88
- const r = check(`
89
- ## L1
90
- - [动作] 想快速定位原因
91
- - [动作] 想确认改动影响
92
- ## L2
93
- - [父:0][主观][当下][判断] x
94
- ## L3
95
- - [产出] 一些建议
96
- `);
97
- assert.ok(r.errors.some((e) => /不可验收/.test(e)), r.errors.join(";"));
98
- });
99
-
100
- test("L3 露怯合法: 无验收标准 + 明说是参考", () => {
101
- const r = check(`
102
- ## L1
103
- - [动作] 想快速定位原因
104
- - [动作] 想确认改动影响
105
- ## L2
106
- - [父:0][主观][当下][判断] x
107
- ## L3
108
- - [无验收标准] 此题给的是参考, 不是答案
109
- `);
110
- assert.ok(r.ok, r.errors.join(";"));
111
- });
112
-
113
- test("L3 标了露怯但没说'是参考' -> 失败", () => {
114
- const r = check(`
115
- ## L1
116
- - [动作] 想快速定位原因
117
- - [动作] 想确认改动影响
118
- ## L2
119
- - [父:0][主观][当下][判断] x
120
- ## L3
121
- - [无验收标准] 这题很难
122
- `);
123
- assert.ok(!r.ok);
124
- });
125
-
126
- /**
127
- * 核心用例: 编造动机。
128
- * 骨架的已知边界是"拦不住 L1 编一个说得通的动机"。
129
- * 这里试: 一个句子里没有任何线索, 却写了具体动作 —— 检查器能抓到吗?
130
- */
131
- test("边界用例: 编造的动机能通过全部格式检查 —— 这是检查器的能力边界", () => {
132
- // 用户只说"你觉得呢", 原话里没有任何动作线索。
133
- // 但编出带动词的动机很容易 —— 动词白名单挡不住编造。
134
- const fabricated = `
135
- ## L1
136
- - [动作] 想确认我的判断是否可靠
137
- - [动作] 想知道我是否认真思考过
138
- ## L2
139
- - [父:0][主观][当下][判断] 在问结论
140
- - [父:1][主观][当下][判断] 在问过程
141
- ## L3
142
- - [产出] 一个明确结论
143
- `;
144
- const r = check(fabricated);
145
- // 断言: 它能通过 —— 这是能力边界, 必须被记录, 不能被假装解决
146
- assert.ok(r.ok, "格式检查无法发现'动机是编的': " + r.errors.join(";"));
147
- });
148
-
149
- test("[父:N] 越界能被发现 (曾漏, 已修)", () => {
150
- const r = check(`
151
- ## L1
152
- - [动作] 想快速定位原因
153
- - [动作] 想确认改动影响
154
- ## L2
155
- - [父:9][主观][当下][判断] x
156
- ## L3
157
- - [产出] 一个结论
158
- `);
159
- assert.ok(!r.ok, "应发现越界");
160
- assert.ok(r.errors.some((e) => /越界/.test(e)), r.errors.join(";"));
161
- });