pi-memory-strata 0.1.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.
- package/LICENSE +21 -0
- package/README.md +155 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +62 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +80 -0
- package/dist/types.d.ts +51 -0
- package/dist/types.js +4 -0
- package/package.json +47 -0
- package/scripts/daily_memory_maintenance.py +452 -0
- package/scripts/memory_distill_check.py +281 -0
- package/templates/01-status.md +45 -0
- package/templates/02-core.md +62 -0
- package/templates/MEMORY_/351/224/232/347/202/271/347/211/207/346/256/265.md +13 -0
- package/templates//345/274/200/345/217/221/347/212/266/346/200/201_/346/250/241/346/235/277.md +45 -0
- package/templates//350/256/260/345/277/206/345/256/236/350/267/265/346/227/245/345/277/227_/346/250/241/346/235/277.md +44 -0
- package/templates//351/241/271/347/233/256/346/240/270/345/277/203/346/241/243/346/241/210_/346/250/241/346/235/277.md +71 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
memory_distill_check.py - Memory Strata 蒸馏检查工具
|
|
4
|
+
|
|
5
|
+
检查四层记忆系统的状态,提示需要蒸馏的内容。
|
|
6
|
+
适用于任何使用 memory-strata 架构的项目。
|
|
7
|
+
|
|
8
|
+
用法:
|
|
9
|
+
python memory_distill_check.py # 自动扫描所有项目
|
|
10
|
+
python memory_distill_check.py --project MyProject # 检查指定项目
|
|
11
|
+
|
|
12
|
+
功能:
|
|
13
|
+
1. 扫描每日日志,检查近7天覆盖情况
|
|
14
|
+
2. 检查各项目开发状态的新鲜度
|
|
15
|
+
3. 检查各项目核心档案的新鲜度
|
|
16
|
+
4. 检查 MEMORY.md 的 last_used 标记,提示衰减
|
|
17
|
+
5. 检查记忆锚点完整性
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import os
|
|
21
|
+
import re
|
|
22
|
+
import glob
|
|
23
|
+
import sys
|
|
24
|
+
import argparse
|
|
25
|
+
from datetime import datetime, timedelta
|
|
26
|
+
from pathlib import Path
|
|
27
|
+
|
|
28
|
+
# Windows UTF-8 输出
|
|
29
|
+
if sys.platform == "win32":
|
|
30
|
+
sys.stdout.reconfigure(encoding="utf-8")
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def find_vault():
|
|
34
|
+
"""自动发现 Obsidian vault 路径"""
|
|
35
|
+
# 1. 环境变量
|
|
36
|
+
env = os.environ.get("OBSIDIAN_VAULT_PATH", "").strip()
|
|
37
|
+
if env and os.path.isdir(env):
|
|
38
|
+
return env
|
|
39
|
+
# 2. 常见位置
|
|
40
|
+
home = Path.home()
|
|
41
|
+
candidates = [
|
|
42
|
+
home / "dumatework" / "dumate-memory-vault",
|
|
43
|
+
home / "ObsidianVault",
|
|
44
|
+
home / "vault",
|
|
45
|
+
]
|
|
46
|
+
for c in candidates:
|
|
47
|
+
if c.is_dir():
|
|
48
|
+
return str(c)
|
|
49
|
+
return None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def discover_projects(vault):
|
|
53
|
+
"""自动发现 vault 中的项目"""
|
|
54
|
+
projects_dir = os.path.join(vault, "20-projects")
|
|
55
|
+
if not os.path.isdir(projects_dir):
|
|
56
|
+
return []
|
|
57
|
+
projects = []
|
|
58
|
+
for name in os.listdir(projects_dir):
|
|
59
|
+
pdir = os.path.join(projects_dir, name)
|
|
60
|
+
if os.path.isdir(pdir):
|
|
61
|
+
status = os.path.join(pdir, "开发状态.md")
|
|
62
|
+
core = os.path.join(pdir, "项目核心档案.md")
|
|
63
|
+
if os.path.exists(status) or os.path.exists(core):
|
|
64
|
+
projects.append(name)
|
|
65
|
+
return projects
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def check_journal_recency(vault):
|
|
69
|
+
"""检查最近日志的覆盖情况"""
|
|
70
|
+
print("\n" + "=" * 60)
|
|
71
|
+
print("[1] 日志覆盖检查 (L4)")
|
|
72
|
+
print("=" * 60)
|
|
73
|
+
|
|
74
|
+
journal_dir = os.path.join(vault, "10-journal")
|
|
75
|
+
if not os.path.isdir(journal_dir):
|
|
76
|
+
print(" ! 10-journal 目录不存在,跳过")
|
|
77
|
+
return
|
|
78
|
+
|
|
79
|
+
today = datetime.now()
|
|
80
|
+
lines = []
|
|
81
|
+
for i in range(7):
|
|
82
|
+
d = today - timedelta(days=i)
|
|
83
|
+
fname = os.path.join(journal_dir, f"{d.strftime('%Y-%m-%d')}.md")
|
|
84
|
+
if os.path.exists(fname):
|
|
85
|
+
size = os.path.getsize(fname)
|
|
86
|
+
lines.append(f" {d.strftime('%Y-%m-%d')} OK ({size} bytes)")
|
|
87
|
+
else:
|
|
88
|
+
lines.append(f" {d.strftime('%Y-%m-%d')} MISSING")
|
|
89
|
+
|
|
90
|
+
for line in lines:
|
|
91
|
+
print(line)
|
|
92
|
+
|
|
93
|
+
missing = sum(1 for l in lines if "MISSING" in l)
|
|
94
|
+
if missing > 3:
|
|
95
|
+
print(f"\n ! 近7天有{missing}天无日志,可能有信息未记录")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def check_project(vault, project_name):
|
|
99
|
+
"""检查单个项目的记忆状态"""
|
|
100
|
+
pdir = os.path.join(vault, "20-projects", project_name)
|
|
101
|
+
status_file = os.path.join(pdir, "开发状态.md")
|
|
102
|
+
core_file = os.path.join(pdir, "项目核心档案.md")
|
|
103
|
+
|
|
104
|
+
print(f"\n{'=' * 60}")
|
|
105
|
+
print(f" 项目: {project_name}")
|
|
106
|
+
print(f"{'=' * 60}")
|
|
107
|
+
|
|
108
|
+
# 开发状态新鲜度 (L3)
|
|
109
|
+
if os.path.exists(status_file):
|
|
110
|
+
with open(status_file, "r", encoding="utf-8") as f:
|
|
111
|
+
content = f.read()
|
|
112
|
+
m = re.search(r"updated:\s*(\d{4}-\d{2}-\d{2})", content)
|
|
113
|
+
if m:
|
|
114
|
+
updated = datetime.strptime(m.group(1), "%Y-%m-%d")
|
|
115
|
+
days_ago = (datetime.now() - updated).days
|
|
116
|
+
icon = "OK" if days_ago <= 7 else "STALE"
|
|
117
|
+
print(f" [L3] 开发状态: updated {m.group(1)} ({days_ago}d ago) {icon}")
|
|
118
|
+
if days_ago > 7:
|
|
119
|
+
print(f" -> 建议回顾近{days_ago}天的会话,更新开发状态")
|
|
120
|
+
else:
|
|
121
|
+
print(f" [L3] 开发状态: 缺少 updated 日期")
|
|
122
|
+
else:
|
|
123
|
+
print(f" [L3] 开发状态: 不存在")
|
|
124
|
+
|
|
125
|
+
# 核心档案新鲜度 (L2)
|
|
126
|
+
if os.path.exists(core_file):
|
|
127
|
+
with open(core_file, "r", encoding="utf-8") as f:
|
|
128
|
+
content = f.read()
|
|
129
|
+
m = re.search(r"updated:\s*(\d{4}-\d{2}-\d{2})", content)
|
|
130
|
+
if m:
|
|
131
|
+
updated = datetime.strptime(m.group(1), "%Y-%m-%d")
|
|
132
|
+
days_ago = (datetime.now() - updated).days
|
|
133
|
+
icon = "OK" if days_ago <= 30 else "STALE"
|
|
134
|
+
print(f" [L2] 核心档案: updated {m.group(1)} ({days_ago}d ago) {icon}")
|
|
135
|
+
if days_ago > 30:
|
|
136
|
+
print(f" -> 检查开发状态中是否有稳定信息需要提升")
|
|
137
|
+
else:
|
|
138
|
+
print(f" [L2] 核心档案: 缺少 updated 日期")
|
|
139
|
+
else:
|
|
140
|
+
print(f" [L2] 核心档案: 不存在")
|
|
141
|
+
|
|
142
|
+
# 检查双向链接
|
|
143
|
+
if os.path.exists(status_file) and os.path.exists(core_file):
|
|
144
|
+
with open(status_file, "r", encoding="utf-8") as f:
|
|
145
|
+
s = f.read()
|
|
146
|
+
with open(core_file, "r", encoding="utf-8") as f:
|
|
147
|
+
c = f.read()
|
|
148
|
+
status_links_core = "[[项目核心档案" in s or "[[核心档案" in s
|
|
149
|
+
core_links_status = "[[开发状态" in c
|
|
150
|
+
if status_links_core and core_links_status:
|
|
151
|
+
print(f" [LINK] L2 <-> L3 双向链接: OK")
|
|
152
|
+
else:
|
|
153
|
+
missing_links = []
|
|
154
|
+
if not status_links_core:
|
|
155
|
+
missing_links.append("L3->L2")
|
|
156
|
+
if not core_links_status:
|
|
157
|
+
missing_links.append("L2->L3")
|
|
158
|
+
print(f" [LINK] 双向链接不完整: 缺 {', '.join(missing_links)}")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def check_memory_last_used(vault):
|
|
162
|
+
"""检查 MEMORY.md 中记忆的 last_used 标记 (L1)"""
|
|
163
|
+
print("\n" + "=" * 60)
|
|
164
|
+
print("[L1] 记忆强度衰减检查 (last_used)")
|
|
165
|
+
print("=" * 60)
|
|
166
|
+
|
|
167
|
+
memory_file = os.path.join(vault, "00-brain", "MEMORY.md")
|
|
168
|
+
if not os.path.exists(memory_file):
|
|
169
|
+
print(" ! MEMORY.md 不存在")
|
|
170
|
+
return
|
|
171
|
+
|
|
172
|
+
with open(memory_file, "r", encoding="utf-8") as f:
|
|
173
|
+
content = f.read()
|
|
174
|
+
|
|
175
|
+
tagged = re.findall(
|
|
176
|
+
r"- \*\*(.+?)\*\*.*?\[last_used:\s*(\d{4}-\d{2}-\d{2})\]", content
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
if not tagged:
|
|
180
|
+
print(
|
|
181
|
+
" (no last_used tags found - add [last_used: YYYY-MM-DD] to your MEMORY.md entries)"
|
|
182
|
+
)
|
|
183
|
+
return
|
|
184
|
+
|
|
185
|
+
today = datetime.now()
|
|
186
|
+
stale = 0
|
|
187
|
+
for label, date_str in tagged:
|
|
188
|
+
last = datetime.strptime(date_str, "%Y-%m-%d")
|
|
189
|
+
days_ago = (today - last).days
|
|
190
|
+
if days_ago > 30:
|
|
191
|
+
print(
|
|
192
|
+
f" !! [{label}] last_used: {date_str} ({days_ago}d ago) -> consider archiving"
|
|
193
|
+
)
|
|
194
|
+
stale += 1
|
|
195
|
+
elif days_ago > 14:
|
|
196
|
+
print(
|
|
197
|
+
f" ! [{label}] last_used: {date_str} ({days_ago}d ago) -> rarely used"
|
|
198
|
+
)
|
|
199
|
+
else:
|
|
200
|
+
print(f" OK [{label}] last_used: {date_str} ({days_ago}d ago)")
|
|
201
|
+
|
|
202
|
+
if stale > 0:
|
|
203
|
+
print(f"\n {stale} entries >30d unused, consider downgrading to L3/L4")
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def check_anchors(vault):
|
|
207
|
+
"""检查记忆锚点是否完整 (L1)"""
|
|
208
|
+
print("\n" + "=" * 60)
|
|
209
|
+
print("[L1] 记忆锚点检查")
|
|
210
|
+
print("=" * 60)
|
|
211
|
+
|
|
212
|
+
memory_file = os.path.join(vault, "00-brain", "MEMORY.md")
|
|
213
|
+
if not os.path.exists(memory_file):
|
|
214
|
+
print(" ! MEMORY.md 不存在")
|
|
215
|
+
return
|
|
216
|
+
|
|
217
|
+
with open(memory_file, "r", encoding="utf-8") as f:
|
|
218
|
+
content = f.read()
|
|
219
|
+
|
|
220
|
+
# 查找"经验教训"或"锚点"部分中的条目
|
|
221
|
+
anchor_section = re.search(r"## 经验教训(.*?)(?=##|$)", content, re.DOTALL)
|
|
222
|
+
if anchor_section:
|
|
223
|
+
anchors = re.findall(r"-\s+\*\*(.+?)\*\*", anchor_section.group(1))
|
|
224
|
+
if anchors:
|
|
225
|
+
print(f" Found {len(anchors)} anchor(s) in MEMORY.md:")
|
|
226
|
+
for a in anchors:
|
|
227
|
+
print(f" - {a}")
|
|
228
|
+
else:
|
|
229
|
+
print(" ! '经验教训' section exists but has no anchors")
|
|
230
|
+
else:
|
|
231
|
+
print(" ! No '经验教训' section found in MEMORY.md")
|
|
232
|
+
print(" -> Add a '## 经验教训' section with memory anchors")
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def main():
|
|
236
|
+
parser = argparse.ArgumentParser(description="Memory Strata - Distillation Check")
|
|
237
|
+
parser.add_argument("--project", help="Check a specific project")
|
|
238
|
+
parser.add_argument("--vault", help="Path to Obsidian vault")
|
|
239
|
+
args = parser.parse_args()
|
|
240
|
+
|
|
241
|
+
vault = args.vault or find_vault()
|
|
242
|
+
if not vault:
|
|
243
|
+
print(
|
|
244
|
+
"ERROR: Cannot find Obsidian vault. Set OBSIDIAN_VAULT_PATH or use --vault"
|
|
245
|
+
)
|
|
246
|
+
sys.exit(1)
|
|
247
|
+
|
|
248
|
+
print(f"\nMemory Strata - Distillation Check")
|
|
249
|
+
print(f" Vault: {vault}")
|
|
250
|
+
print(f" Date: {datetime.now().strftime('%Y-%m-%d %H:%M')}")
|
|
251
|
+
|
|
252
|
+
# L4 日志覆盖
|
|
253
|
+
check_journal_recency(vault)
|
|
254
|
+
|
|
255
|
+
# 项目状态
|
|
256
|
+
if args.project:
|
|
257
|
+
projects = [args.project]
|
|
258
|
+
else:
|
|
259
|
+
projects = discover_projects(vault)
|
|
260
|
+
|
|
261
|
+
if projects:
|
|
262
|
+
for p in projects:
|
|
263
|
+
check_project(vault, p)
|
|
264
|
+
else:
|
|
265
|
+
print("\n (No projects found in 20-projects/)")
|
|
266
|
+
|
|
267
|
+
# L1 衰减检查
|
|
268
|
+
check_memory_last_used(vault)
|
|
269
|
+
|
|
270
|
+
# L1 锚点检查
|
|
271
|
+
check_anchors(vault)
|
|
272
|
+
|
|
273
|
+
print("\n" + "=" * 60)
|
|
274
|
+
print(
|
|
275
|
+
"Check complete. Follow the suggestions above to maintain your memory system."
|
|
276
|
+
)
|
|
277
|
+
print("=" * 60)
|
|
278
|
+
|
|
279
|
+
|
|
280
|
+
if __name__ == "__main__":
|
|
281
|
+
main()
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Project: {{PROJECT_NAME}} — Development Status
|
|
2
|
+
|
|
3
|
+
> Last updated: {{YYYY-MM-DD}}
|
|
4
|
+
> Type: L3 (Dev Status)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Current Phase
|
|
9
|
+
|
|
10
|
+
| Phase | Status | Since |
|
|
11
|
+
|-------|--------|-------|
|
|
12
|
+
| {{Phase Name}} | {{in progress / completed / blocked}} | {{YYYY-MM-DD}} |
|
|
13
|
+
|
|
14
|
+
## Progress This Session
|
|
15
|
+
|
|
16
|
+
- [x] {{Completed task}}
|
|
17
|
+
- [x] {{Completed task}}
|
|
18
|
+
- [ ] {{Pending task}}
|
|
19
|
+
|
|
20
|
+
## Known Issues
|
|
21
|
+
|
|
22
|
+
| Priority | Issue | Impact | Resolution |
|
|
23
|
+
|----------|-------|--------|------------|
|
|
24
|
+
| P0 | {{Critical issue}} | {{blocks release}} | {{status}} |
|
|
25
|
+
| P1 | {{Important issue}} | {{workaround available}} | {{status}} |
|
|
26
|
+
|
|
27
|
+
## Decisions & Context
|
|
28
|
+
|
|
29
|
+
- **{{Decision title}}**: {{Decision content}} — decided on {{YYYY-MM-DD}}
|
|
30
|
+
- **{{Technical choice}}**: {{Why this choice}} — confirmed
|
|
31
|
+
|
|
32
|
+
## Next Actions
|
|
33
|
+
|
|
34
|
+
1. {{Next step 1}}
|
|
35
|
+
2. {{Next step 2}}
|
|
36
|
+
3. {{Next step 3}}
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Bidirectional Links
|
|
41
|
+
|
|
42
|
+
- [[{{Project Core Archive}}]] ← stable facts about this project
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
*Auto-maintained by [pi-memory-strata](https://github.com/bailianfa/pi-memory-strata)*
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# {{PROJECT_NAME}} — Project Core Archive
|
|
2
|
+
|
|
3
|
+
> Last updated: {{YYYY-MM-DD}}
|
|
4
|
+
> Type: L2 (Project Core)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Hardware Selections
|
|
9
|
+
|
|
10
|
+
| Component | Model | Status | Rationale |
|
|
11
|
+
|-----------|-------|--------|-----------|
|
|
12
|
+
| **CPU/SoC** | {{model}} | {{selected / testing}} | {{reason}} |
|
|
13
|
+
| **WiFi/BT** | {{model}} | {{selected / testing}} | {{SRRC certified, avoid re-research}} |
|
|
14
|
+
| **Camera IR** | {{model}} | {{selected / testing}} | {{global shutter for eye tracking}} |
|
|
15
|
+
| **Camera RGB** | {{model}} | {{selected / testing}} | {{4K for fundus imaging}} |
|
|
16
|
+
| **Display** | {{model}} | {{selected / testing}} | {{resolution, interface}} |
|
|
17
|
+
| **Touch** | {{model}} | {{selected / testing}} | {{capacitive/resistive}} |
|
|
18
|
+
|
|
19
|
+
## Architecture Decision Records (ADR)
|
|
20
|
+
|
|
21
|
+
### ADR-001: {{Decision Title}}
|
|
22
|
+
- **Context**: {{Why this decision was needed}}
|
|
23
|
+
- **Decision**: {{What was chosen}}
|
|
24
|
+
- **Consequences**: {{Trade-offs and implications}}
|
|
25
|
+
- **Date**: {{YYYY-MM-DD}}
|
|
26
|
+
|
|
27
|
+
### ADR-002: {{Decision Title}}
|
|
28
|
+
- **Context**: {{Why this decision was needed}}
|
|
29
|
+
- **Decision**: {{What was chosen}}
|
|
30
|
+
- **Consequences**: {{Trade-offs and implications}}
|
|
31
|
+
- **Date**: {{YYYY-MM-DD}}
|
|
32
|
+
|
|
33
|
+
## Memory Anchors
|
|
34
|
+
|
|
35
|
+
> These are facts that are easy to forget but costly to lose. Do NOT re-research these.
|
|
36
|
+
|
|
37
|
+
- **{{Anchor title}}**: {{Anchor content}} — [last_used: {{YYYY-MM-DD}}]
|
|
38
|
+
- **{{Anchor title}}**: {{Anchor content}} — [last_used: {{YYYY-MM-DD}}]
|
|
39
|
+
|
|
40
|
+
## Build & Deployment
|
|
41
|
+
|
|
42
|
+
| Environment | Details |
|
|
43
|
+
|-------------|---------|
|
|
44
|
+
| **Build** | {{Build method, e.g., WSL2 Ubuntu 22.04}} |
|
|
45
|
+
| **Compiler** | {{aarch64-buildroot-linux-gnu-gcc}} |
|
|
46
|
+
| **Deployment** | {{scp/rsync method}} |
|
|
47
|
+
| **Remote** | {{user@host}} |
|
|
48
|
+
|
|
49
|
+
## External References
|
|
50
|
+
|
|
51
|
+
- **Hardware Docs**: {{Link to datasheets}}
|
|
52
|
+
- **SDK Docs**: {{Link to SDK documentation}}
|
|
53
|
+
- **Vendor Contact**: {{Vendor name, contact}}
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Bidirectional Links
|
|
58
|
+
|
|
59
|
+
- [[{{Dev Status}}]] ← current development progress and recent decisions
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
*Auto-maintained by [pi-memory-strata](https://github.com/bailianfa/pi-memory-strata)*
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## 经验教训(记忆锚点示例)
|
|
2
|
+
|
|
3
|
+
<!-- 将以下格式的锚点添加到 MEMORY.md 的"经验教训"部分 -->
|
|
4
|
+
<!-- 每条锚点 = 易遗忘事实 + 遗忘后果 -->
|
|
5
|
+
|
|
6
|
+
- **[事实摘要]**:[详细说明]——[后果提示,如"不可遗忘"/"不要重新研究"]
|
|
7
|
+
- **[事实摘要]**:[详细说明]——[后果提示]
|
|
8
|
+
|
|
9
|
+
<!-- 示例:
|
|
10
|
+
- **横屏是产品默认**:开发板默认竖屏,但产品横屏使用——这是项目的基本事实,不可遗忘
|
|
11
|
+
- **AP6256已选型**:SRRC已认证,是RK3568生态主流选择——不要重新研究这个问题
|
|
12
|
+
- **只用增量build.sh**:禁止--full全量编译——全量编译会失败浪费时间
|
|
13
|
+
-->
|
package/templates//345/274/200/345/217/221/347/212/266/346/200/201_/346/250/241/346/235/277.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: <项目名称>开发状态
|
|
3
|
+
type: project-status
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
permalink: dumate/20-projects/<项目slug>/status
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# <项目名称>开发状态
|
|
10
|
+
|
|
11
|
+
> 本文档跟踪当前开发进展、活跃问题和近期上下文。
|
|
12
|
+
> 每次重要进展后更新。超过 1 个月无变化的内容应沉淀到 [[项目核心档案]]。
|
|
13
|
+
> 记忆维护规范见 [[记忆维护规范]],蒸馏规则见 [[记忆蒸馏规则]]。
|
|
14
|
+
|
|
15
|
+
## 当前阶段:<阶段描述>
|
|
16
|
+
|
|
17
|
+
### 已完成
|
|
18
|
+
|
|
19
|
+
- [ ] <!-- 功能描述(日期)→ 见 [[项目核心档案#对应章节]] -->
|
|
20
|
+
|
|
21
|
+
### 进行中
|
|
22
|
+
|
|
23
|
+
- [ ]
|
|
24
|
+
|
|
25
|
+
### 待做(近期)
|
|
26
|
+
|
|
27
|
+
- [ ]
|
|
28
|
+
|
|
29
|
+
## 当前关键参数
|
|
30
|
+
|
|
31
|
+
<!-- 经过验证的参数值,如屏幕尺寸、校准参数、UI 布局数值等 -->
|
|
32
|
+
|
|
33
|
+
## 操作方案
|
|
34
|
+
|
|
35
|
+
<!-- 日常操作流程,如部署、截屏、调试等 -->
|
|
36
|
+
|
|
37
|
+
## 板子/环境当前配置
|
|
38
|
+
|
|
39
|
+
- **IP**:
|
|
40
|
+
- **程序路径**:
|
|
41
|
+
- **日志路径**:
|
|
42
|
+
|
|
43
|
+
## 已知问题
|
|
44
|
+
|
|
45
|
+
-
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 记忆实践日志
|
|
3
|
+
type: experiment-log
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
permalink: dumate/20-projects/<项目slug>/memory-log
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 记忆实践日志
|
|
9
|
+
|
|
10
|
+
> 记录记忆系统的使用效果、失效事件和改进实践。
|
|
11
|
+
> 如果后续要发表论文,这些数据是实证基础。
|
|
12
|
+
|
|
13
|
+
## 评估指标定义
|
|
14
|
+
|
|
15
|
+
| 指标 | 定义 | 记录方式 |
|
|
16
|
+
|------|------|----------|
|
|
17
|
+
| 召回成功率 | 会话启动时关键事实正确回忆的比例 | 每次会话自评 |
|
|
18
|
+
| 失效事件 | 遗忘/误忆/重复研究已解决问题 | 发生时记录 |
|
|
19
|
+
| 维护成本 | 每次会话花在记忆维护上的时间 | 估算分钟数 |
|
|
20
|
+
| 锚点命中率 | 记忆锚点被实际使用的比例 | 蒸馏检查脚本 |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 记录模板
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
### YYYY-MM-DD:[会话主题]
|
|
28
|
+
|
|
29
|
+
**记忆召回情况**:[成功/部分/失败] — [具体说明]
|
|
30
|
+
|
|
31
|
+
**失效事件**(如有):
|
|
32
|
+
| 时间 | 类型 | 内容 | 后果 | 改进措施 |
|
|
33
|
+
|------|------|------|------|----------|
|
|
34
|
+
|
|
35
|
+
**蒸馏操作**(如有):
|
|
36
|
+
- [源文件] → [目标文件]:[蒸馏内容]
|
|
37
|
+
|
|
38
|
+
**last_used 更新**(如有):
|
|
39
|
+
- [记忆条目]:[旧日期] → [新日期]
|
|
40
|
+
|
|
41
|
+
**维护成本**:约 [N] 分钟
|
|
42
|
+
|
|
43
|
+
**锚点命中**:[哪些锚点被实际使用]
|
|
44
|
+
```
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: <项目名称>项目核心档案
|
|
3
|
+
type: project-core
|
|
4
|
+
created: YYYY-MM-DD
|
|
5
|
+
updated: YYYY-MM-DD
|
|
6
|
+
permalink: dumate/20-projects/<项目slug>/core
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# <项目名称>项目核心档案
|
|
10
|
+
|
|
11
|
+
> 本文档是项目的"事实锚点",只放**确定且稳定**的关键信息。
|
|
12
|
+
> 变更时更新 updated 日期。不确定的信息不放这里。
|
|
13
|
+
> 当前进展见 [[开发状态]],记忆维护见 [[记忆维护规范]]。
|
|
14
|
+
|
|
15
|
+
## 产品定位
|
|
16
|
+
|
|
17
|
+
- **产品名称**:
|
|
18
|
+
- **所属公司**:
|
|
19
|
+
- **核心功能**:
|
|
20
|
+
- **目标用户**:
|
|
21
|
+
|
|
22
|
+
## 硬件平台
|
|
23
|
+
|
|
24
|
+
### 主板
|
|
25
|
+
|
|
26
|
+
- **开发板**:
|
|
27
|
+
- **SoC**:
|
|
28
|
+
- **内存**:
|
|
29
|
+
- **存储**:
|
|
30
|
+
|
|
31
|
+
### 显示与输入
|
|
32
|
+
|
|
33
|
+
- **屏幕**:
|
|
34
|
+
- **触摸**:
|
|
35
|
+
- **其他输入**:
|
|
36
|
+
|
|
37
|
+
### 系统
|
|
38
|
+
|
|
39
|
+
- **内核**:
|
|
40
|
+
- **文件系统**:
|
|
41
|
+
- **图形栈**:
|
|
42
|
+
|
|
43
|
+
### 关键外设
|
|
44
|
+
|
|
45
|
+
<!-- 摄像头、无线模组、传感器等 -->
|
|
46
|
+
|
|
47
|
+
## 软件架构
|
|
48
|
+
|
|
49
|
+
- **UI 框架**:
|
|
50
|
+
- **项目路径**:
|
|
51
|
+
- **关键源码**:
|
|
52
|
+
|
|
53
|
+
## 编译部署
|
|
54
|
+
|
|
55
|
+
- **编译环境**:
|
|
56
|
+
- **编译命令**:
|
|
57
|
+
- **部署方式**:
|
|
58
|
+
|
|
59
|
+
## 协作模式
|
|
60
|
+
|
|
61
|
+
<!-- 描述各角色分工 -->
|
|
62
|
+
|
|
63
|
+
## 重要决策记录(ADR)
|
|
64
|
+
|
|
65
|
+
| 日期 | 决策 | 原因 |
|
|
66
|
+
|------|------|------|
|
|
67
|
+
| | | |
|
|
68
|
+
|
|
69
|
+
## 资料路径
|
|
70
|
+
|
|
71
|
+
<!-- 项目文档、SDK、参考资料等 -->
|