docs(01): capture phase 1 context

This commit is contained in:
2026-03-13 16:35:25 +08:00
parent 2ed555ccc2
commit 0c3f99a0e1
@@ -0,0 +1,89 @@
# Phase 1: Foundation - Context
**Gathered:** 2026-03-13
**Status:** Ready for planning
<domain>
## Phase Boundary
建立可靠的基础设施层,支持步骤级状态持久化、Schema 验证、结构化错误处理和统一配置管理。这些是后续所有平台技能和处理技能的基础。
此阶段不涉及具体平台集成(B站/知乎),只构建管道模型的核心机制。
</domain>
<decisions>
## Implementation Decisions
### 状态管理
- **状态粒度**: 步骤级状态 — 符合现有子技能映射 (metadata→content→whisper→analyzer)
- **状态关联**: 按内容ID关联 — 如 BV123xxx,重复链接自动识别
- **幂等执行**: 自动跳过已完成步骤 — 重新执行同一链接时从中断点继续
- **备份机制**: 需要备份 — 原子写入 + .bak 轮转,崩溃后可恢复
- **存储位置**: 状态文件存放在内容目录下 — 方便关联查看
- **历史记录**: 只保留最新状态 — 不追加历史执行记录
### Schema 验证
- **验证时机**: 立即验证 — 步骤完成后立即验证,失败则阻止进入下一步
- **Schema 定义位置**: 集中定义 — 所有步骤的 Schema 集中在一个模块
- **验证范围**: 验证输入和输出 — 步骤执行前验证输入,执行后验证输出
- **Schema 格式**: Pydantic 模型 — 自带验证和序列化,类型安全
### 错误处理
- **错误分类**: 支持四种错误类型
- 网络错误 (403/404/500/超时)
- 验证错误 (Schema 验证失败)
- 系统错误 (文件系统/内存/依赖缺失)
- 认证/配额错误 (API配额/Cookie过期/Token失效)
- **重试策略**: 自动重试 — 网络错误自动重试3次,指数退避
- **错误信息**: 完整上下文 — 步骤名、输入摘要、错误类型、失败原因、可操作建议
- **降级策略**: 定义降级链 — 如官方字幕失败后尝试语音识别
### 配置管理
- **配置文件位置**: ~/.kb_env — 延续现有习惯
- **验证时机**: 启动时验证 — 缺失必需变量则报错退出
- **敏感信息处理**: 环境变量存敏感 — Cookie/Token 用环境变量,配置文件只存非敏感配置
- **配置库**: pydantic-settings — 自动验证和类型转换
</decisions>
<code_context>
## Existing Code Insights
### Reusable Assets
- `gsd-openclaw/src/gsd_openclaw/state_manager.py`: 完整的原子状态保存、备份轮转、Schema 验证模式 — 可作为 State Manager 实现参考
- `kb-workflow/kb_workflow.py`: 目录管理、查重、归档工具函数 — 可复用
### Established Patterns
- 现有子技能映射: `METADATA_AGENTS = {"bilibili": "kb-bilibili-metadata", "zhihu": "kb-zhihu-metadata"}`
- 内容类型分类: `VIDEO_CONTENT_TYPES`, `TEXT_CONTENT_TYPES`, `IMAGE_CONTENT_TYPES`
- 环境变量分散在 ~/.kb_env, HF_TOKEN, ZHIHU_COOKIE 等
### Integration Points
- State Manager 需要与现有 kb_workflow.py 集成
- Schema Registry 需要定义所有子技能的输入输出格式
- Error Handler 需要被所有子技能调用
- Config Manager 需要统一现有分散的环境变量
</code_context>
<specifics>
## Specific Ideas
- 状态文件名建议: `workflow_state.json`,存放在每个内容目录下
- 降级链示例: 官方字幕 → Whisper → FunASR
- 错误信息格式应包含 `step_name`, `input_summary`, `error_type`, `message`, `suggestion` 字段
</specifics>
<deferred>
## Deferred Ideas
None — discussion stayed within phase scope
</deferred>
---
*Phase: 01-foundation*
*Context gathered: 2026-03-13*