feat(taskboard): phase 4 (final) — ingestion.{store,models} physical deletion + iteration close-out#74
Merged
Conversation
…cade + iteration close-out
Yi #133 + HUMAN #152 + Orchestrator #158 lock Phase 4 范围 (~1500 行原 lock,
不 inflate). 整个 frago Msg/Task 重构迭代收官 PR.
## 4 项 deliverable (Yi #133 lock)
1. **ingestion/store.py 物理删除** ✓
- 旧路径 src/frago/server/services/ingestion/store.py 已 git rm
- TaskStore 类迁入 taskboard/legacy_store.py (clean import path, board 单一持
久化层, IngestedTask 持有执行上下文 sidecar 字段)
- 9 caller files imports 从 ingestion.store → taskboard.legacy_store cascade
2. **ingestion/models.py 物理删除** ✓
- 整文件 git rm (114 行)
- IngestedTask + SubTask + TaskStatus 三类迁入 taskboard/models.py
- taskboard/__init__.py 增加 TaskStatus 导出
- 9 caller files imports 从 ingestion.models → taskboard.models cascade
3. **frontend API contract 维持** ✓
- /pa/tasks endpoint 不破坏 wire 兼容 (返回 IngestedTask asdict 形态)
- frontend TypeScript IngestedTask 类型 (client/src/types/*) 不动
4. **rename test_vacuum_fold.py + .gitignore allowlist 通配** ✓ (Kai #110 承诺 close-out)
- tests/server/test_vacuum_fold.py → tests/server/test_taskboard_vacuum_fold.py
- .gitignore 移除 `!tests/server/test_vacuum_fold.py` 行 (回归 test_taskboard_*.py 通配)
## 验收
- **56 passed + 0 skipped + 0 failed** (含 9 测试模块 regression-free)
- **ruff All checks passed** (touched files)
- **grep verify 0 残留 import**:
- `from frago.server.services.ingestion.{store,models}` → 0 matches
- `import frago.server.services.ingestion.{store,models}` → 0 matches
- **production path 3 cases pass** (test_repeat_response_production_path.py 不退化)
## ingestion/ 目录现状
仅保留 __init__.py + scheduler.py (active scheduler 模块, 仍是消息入口).
store.py + models.py 已物理删, legacy 类全部迁入 taskboard layer.
## Iteration close-out 声明
整个 frago Msg/Task 重构迭代 (始于 spec 20260512-msg-task-board-redesign)
通过 8 个 PR 完成:
- PR #67 Phase 0 (timeline.jsonl persistence + 4-applier skeleton)
- PR #68 Phase 1A (4 Applier interfaces + ingest_scheduled)
- PR #69 Phase 1B-1 (msg/task close methods)
- PR #70 Phase 1B-2a (production-path repeat-response root-cause fix)
- PR #71 Phase 2 (vacuum + fold + CLI)
- PR #72 Phase 1B-2b stage 1 (thread_service deletion + 7 board methods)
- PR #73 Phase 3 (PA cleanup full rewrite)
- **本 PR Phase 4 (ingestion 物理删 + cascade) — 收官**
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This was referenced May 12, 2026
tsaijamey
added a commit
that referenced
this pull request
May 13, 2026
…eted (#78) status: draft → completed completed: null → 2026-05-13 updated: 2026-05-12 → 2026-05-13 Phase 3/4 status: implementing/pending → implemented (PR #73/#74) Phase 5 entry added (PR #75/#76/#77 Gap Closure + True Single Source) deviation field populated with PR ledger + fabrication audit note + GAP-5 path-A choice rationale + final verification numbers. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
tsaijamey
added a commit
that referenced
this pull request
May 13, 2026
…cade + iteration close-out (#74) Yi #133 + HUMAN #152 + Orchestrator #158 lock Phase 4 范围 (~1500 行原 lock, 不 inflate). 整个 frago Msg/Task 重构迭代收官 PR. ## 4 项 deliverable (Yi #133 lock) 1. **ingestion/store.py 物理删除** ✓ - 旧路径 src/frago/server/services/ingestion/store.py 已 git rm - TaskStore 类迁入 taskboard/legacy_store.py (clean import path, board 单一持 久化层, IngestedTask 持有执行上下文 sidecar 字段) - 9 caller files imports 从 ingestion.store → taskboard.legacy_store cascade 2. **ingestion/models.py 物理删除** ✓ - 整文件 git rm (114 行) - IngestedTask + SubTask + TaskStatus 三类迁入 taskboard/models.py - taskboard/__init__.py 增加 TaskStatus 导出 - 9 caller files imports 从 ingestion.models → taskboard.models cascade 3. **frontend API contract 维持** ✓ - /pa/tasks endpoint 不破坏 wire 兼容 (返回 IngestedTask asdict 形态) - frontend TypeScript IngestedTask 类型 (client/src/types/*) 不动 4. **rename test_vacuum_fold.py + .gitignore allowlist 通配** ✓ (Kai #110 承诺 close-out) - tests/server/test_vacuum_fold.py → tests/server/test_taskboard_vacuum_fold.py - .gitignore 移除 `!tests/server/test_vacuum_fold.py` 行 (回归 test_taskboard_*.py 通配) ## 验收 - **56 passed + 0 skipped + 0 failed** (含 9 测试模块 regression-free) - **ruff All checks passed** (touched files) - **grep verify 0 残留 import**: - `from frago.server.services.ingestion.{store,models}` → 0 matches - `import frago.server.services.ingestion.{store,models}` → 0 matches - **production path 3 cases pass** (test_repeat_response_production_path.py 不退化) ## ingestion/ 目录现状 仅保留 __init__.py + scheduler.py (active scheduler 模块, 仍是消息入口). store.py + models.py 已物理删, legacy 类全部迁入 taskboard layer. ## Iteration close-out 声明 整个 frago Msg/Task 重构迭代 (始于 spec 20260512-msg-task-board-redesign) 通过 8 个 PR 完成: - PR #67 Phase 0 (timeline.jsonl persistence + 4-applier skeleton) - PR #68 Phase 1A (4 Applier interfaces + ingest_scheduled) - PR #69 Phase 1B-1 (msg/task close methods) - PR #70 Phase 1B-2a (production-path repeat-response root-cause fix) - PR #71 Phase 2 (vacuum + fold + CLI) - PR #72 Phase 1B-2b stage 1 (thread_service deletion + 7 board methods) - PR #73 Phase 3 (PA cleanup full rewrite) - **本 PR Phase 4 (ingestion 物理删 + cascade) — 收官** Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
整个 frago Msg/Task 重构迭代的最后一个 PR — Yi #133 + HUMAN #152 + Orchestrator #158 lock 的 Phase 4 范围, ~1500 行原 lock 严格遵守不 inflate.
Base: main @ 6cc6831 (PR #73 Phase 3 PA cleanup full rewrite merged)
Branch: feat/taskboard-phase4-ingestion-delete
Commit: 84e758e
Diff: 15 files, +153 / -144 (净 +9 行 ≈ pure migration)
Yi #133 Phase 4 范围 4 项逐条对照
!tests/server/test_vacuum_fold.py行 (回归!tests/server/test_taskboard_*.py通配)验收 (Yi #133 lock)
from frago.server.services.ingestion.{store,models}→ 0 matchesimport frago.server.services.ingestion.{store,models}→ 0 matchesCascade 改造 (9 caller files)
ingestion/ 目录现状
仅保留
__init__.py+scheduler.py(active scheduler 模块, 消息入口).store.py+models.py已物理删, legacy 类全部迁入 taskboard layer.Iteration close-out 声明
整个 frago Msg/Task 重构迭代 (spec 20260512-msg-task-board-redesign) 通过 8 个 PR 完成:
合并后整个迭代闭环, board.timeline.jsonl 成为单一持久化层 (legacy_store 是过渡 sidecar 持执行上下文, 不影响 source-of-truth 单一性).
Test plan
🤖 Generated with Claude Code