auto-sync: 2026-06-02 22:56:59
This commit is contained in:
@@ -209,82 +209,11 @@ if cls.get("cooldown_seconds"):
|
||||
stderr_preview 和 exit_signal 写 metadata 的方案暂缓,本轮不实施。
|
||||
已有 metadata 记录 fallback_count、api_retry_count、retry_count 等计数器。
|
||||
|
||||
## 4. Registry 清理
|
||||
## 4. Registry 清理 — 暂缓,不在本轮实施
|
||||
|
||||
### 4.1 现有 delete_project 的问题
|
||||
|
||||
- `DELETE /api/projects/{id}` 只逻辑删除(status→deleted),不清理 registry 记录
|
||||
- `discover_projects()` 只注册新项目,不清理 data 已删的记录
|
||||
- 无批量操作 API
|
||||
|
||||
### 4.2 修复方案
|
||||
|
||||
#### delete_project 增强
|
||||
|
||||
删除项目时同步清理 registry:
|
||||
|
||||
```python
|
||||
# src/blackboard/registry.py
|
||||
def delete_project(self, project_id: str) -> bool:
|
||||
"""物理删除项目:registry 记录 + data 目录"""
|
||||
# 1. 删除 data 目录
|
||||
project_dir = self.root / project_id
|
||||
if project_dir.exists():
|
||||
shutil.rmtree(project_dir, ignore_errors=True)
|
||||
# 2. 删除 registry 记录
|
||||
conn = self._connect()
|
||||
conn.execute("DELETE FROM projects WHERE id=?", (project_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return True
|
||||
```
|
||||
|
||||
安全性:保持 `DELETE /api/projects/{id}` 需要 project_id 精确匹配,不支持通配符。
|
||||
|
||||
#### discover_projects 增强
|
||||
|
||||
扫描时同步清理 data 不存在的 registry 记录:
|
||||
|
||||
```python
|
||||
def discover_projects(self, scan_dir=None):
|
||||
# ... 现有注册逻辑 ...
|
||||
|
||||
# 清理孤儿:registry 有但 data 没目录的
|
||||
conn = self._connect()
|
||||
all_registered = conn.execute("SELECT id FROM projects WHERE status='active'").fetchall()
|
||||
for (pid,) in all_registered:
|
||||
if not (self.root / pid).is_dir():
|
||||
conn.execute("UPDATE projects SET status='deleted' WHERE id=?", (pid,))
|
||||
cleaned.append(pid)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
```
|
||||
|
||||
#### 批量清理 API
|
||||
|
||||
新增运维端点(`src/api/admin_routes.py`):
|
||||
|
||||
```
|
||||
POST /api/admin/cleanup
|
||||
body: {
|
||||
"action": "purge_deleted", # 清理所有 status=deleted 的项目和 data
|
||||
"confirm": true # 安全确认
|
||||
}
|
||||
body: {
|
||||
"action": "purge_prefix", # 按前缀批量删除
|
||||
"prefix": "e2e-",
|
||||
"confirm": true
|
||||
}
|
||||
body: {
|
||||
"action": "sync_registry", # registry ↔ data 双向同步
|
||||
"confirm": true
|
||||
}
|
||||
```
|
||||
|
||||
安全机制:
|
||||
- 所有操作需要 `confirm: true`
|
||||
- `confirm: false` 时返回 dry-run 预览(将删除什么)
|
||||
- 可选:admin token 验证
|
||||
> 当前 delete_project 为逻辑删除(status→deleted),无物理删除。discover_projects 无孤儿清理。
|
||||
> 司马懿评审建议物理删除加恢复机制或 admin auth。
|
||||
> 本轮聚焦 classify outcome,Registry 清理后续单独实施。
|
||||
|
||||
## 5. 并发控制一致性检查
|
||||
|
||||
|
||||
Reference in New Issue
Block a user