From 3561e1efdc8c254eb46638212a66598141d128ea Mon Sep 17 00:00:00 2001 From: cfdaily Date: Tue, 2 Jun 2026 22:56:59 +0800 Subject: [PATCH] auto-sync: 2026-06-02 22:56:59 --- .../08-classify-outcome-optimization.md | 79 +------------------ 1 file changed, 4 insertions(+), 75 deletions(-) diff --git a/docs/design/08-classify-outcome-optimization.md b/docs/design/08-classify-outcome-optimization.md index 763c48b..c560463 100644 --- a/docs/design/08-classify-outcome-optimization.md +++ b/docs/design/08-classify-outcome-optimization.md @@ -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. 并发控制一致性检查