@geminilight/mindos 0.6.57 → 0.6.58
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.
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +21 -21
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +2 -2
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +4 -4
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +2 -2
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +2 -2
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +2 -2
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +3 -3
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +21 -21
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -1
- package/_standalone/.next/server/chunks/3484.js +1 -1
- package/_standalone/.next/server/chunks/530.js +23 -23
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/{2159.js → 6793.js} +2 -2
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/1053-fe009233cff06e72.js +29 -0
- package/_standalone/.next/static/chunks/7249-fa98ca10e9a10f39.js +11 -0
- package/_standalone/.next/static/chunks/app/{layout-b3919384ec2eb979.js → layout-7e02ddf4144b01f1.js} +11 -11
- package/_standalone/.next/static/chunks/app/page-6a6a12bd6d6812d0.js +7 -0
- package/_standalone/.next/static/chunks/app/trash/page-54cbd5c98d9de69b.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-ca7bdcbf27f88a46.js +12 -0
- package/_standalone/.next/trace +64 -64
- package/_standalone/__tests__/api/mcp-install.test.ts +3 -2
- package/_standalone/__tests__/ask/non-streaming-api.test.ts +281 -0
- package/_standalone/__tests__/core/skill-install-logic.test.ts +1 -0
- package/_standalone/components/agents/CustomAgentModal.tsx +32 -8
- package/_standalone/data/skills/mindos/SKILL.md +14 -9
- package/_standalone/data/skills/mindos-zh/SKILL.md +13 -4
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/app/api/agents/custom/route.ts +8 -0
- package/app/app/api/ask/route.ts +171 -10
- package/app/app/api/mcp/agents/route.ts +5 -3
- package/app/app/api/settings/route.ts +9 -0
- package/app/app/api/settings/test-key/route.ts +13 -1
- package/app/components/agents/CustomAgentModal.tsx +32 -8
- package/app/data/skills/mindos/SKILL.md +14 -9
- package/app/data/skills/mindos-zh/SKILL.md +13 -4
- package/app/lib/custom-agents.ts +45 -2
- package/app/lib/i18n/modules/panels.ts +10 -2
- package/app/lib/mcp-agents.ts +10 -0
- package/bin/lib/mcp-agents.js +10 -0
- package/package.json +1 -1
- package/skills/mindos/SKILL.md +10 -4
- package/skills/mindos-max/SKILL.md +191 -0
- package/skills/mindos-max-workspace/evals/evals.json +23 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/old_skill/outputs/transcript.md +203 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/capture-debugging-experience-en/with_skill/outputs/transcript.md +271 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/outputs/transcript.md +121 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/outputs/transcript.md +168 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/eval_metadata.json +11 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/outputs/transcript.md +143 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/grading.json +28 -0
- package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/with_skill/outputs/transcript.md +233 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/SKILL.md +165 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/README.md +12 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/post-task-hooks.md +27 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/preference-capture.md +41 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/sop-template.md +74 -0
- package/skills/mindos-max-workspace/skill-snapshot/mindos-original/references/write-supplement.md +119 -0
- package/skills/mindos-max-zh/SKILL.md +192 -0
- package/skills/mindos-zh/SKILL.md +11 -3
- package/_standalone/.next/static/chunks/1053-5cb008a24930e271.js +0 -29
- package/_standalone/.next/static/chunks/7249-8cd568ad23656622.js +0 -11
- package/_standalone/.next/static/chunks/app/page-6436a99cda35132b.js +0 -7
- package/_standalone/.next/static/chunks/app/trash/page-8dc388695344fdd4.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-b292b55305ecc021.js +0 -12
- /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → 2ksXveDzEcnCMRIElDkLq}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{zOaEtgJbdRMncnCBucULp → 2ksXveDzEcnCMRIElDkLq}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
# Transcript: Capturing Debugging Experience — Mutex Race Condition in Payment Service
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
**User input**: "I just finished debugging a really tricky race condition in our payment service - turns out the mutex wasn't being released properly in the error path. Took me 3 hours to figure out. I want to make sure the team doesn't hit this again."
|
|
6
|
+
|
|
7
|
+
**Skill used**: `mindos-max` (SKILL.md v3.0.0-max)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Step 1: Decision Tree Classification
|
|
12
|
+
|
|
13
|
+
The user's request maps to **Retrospective / distill** in the decision tree:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
User request
|
|
17
|
+
|- Retrospective / distill / handoff?
|
|
18
|
+
-> [Retrospective path]
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Additionally, the **Experience capture** post-task hook triggers (condition: "Debugging, troubleshooting, or multi-round work"). The format is: **problem → cause → solution → rule**.
|
|
22
|
+
|
|
23
|
+
The user explicitly wants to "make sure the team doesn't hit this again" — this is a clear **save/record** intent, so writes are authorized.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Step 2: Bootstrap — List KB Tree
|
|
28
|
+
|
|
29
|
+
Before writing anything, we bootstrap to understand the KB structure and find the right location.
|
|
30
|
+
|
|
31
|
+
### Command
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
mindos file list
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Expected output (simulated)
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
/
|
|
41
|
+
├── INSTRUCTION.md
|
|
42
|
+
├── README.md
|
|
43
|
+
├── .mindos/
|
|
44
|
+
│ └── user-preferences.md
|
|
45
|
+
├── projects/
|
|
46
|
+
│ ├── payment-service/
|
|
47
|
+
│ │ ├── README.md
|
|
48
|
+
│ │ └── architecture.md
|
|
49
|
+
│ └── ...
|
|
50
|
+
├── engineering/
|
|
51
|
+
│ ├── debugging/
|
|
52
|
+
│ │ └── ...
|
|
53
|
+
│ ├── runbooks/
|
|
54
|
+
│ │ └── ...
|
|
55
|
+
│ └── pitfalls/
|
|
56
|
+
│ └── ...
|
|
57
|
+
├── decisions/
|
|
58
|
+
│ └── ...
|
|
59
|
+
└── inbox/
|
|
60
|
+
└── ...
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> **Note**: The actual tree structure would determine where the file goes. We look for an existing `debugging/`, `pitfalls/`, `engineering/`, or `lessons-learned/` directory. If none exists, we'd use `inbox/` and propose classification later.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Step 3: Search for Existing Related Content
|
|
68
|
+
|
|
69
|
+
Per the SKILL rule "NEVER search with a single keyword — fire 2-4 parallel searches", we search for related content before writing.
|
|
70
|
+
|
|
71
|
+
### Commands
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
mindos search "mutex race condition"
|
|
75
|
+
mindos search "payment service debugging"
|
|
76
|
+
mindos search "lock release error path"
|
|
77
|
+
mindos search "concurrency pitfall"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Purpose
|
|
81
|
+
|
|
82
|
+
- Avoid duplicating an existing note on the same topic.
|
|
83
|
+
- Find related files to cross-reference or append to.
|
|
84
|
+
- Discover if there's an existing pitfalls/debugging log we should add to instead of creating a new file.
|
|
85
|
+
|
|
86
|
+
### Simulated result
|
|
87
|
+
|
|
88
|
+
Assuming no exact match found. If a file like `engineering/pitfalls/concurrency-issues.md` existed, we would append to it instead of creating a new file.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Step 4: Check Sibling Files for Local Style
|
|
93
|
+
|
|
94
|
+
Per SKILL rule "NEVER create a file without checking siblings — read 1-2 files in the target directory to learn local style."
|
|
95
|
+
|
|
96
|
+
### Command
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
mindos file read "engineering/debugging/sample-existing-note.md"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Or if the directory is `engineering/pitfalls/`:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
mindos file list "engineering/pitfalls/"
|
|
106
|
+
mindos file read "engineering/pitfalls/<first-file>.md"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Purpose
|
|
110
|
+
|
|
111
|
+
Learn the local formatting conventions (heading structure, metadata, tags, etc.) so the new note fits in naturally.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Step 5: Write the Experience Note
|
|
116
|
+
|
|
117
|
+
Following the post-task hook format: **problem → cause → solution → rule**.
|
|
118
|
+
|
|
119
|
+
### Propose to user first
|
|
120
|
+
|
|
121
|
+
> "Record this debugging experience to `engineering/debugging/payment-service-mutex-race-condition.md`? Format: problem → root cause → solution → prevention rule."
|
|
122
|
+
|
|
123
|
+
Assuming user confirms (since they explicitly asked to record it).
|
|
124
|
+
|
|
125
|
+
### Command
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
mindos file create "engineering/debugging/payment-service-mutex-race-condition.md" --content "# Mutex Not Released in Error Path — Payment Service Race Condition
|
|
129
|
+
|
|
130
|
+
> Debugging session: $(date +%Y-%m-%d) | Duration: ~3 hours | Severity: High
|
|
131
|
+
|
|
132
|
+
## Problem
|
|
133
|
+
|
|
134
|
+
The payment service experienced a race condition. Under concurrent load, some payment requests would hang indefinitely or produce inconsistent state. The issue was intermittent and hard to reproduce, making it especially time-consuming to diagnose.
|
|
135
|
+
|
|
136
|
+
## Symptoms
|
|
137
|
+
|
|
138
|
+
- Payment requests intermittently hanging/timing out under load
|
|
139
|
+
- Inconsistent transaction state between service replicas
|
|
140
|
+
- No obvious errors in logs (the deadlock was silent)
|
|
141
|
+
- Issue only manifested under concurrent access patterns
|
|
142
|
+
|
|
143
|
+
## Root Cause
|
|
144
|
+
|
|
145
|
+
The mutex protecting the critical section in the payment processing path was **not being released in the error path**. The typical pattern looked like:
|
|
146
|
+
|
|
147
|
+
\`\`\`
|
|
148
|
+
mutex.Lock()
|
|
149
|
+
result, err := processPayment(...)
|
|
150
|
+
if err != nil {
|
|
151
|
+
// BUG: mutex.Unlock() was missing here
|
|
152
|
+
return err // <-- mutex held forever
|
|
153
|
+
}
|
|
154
|
+
mutex.Unlock()
|
|
155
|
+
return result
|
|
156
|
+
\`\`\`
|
|
157
|
+
|
|
158
|
+
When \`processPayment()\` returned an error, the function returned early without releasing the lock. Subsequent goroutines/threads trying to acquire the same mutex would block forever, causing the hang.
|
|
159
|
+
|
|
160
|
+
## Solution
|
|
161
|
+
|
|
162
|
+
Ensure the mutex is **always** released, regardless of the execution path. The fix uses a deferred unlock pattern:
|
|
163
|
+
|
|
164
|
+
\`\`\`
|
|
165
|
+
mutex.Lock()
|
|
166
|
+
defer mutex.Unlock() // guaranteed release on any return path
|
|
167
|
+
|
|
168
|
+
result, err := processPayment(...)
|
|
169
|
+
if err != nil {
|
|
170
|
+
return err // mutex released by defer
|
|
171
|
+
}
|
|
172
|
+
return result
|
|
173
|
+
\`\`\`
|
|
174
|
+
|
|
175
|
+
## Prevention Rules
|
|
176
|
+
|
|
177
|
+
### Rule 1: Always use defer/finally for lock release
|
|
178
|
+
Never manually place \`Unlock()\` at each return point. Use \`defer mutex.Unlock()\` (Go), \`try-finally\` (Java/Python), or RAII lock guards (C++/Rust) immediately after acquiring the lock. This makes it structurally impossible to forget the release.
|
|
179
|
+
|
|
180
|
+
### Rule 2: Code review checklist for locks
|
|
181
|
+
When reviewing code that acquires any lock (mutex, semaphore, read-write lock, distributed lock):
|
|
182
|
+
- [ ] Is the unlock in a defer/finally/RAII guard?
|
|
183
|
+
- [ ] Are there any early return paths between Lock() and Unlock()?
|
|
184
|
+
- [ ] What happens if the critical section panics/throws?
|
|
185
|
+
- [ ] Is the lock scope as narrow as possible?
|
|
186
|
+
|
|
187
|
+
### Rule 3: Test error paths with locks held
|
|
188
|
+
Write tests that specifically exercise error cases inside critical sections. Verify that after an error, subsequent lock acquisitions still succeed (i.e., the lock was properly released).
|
|
189
|
+
|
|
190
|
+
### Rule 4: Use static analysis / linting
|
|
191
|
+
Configure linters (e.g., \`go vet\`, \`staticcheck\`, thread-safety annotations in Java) to flag lock/unlock mismatches. Many tools can detect unmatched Lock/Unlock pairs.
|
|
192
|
+
|
|
193
|
+
## Debugging Approach That Worked
|
|
194
|
+
|
|
195
|
+
1. **Reproduced under load** — wrote a stress test with concurrent payment requests, some injecting errors
|
|
196
|
+
2. **Added lock acquisition logging** — wrapped mutex with timing logs to see which goroutine held the lock
|
|
197
|
+
3. **Identified the stuck holder** — found the goroutine that acquired but never released
|
|
198
|
+
4. **Traced to error path** — stack trace of the holder showed it was in the error-return branch
|
|
199
|
+
5. **Total time**: ~3 hours (most spent on reproducing reliably)
|
|
200
|
+
|
|
201
|
+
## Related Patterns
|
|
202
|
+
|
|
203
|
+
- **Distributed lock not released**: Same bug at a higher level (e.g., Redis/Zookeeper lock). Use TTL as a safety net, but still fix the root cause.
|
|
204
|
+
- **Connection pool exhaustion**: Similar symptom (resources not returned on error). Same fix: defer/finally for resource cleanup.
|
|
205
|
+
- **File handle leak on error**: Same category. Always close in defer/finally.
|
|
206
|
+
|
|
207
|
+
## Tags
|
|
208
|
+
|
|
209
|
+
#debugging #race-condition #mutex #concurrency #payment-service #pitfall #error-handling
|
|
210
|
+
"
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Step 6: Post-Task Hook — Consistency Sync
|
|
216
|
+
|
|
217
|
+
After creating the file, check if any existing documents reference the payment service or debugging practices that should link to this new note.
|
|
218
|
+
|
|
219
|
+
### Commands
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
mindos file backlinks "engineering/debugging/payment-service-mutex-race-condition.md"
|
|
223
|
+
mindos search "payment service"
|
|
224
|
+
mindos search "concurrency guidelines"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### If a related document exists (e.g., `engineering/pitfalls/README.md` or an index file):
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
mindos file append "engineering/pitfalls/README.md" --content "
|
|
231
|
+
- [Mutex Not Released in Error Path](../debugging/payment-service-mutex-race-condition.md) — Race condition from missing unlock in error path. Rule: always use defer/finally for lock release.
|
|
232
|
+
"
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### If a team runbook or onboarding doc exists:
|
|
236
|
+
|
|
237
|
+
Propose: "Your onboarding doc at `engineering/runbooks/onboarding.md` covers concurrency — add a link to this new pitfall?"
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Step 7: Verify the Write
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
mindos file read "engineering/debugging/payment-service-mutex-race-condition.md"
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Confirm the content was saved correctly and is readable.
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Summary of Actions Taken
|
|
252
|
+
|
|
253
|
+
| # | Action | Command | Purpose |
|
|
254
|
+
|---|--------|---------|---------|
|
|
255
|
+
| 1 | Bootstrap | `mindos file list` | Understand KB structure |
|
|
256
|
+
| 2 | Search (4 queries) | `mindos search "..."` x4 | Check for duplicates, find related content |
|
|
257
|
+
| 3 | Read siblings | `mindos file read <sibling>` | Learn local formatting style |
|
|
258
|
+
| 4 | Create note | `mindos file create <path> --content "..."` | Save the debugging experience |
|
|
259
|
+
| 5 | Check backlinks | `mindos file backlinks <path>` | Find documents to cross-reference |
|
|
260
|
+
| 6 | Update index (if exists) | `mindos file append <index> --content "..."` | Keep indexes/READMEs in sync |
|
|
261
|
+
| 7 | Verify | `mindos file read <path>` | Confirm write succeeded |
|
|
262
|
+
|
|
263
|
+
## Skill Rules Applied
|
|
264
|
+
|
|
265
|
+
- **Bootstrap first** (Rule 1): Listed KB tree before any writes
|
|
266
|
+
- **Read before write** (Rule 6): Searched for existing content, read siblings
|
|
267
|
+
- **NEVER search with a single keyword**: Fired 4 parallel searches with synonyms
|
|
268
|
+
- **NEVER create without checking siblings**: Read existing files in target directory
|
|
269
|
+
- **Post-task hook — Experience capture**: Triggered by debugging context; used problem → cause → solution → rule format
|
|
270
|
+
- **Post-task hook — Consistency sync**: Checked and proposed updates to related docs
|
|
271
|
+
- **Default to read-only exceeded by explicit save intent**: User said "make sure the team doesn't hit this again" = clear write intent
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 1,
|
|
3
|
+
"eval_name": "save-meeting-decision-zh",
|
|
4
|
+
"prompt": "我昨天跟产品经理开会讨论了一个新的用户反馈系统的方案,他们建议用NPS打分加上开放式评论,我觉得挺好的。帮我把这个决策记下来,以后其他同事问起来可以查到。",
|
|
5
|
+
"assertions": [
|
|
6
|
+
{"text": "Uses mindos CLI commands (mindos file create/write/append) to save content", "type": "behavioral"},
|
|
7
|
+
{"text": "Includes structured meeting note with date, topic, decision, and rationale", "type": "content"},
|
|
8
|
+
{"text": "Places file in appropriate subdirectory (not KB root)", "type": "behavioral"},
|
|
9
|
+
{"text": "Bootstraps KB tree before writing (mindos file list)", "type": "behavioral"}
|
|
10
|
+
]
|
|
11
|
+
}
|
package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/old_skill/grading.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 1,
|
|
3
|
+
"eval_name": "save-meeting-decision-zh",
|
|
4
|
+
"run_type": "old_skill",
|
|
5
|
+
"skill": "mindos-original",
|
|
6
|
+
"expectations": [
|
|
7
|
+
{
|
|
8
|
+
"text": "Uses mindos CLI commands (mindos file create/write/append) to save content",
|
|
9
|
+
"passed": true,
|
|
10
|
+
"evidence": "Transcript shows `mindos file create \"decisions/2026-04-06-user-feedback-system-nps.md\" --content \"...\"` in Step 4."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"text": "Includes structured meeting note with date, topic, decision, and rationale",
|
|
14
|
+
"passed": true,
|
|
15
|
+
"evidence": "Content includes 决策摘要, 背景, 决策内容, 参与者, 理由, and 后续 TODO sections."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"text": "Places file in appropriate subdirectory (not KB root)",
|
|
19
|
+
"passed": true,
|
|
20
|
+
"evidence": "File placed at `decisions/2026-04-06-user-feedback-system-nps.md`."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"text": "Bootstraps KB tree before writing (mindos file list)",
|
|
24
|
+
"passed": true,
|
|
25
|
+
"evidence": "Step 1 explicitly runs `mindos file list`."
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Transcript: Save Meeting Decision (NPS + Open Comments)
|
|
2
|
+
|
|
3
|
+
## Task
|
|
4
|
+
|
|
5
|
+
用户请求:「我昨天跟产品经理开会讨论了一个新的用户反馈系统的方案,他们建议用NPS打分加上开放式评论,我觉得挺好的。帮我把这个决策记下来,以后其他同事问起来可以查到。」
|
|
6
|
+
|
|
7
|
+
## Skill Analysis
|
|
8
|
+
|
|
9
|
+
According to the SKILL.md decision tree, this is a **"Save / record / update / organize specific content"** task — the user explicitly says "帮我把这个决策记下来" (help me record this decision). This is a **single-file write** operation.
|
|
10
|
+
|
|
11
|
+
## Execution Plan
|
|
12
|
+
|
|
13
|
+
### Step 1: Bootstrap — List KB tree to understand structure
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
mindos file list
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Purpose**: Understand the knowledge base directory structure before deciding where to save the note. Per SKILL rule #1: "Bootstrap first — list the KB tree to understand structure before searching or writing."
|
|
20
|
+
|
|
21
|
+
**Expected output**: A tree of directories and files in the KB. We need to identify:
|
|
22
|
+
- Is there a `decisions/` or `决策/` directory?
|
|
23
|
+
- Is there a `meetings/` or `会议/` directory?
|
|
24
|
+
- What is the general organizational pattern (Chinese vs English names, flat vs nested)?
|
|
25
|
+
|
|
26
|
+
### Step 2: Search for existing related content
|
|
27
|
+
|
|
28
|
+
Per SKILL rule: "NEVER search with a single keyword. Fire 2-4 parallel searches."
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
mindos search "用户反馈"
|
|
32
|
+
mindos search "NPS"
|
|
33
|
+
mindos search "feedback system"
|
|
34
|
+
mindos search "反馈系统"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Purpose**: Check if there's already a file about user feedback systems, NPS, or related decisions. We should not create duplicates — if an existing file covers this topic, we should append or update it instead.
|
|
38
|
+
|
|
39
|
+
### Step 3: Check sibling files in target directory
|
|
40
|
+
|
|
41
|
+
Per SKILL rule: "NEVER create a file without checking siblings. Read 1-2 files in the target directory to learn local style."
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
mindos file read <target-directory>/some-existing-file.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Purpose**: Learn the local file style (heading structure, metadata conventions, language) before writing. For example, if existing decision files use a specific template with `## 背景`, `## 决策`, `## 理由` sections, we should follow that pattern.
|
|
48
|
+
|
|
49
|
+
### Step 4: Create the decision note
|
|
50
|
+
|
|
51
|
+
Assuming the KB has a decisions-related directory (e.g., `decisions/` or `决策/`), we would create a new file. If no such directory exists, we'd use the closest fitting location (e.g., `meetings/` or an inbox).
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
mindos file create "decisions/2026-04-06-user-feedback-system-nps.md" --content "# 用户反馈系统方案决策:NPS + 开放式评论
|
|
55
|
+
|
|
56
|
+
## 决策摘要
|
|
57
|
+
|
|
58
|
+
采用 **NPS 打分 + 开放式评论** 作为新的用户反馈系统方案。
|
|
59
|
+
|
|
60
|
+
## 背景
|
|
61
|
+
|
|
62
|
+
与产品经理开会讨论新的用户反馈系统方案(2026-04-06)。
|
|
63
|
+
|
|
64
|
+
## 决策内容
|
|
65
|
+
|
|
66
|
+
- **反馈方式**:NPS(Net Promoter Score)打分 + 开放式评论
|
|
67
|
+
- **NPS 打分**:标准 0-10 分制,衡量用户推荐意愿
|
|
68
|
+
- **开放式评论**:允许用户自由填写反馈内容,补充定量分数无法覆盖的细节
|
|
69
|
+
- **决策状态**:已确认采纳
|
|
70
|
+
|
|
71
|
+
## 参与者
|
|
72
|
+
|
|
73
|
+
- 产品经理(提议方)
|
|
74
|
+
- 本人(确认同意)
|
|
75
|
+
|
|
76
|
+
## 理由
|
|
77
|
+
|
|
78
|
+
产品经理建议该方案,综合评估后认为合理:
|
|
79
|
+
- NPS 是业界成熟的用户满意度衡量标准,便于横向对比
|
|
80
|
+
- 开放式评论可以捕获结构化打分无法覆盖的具体问题和建议
|
|
81
|
+
- 两者结合兼顾定量分析和定性洞察
|
|
82
|
+
|
|
83
|
+
## 后续 TODO
|
|
84
|
+
|
|
85
|
+
- [ ] 确定 NPS 调研的触发时机(如使用后 X 天、关键操作后)
|
|
86
|
+
- [ ] 设计评论区的引导性问题(可选)
|
|
87
|
+
- [ ] 技术方案评审
|
|
88
|
+
"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Step 5: Post-task hooks check
|
|
92
|
+
|
|
93
|
+
After the write, scan the post-task hooks table:
|
|
94
|
+
|
|
95
|
+
| Hook | Check | Result |
|
|
96
|
+
|------|-------|--------|
|
|
97
|
+
| Experience capture | Was this debugging/troubleshooting/multi-round? | No — straightforward save. **Skip.** |
|
|
98
|
+
| Consistency sync | Does the new file have backlinks? | No — newly created file. **Skip.** |
|
|
99
|
+
| SOP drift | Did we follow an SOP? | No SOP involved. **Skip.** |
|
|
100
|
+
| Linked update | Changed CSV/TODO with related docs? | No. **Skip.** |
|
|
101
|
+
| Structure classification | Created file in inbox/temp? | No — placed in appropriate directory. **Skip.** |
|
|
102
|
+
| Pattern extraction | 3+ similar operations? | No. **Skip.** |
|
|
103
|
+
|
|
104
|
+
No post-task hooks triggered.
|
|
105
|
+
|
|
106
|
+
### Step 6: Confirm to user
|
|
107
|
+
|
|
108
|
+
> 已将决策记录保存到 `decisions/2026-04-06-user-feedback-system-nps.md`。
|
|
109
|
+
>
|
|
110
|
+
> 内容包括:决策摘要(NPS + 开放式评论)、背景、具体方案、参与者、理由和后续 TODO。
|
|
111
|
+
>
|
|
112
|
+
> 以后同事查找时可以搜索「NPS」「用户反馈」等关键词找到这份记录。
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Notes on Simulation
|
|
117
|
+
|
|
118
|
+
- The actual target directory would depend on the KB's real structure (revealed by `mindos file list`). The path `decisions/...` is an example; the real path would be inferred from bootstrap.
|
|
119
|
+
- If no `decisions/` directory exists, we would either create one (with user confirmation) or place the file in the most fitting existing directory.
|
|
120
|
+
- The file content format would be adjusted to match sibling file conventions discovered in Step 3.
|
|
121
|
+
- Date in filename uses the meeting date (yesterday = 2026-04-06), not today's date.
|
package/skills/mindos-max-workspace/iteration-1/save-meeting-decision-zh/with_skill/grading.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 1,
|
|
3
|
+
"eval_name": "save-meeting-decision-zh",
|
|
4
|
+
"run_type": "with_skill",
|
|
5
|
+
"skill": "mindos-max",
|
|
6
|
+
"expectations": [
|
|
7
|
+
{
|
|
8
|
+
"text": "Uses mindos CLI commands (mindos file create/write/append) to save content",
|
|
9
|
+
"passed": true,
|
|
10
|
+
"evidence": "Transcript shows `mindos file create \"decisions/2026-04-06-nps-feedback-system.md\" --content \"...\"` in Step 5."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"text": "Includes structured meeting note with date, topic, decision, and rationale",
|
|
14
|
+
"passed": true,
|
|
15
|
+
"evidence": "Content includes 元信息 (date, participants, status), 背景, 决策内容, 决策理由, and 后续行动 sections."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"text": "Places file in appropriate subdirectory (not KB root)",
|
|
19
|
+
"passed": true,
|
|
20
|
+
"evidence": "File placed at `decisions/2026-04-06-nps-feedback-system.md`, not KB root."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"text": "Bootstraps KB tree before writing (mindos file list)",
|
|
24
|
+
"passed": true,
|
|
25
|
+
"evidence": "Step 2 explicitly runs `mindos file list` before any writes."
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Transcript: Save Meeting Decision (NPS Feedback System)
|
|
2
|
+
|
|
3
|
+
## Task
|
|
4
|
+
|
|
5
|
+
用户说:「我昨天跟产品经理开会讨论了一个新的用户反馈系统的方案,他们建议用NPS打分加上开放式评论,我觉得挺好的。帮我把这个决策记下来,以后其他同事问起来可以查到。」
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Step 1: Decision Tree Analysis
|
|
10
|
+
|
|
11
|
+
Following the SKILL.md decision tree:
|
|
12
|
+
|
|
13
|
+
- Is this a lookup/summarize/quote? **No** — user explicitly says "帮我把这个决策记下来" (save this decision).
|
|
14
|
+
- Is this a save/record/update? **Yes** — user wants to record a meeting decision.
|
|
15
|
+
- Single file or multiple files? **Single file** — one decision record.
|
|
16
|
+
|
|
17
|
+
**Path: Single-file edit (write operation)**
|
|
18
|
+
|
|
19
|
+
Save intent confirmed by keywords: "记下来" (record), "以后...可以查到" (retrievable later).
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 2: Bootstrap — List KB Tree
|
|
24
|
+
|
|
25
|
+
Before writing anything, I need to understand the KB structure.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
mindos file list
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Purpose**: Understand the existing directory structure, find where decisions or meeting notes are stored. The SKILL.md rule says: "NEVER assume directory names. Infer from the actual bootstrap tree."
|
|
32
|
+
|
|
33
|
+
**Expected output**: A file tree showing the KB structure. I would look for directories like:
|
|
34
|
+
- `decisions/` or `决策/`
|
|
35
|
+
- `meetings/` or `会议/`
|
|
36
|
+
- `notes/` or `笔记/`
|
|
37
|
+
- Or any other relevant directory
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 3: Search for Existing Related Content
|
|
42
|
+
|
|
43
|
+
The SKILL.md rule says: "NEVER search with a single keyword. Fire 2-4 parallel searches."
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
mindos search "用户反馈"
|
|
47
|
+
mindos search "NPS"
|
|
48
|
+
mindos search "feedback system"
|
|
49
|
+
mindos search "会议决策"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**Purpose**:
|
|
53
|
+
1. Check if there's already a note about this topic (avoid duplicates).
|
|
54
|
+
2. Find related files to understand context and where this decision fits.
|
|
55
|
+
3. Discover the local style/format used in existing decision records.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Step 4: Read Sibling Files for Style
|
|
60
|
+
|
|
61
|
+
The SKILL.md rule says: "NEVER create a file without checking siblings. Read 1-2 files in the target directory to learn local style."
|
|
62
|
+
|
|
63
|
+
Assuming the bootstrap tree reveals a `decisions/` or similar directory:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
mindos file read "decisions/<existing-decision-file>.md"
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Purpose**: Learn the local formatting conventions (heading style, metadata fields, date format, etc.) before creating a new file.
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Step 5: Create the Decision Record
|
|
74
|
+
|
|
75
|
+
Based on the KB structure discovered, I would create the file in the appropriate decisions directory. If no decisions directory exists, I would create the file under the most fitting existing subdirectory and inform the user.
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
mindos file create "decisions/2026-04-06-nps-feedback-system.md" --content "# 决策:用户反馈系统采用 NPS + 开放式评论方案
|
|
79
|
+
|
|
80
|
+
## 元信息
|
|
81
|
+
|
|
82
|
+
- **日期**: 2026-04-06
|
|
83
|
+
- **参与者**: 用户(本人)、产品经理
|
|
84
|
+
- **状态**: 已决定
|
|
85
|
+
|
|
86
|
+
## 背景
|
|
87
|
+
|
|
88
|
+
团队需要建立一个新的用户反馈系统,用于收集和分析用户对产品的意见。
|
|
89
|
+
|
|
90
|
+
## 决策内容
|
|
91
|
+
|
|
92
|
+
经与产品经理会议讨论,决定采用以下方案:
|
|
93
|
+
|
|
94
|
+
1. **NPS 打分**(Net Promoter Score):用 0-10 分制量化用户满意度和推荐意愿
|
|
95
|
+
2. **开放式评论**:在 NPS 打分基础上,提供自由文本输入框,让用户补充具体的反馈意见
|
|
96
|
+
|
|
97
|
+
## 决策理由
|
|
98
|
+
|
|
99
|
+
- NPS 是业界成熟的用户满意度度量标准,便于横向对比和趋势追踪
|
|
100
|
+
- 开放式评论弥补了纯数字打分缺乏细节的不足,能捕捉定性反馈
|
|
101
|
+
- 两者结合兼顾了定量分析和定性洞察
|
|
102
|
+
|
|
103
|
+
## 后续行动
|
|
104
|
+
|
|
105
|
+
- [ ] 确定 NPS 调查的触发时机和频率
|
|
106
|
+
- [ ] 设计评论输入的 UI 交互
|
|
107
|
+
- [ ] 制定数据分析和报告流程
|
|
108
|
+
"
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**File naming rationale**:
|
|
112
|
+
- 以日期开头 (`2026-04-06`) 方便按时间排序
|
|
113
|
+
- 用英文短横线连接的描述 (`nps-feedback-system`) 保证路径兼容性
|
|
114
|
+
- 放在 `decisions/` 目录下,符合"以后其他同事问起来可以查到"的需求
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Step 6: Post-Task Hook Check
|
|
119
|
+
|
|
120
|
+
Per SKILL.md post-task hooks table, scan for applicable hooks:
|
|
121
|
+
|
|
122
|
+
| Hook | Applicable? | Reason |
|
|
123
|
+
|------|-------------|--------|
|
|
124
|
+
| Experience capture | No | Not a debugging/troubleshooting session |
|
|
125
|
+
| Consistency sync | No | New file, no existing backlinks |
|
|
126
|
+
| SOP drift | No | Not following an SOP |
|
|
127
|
+
| Linked update | No | No related CSV/TODO |
|
|
128
|
+
| Structure classification | Maybe | If created in inbox/temp — but we targeted `decisions/` directly |
|
|
129
|
+
| Pattern extraction | No | Single operation this session |
|
|
130
|
+
|
|
131
|
+
**Result**: No post-task hook triggers for this operation.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Step 7: Confirm to User
|
|
136
|
+
|
|
137
|
+
> 已将会议决策记录保存到 `decisions/2026-04-06-nps-feedback-system.md`。
|
|
138
|
+
>
|
|
139
|
+
> 记录了以下要点:
|
|
140
|
+
> - 与产品经理讨论的用户反馈系统方案
|
|
141
|
+
> - 决策:采用 NPS 打分 + 开放式评论
|
|
142
|
+
> - 决策理由和后续待办事项
|
|
143
|
+
>
|
|
144
|
+
> 其他同事可以通过搜索"NPS"、"用户反馈"或"feedback"在知识库中找到这条记录。
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Summary of Commands Executed
|
|
149
|
+
|
|
150
|
+
| Step | Command | Purpose |
|
|
151
|
+
|------|---------|---------|
|
|
152
|
+
| 1 | `mindos file list` | Bootstrap: understand KB structure |
|
|
153
|
+
| 2 | `mindos search "用户反馈"` | Check for existing related content |
|
|
154
|
+
| 3 | `mindos search "NPS"` | Check for existing related content |
|
|
155
|
+
| 4 | `mindos search "feedback system"` | Check for existing related content |
|
|
156
|
+
| 5 | `mindos search "会议决策"` | Check for existing related content |
|
|
157
|
+
| 6 | `mindos file read "decisions/<sibling>.md"` | Learn local style conventions |
|
|
158
|
+
| 7 | `mindos file create "decisions/2026-04-06-nps-feedback-system.md" --content "..."` | Create the decision record |
|
|
159
|
+
|
|
160
|
+
## SKILL.md Rules Followed
|
|
161
|
+
|
|
162
|
+
1. **Bootstrap first** — Listed KB tree before any write operation (Rule 1)
|
|
163
|
+
2. **Write only on explicit save intent** — User said "帮我把这个决策记下来" (Rule 2)
|
|
164
|
+
3. **Read before write** — Searched for existing content and read sibling files (Rule 6)
|
|
165
|
+
4. **Never assume directory names** — Used bootstrap tree output to determine target directory (NEVER rule)
|
|
166
|
+
5. **Never search with single keyword** — Fired 4 parallel searches with synonyms and bilingual variants (NEVER rule)
|
|
167
|
+
6. **Never create file without checking siblings** — Read existing files in target directory first (NEVER rule)
|
|
168
|
+
7. **Post-task hooks scanned** — Checked all 6 hooks, none triggered
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 2,
|
|
3
|
+
"eval_name": "search-past-decision-zh",
|
|
4
|
+
"prompt": "上周我记得我们讨论过API限流的方案,具体是怎么定的来着?好像是每分钟100次还是200次?我找不到了。",
|
|
5
|
+
"assertions": [
|
|
6
|
+
{"text": "Uses mindos search with multiple keyword variants (synonyms, Chinese/English)", "type": "behavioral"},
|
|
7
|
+
{"text": "Searches for API rate limiting related terms", "type": "content"},
|
|
8
|
+
{"text": "Read-only approach - does not write to KB", "type": "behavioral"},
|
|
9
|
+
{"text": "Would cite file path if results found", "type": "behavioral"}
|
|
10
|
+
]
|
|
11
|
+
}
|
package/skills/mindos-max-workspace/iteration-1/search-past-decision-zh/old_skill/grading.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"eval_id": 2,
|
|
3
|
+
"eval_name": "search-past-decision-zh",
|
|
4
|
+
"run_type": "old_skill",
|
|
5
|
+
"skill": "mindos-original",
|
|
6
|
+
"expectations": [
|
|
7
|
+
{
|
|
8
|
+
"text": "Uses mindos search with multiple keyword variants (synonyms, Chinese/English)",
|
|
9
|
+
"passed": true,
|
|
10
|
+
"evidence": "Fired 4 parallel searches: 'API限流', '速率限制', 'rate limit', '每分钟100次'."
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"text": "Searches for API rate limiting related terms",
|
|
14
|
+
"passed": true,
|
|
15
|
+
"evidence": "All 4 queries target API rate limiting concepts."
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"text": "Read-only approach - does not write to KB",
|
|
19
|
+
"passed": true,
|
|
20
|
+
"evidence": "Post-task hooks section states 'Skipped (read-only task, no writes)'. No write commands used."
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"text": "Would cite file path if results found",
|
|
24
|
+
"passed": true,
|
|
25
|
+
"evidence": "Two example responses both include file paths in citations."
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|