diff --git a/docs/research/distill-scan-pangtong-result.json b/docs/research/distill-scan-pangtong-result.json
new file mode 100644
index 0000000..476a360
--- /dev/null
+++ b/docs/research/distill-scan-pangtong-result.json
@@ -0,0 +1,92 @@
+{
+ "scan_stats": {
+ "total_files": 10,
+ "total_messages": 94,
+ "total_fragments": 4,
+ "scan_duration_seconds": 0.0,
+ "mode_counts": {
+ "correction": 0,
+ "trial_error": 0,
+ "success": 0,
+ "collaboration": 0,
+ "decision": 4,
+ "experience": 0
+ }
+ },
+ "fragments": [
+ {
+ "mode": "decision",
+ "timestamp": "2026-05-19T00:12:06.086Z",
+ "trigger_message": " GATE 门控铁律(L2/L3 非平凡任务必遵守): 1. 需求不清不动手 — 列出假设让用户确认 2. 根因不明不修复(修bug时)— 先查清再改 3. 方案未定不实现(新功能/L3时)— 先出方案等确认 4. 评估过影响范围才动手 5. 涉及代码改动或调研分析的非平凡任务,使用 plan-act-verify skill L1 小改动(单文件 <50行,做错代价低)可跳过 GATE。 [Tue 2026-05-19 08:05 GMT+8] 你收到一个 v2.6 黑板任务。请严格按照下面的步骤执行。 ## 任务信息 - 项目: e2e-v27-full-6eeab1 - 任务ID: e2e-v27-full-6eeab1-dep - 标题: 依赖任务 - 描述: (无描述) - 类型: coding - 优先级: 5 - 必要条件: (无) ## 状态机(你必须遵守的状态流转) ``` pending → claimed → working → review → done ...",
+ "trigger_role": "user",
+ "context_before": [],
+ "context_after": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "项目存在但没有任务。看来任务还没被创建。让我先查看完整任务信息,然后尝试创建它。"
+ ],
+ "tool_calls_in_context": [],
+ "summary": "用户表达了决策犹豫或需要确认",
+ "id": "frag_0001",
+ "source_file": "001e18b5-d77b-4b66-84d9-d29a371867b0.jsonl"
+ },
+ {
+ "mode": "decision",
+ "timestamp": "2026-05-22T05:13:56.311Z",
+ "trigger_message": " GATE 门控铁律(L2/L3 非平凡任务必遵守): 1. 需求不清不动手 — 列出假设让用户确认 2. 根因不明不修复(修bug时)— 先查清再改 3. 方案未定不实现(新功能/L3时)— 先出方案等确认 4. 评估过影响范围才动手 5. 涉及代码改动或调研分析的非平凡任务,使用 plan-act-verify skill L1 小改动(单文件 <50行,做错代价低)可跳过 GATE。 [Fri 2026-05-22 13:13 GMT+8] 你收到一个 v2.6 黑板任务。请严格按照下面的步骤执行。 ## 任务信息 - 项目: _mail - 任务ID: mail-1779426798701 - 标题: 飞鸽传书 v2 回复 - 描述: 庞统,v2飞鸽传书收到,验证成功! - 类型: mail - 优先级: 5 - 必要条件: {\"from\": \"zhaoyun-data\", \"type\": \"text\", \"performative\": \"inform\", \"is_read\": false, \"conversation_...",
+ "trigger_role": "user",
+ "context_before": [],
+ "context_after": [
+ "",
+ "",
+ "",
+ "收到赵云的飞鸽传书,v2邮件系统验证成功 ✅ 已阅知悉,任务已标记 review。🐦"
+ ],
+ "tool_calls_in_context": [],
+ "summary": "用户表达了决策犹豫或需要确认",
+ "id": "frag_0002",
+ "source_file": "04fbbd9d-f6a4-4010-8fdd-b921245cdd4c.jsonl"
+ },
+ {
+ "mode": "decision",
+ "timestamp": "2026-05-19T00:12:27.381Z",
+ "trigger_message": " GATE 门控铁律(L2/L3 非平凡任务必遵守): 1. 需求不清不动手 — 列出假设让用户确认 2. 根因不明不修复(修bug时)— 先查清再改 3. 方案未定不实现(新功能/L3时)— 先出方案等确认 4. 评估过影响范围才动手 5. 涉及代码改动或调研分析的非平凡任务,使用 plan-act-verify skill L1 小改动(单文件 <50行,做错代价低)可跳过 GATE。 [Tue 2026-05-19 08:05 GMT+8] 你收到一个 v2.6 黑板任务。请严格按照下面的步骤执行。 ## 任务信息 - 项目: e2e-v27-full-db120f - 任务ID: e2e-v27-full-db120f-dep - 标题: 依赖任务 - 描述: (无描述) - 类型: coding - 优先级: 5 - 必要条件: (无) ## 状态机(你必须遵守的状态流转) ``` pending → claimed → working → review → done ...",
+ "trigger_role": "user",
+ "context_before": [],
+ "context_after": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "任务 `e2e-v27-full-db120f-dep` 在项目中不存在(API 返回 `Task not found`),项目本身存在但任务列表为空。这是一个 E2E 测试任务,可能任务尚未被创建,或已被清理。 标记为 failed:"
+ ],
+ "tool_calls_in_context": [],
+ "summary": "用户表达了决策犹豫或需要确认",
+ "id": "frag_0003",
+ "source_file": "05235975-c291-452b-ab9b-8addad3a74e4.jsonl"
+ },
+ {
+ "mode": "decision",
+ "timestamp": "2026-05-18T11:34:08.078Z",
+ "trigger_message": " GATE 门控铁律(L2/L3 非平凡任务必遵守): 1. 需求不清不动手 — 列出假设让用户确认 2. 根因不明不修复(修bug时)— 先查清再改 3. 方案未定不实现(新功能/L3时)— 先出方案等确认 4. 评估过影响范围才动手 5. 涉及代码改动或调研分析的非平凡任务,使用 plan-act-verify skill L1 小改动(单文件 <50行,做错代价低)可跳过 GATE。 [Mon 2026-05-18 19:29 GMT+8] 你收到一个 v2.6 黑板任务。请严格按照下面的步骤执行。 ## 任务信息 - 项目: e2e-v27-4991fc73 - 任务ID: e4-child-0 - 标题: Stage-data - 描述: (无描述) - 类型: coding - 优先级: 5 - 必要条件: (无) ## 状态机(你必须遵守的状态流转) ``` pending → claimed → working → review → done │ ...",
+ "trigger_role": "user",
+ "context_before": [],
+ "context_after": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ "tool_calls_in_context": [],
+ "summary": "用户表达了决策犹豫或需要确认",
+ "id": "frag_0004",
+ "source_file": "058913b3-d811-4fe5-abf4-7d73c638cf1c.jsonl"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/docs/research/distill-scan-pangtong.py b/docs/research/distill-scan-pangtong.py
index 284331f..25f67d9 100644
--- a/docs/research/distill-scan-pangtong.py
+++ b/docs/research/distill-scan-pangtong.py
@@ -101,11 +101,28 @@ def extract_tool_info(content) -> tuple:
return tool_uses, has_error
+# Template blocks to strip before pattern matching (avoid false positives)
+_TEMPLATE_BLOCKS = [
+ re.compile(r'.*?', re.DOTALL),
+ re.compile(r'## \u72b6\u6001\u673a.*?```', re.DOTALL), # state machine diagrams
+]
+
+
+def strip_templates(text: str) -> str:
+ """Remove common template blocks that cause false positives."""
+ for pat in _TEMPLATE_BLOCKS:
+ text = pat.sub('', text)
+ return text
+
+
def match_signals(text: str, patterns: list) -> bool:
if not text:
return False
+ cleaned = strip_templates(text)
+ if not cleaned:
+ return False
for pat in patterns:
- if re.search(pat, text):
+ if re.search(pat, cleaned):
return True
return False