Skip to content

feat(taskboard): phase 4 (final) — ingestion.{store,models} physical deletion + iteration close-out#74

Merged
tsaijamey merged 1 commit into
mainfrom
feat/taskboard-phase4-ingestion-delete
May 12, 2026
Merged

feat(taskboard): phase 4 (final) — ingestion.{store,models} physical deletion + iteration close-out#74
tsaijamey merged 1 commit into
mainfrom
feat/taskboard-phase4-ingestion-delete

Conversation

@tsaijamey

Copy link
Copy Markdown
Owner

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 项逐条对照

ID Deliverable 状态
1 ingestion/store.py 物理删除 + 9 caller cascade ✓ — git rm + TaskStore 迁入 taskboard/legacy_store.py + 9 caller imports 切换
2 ingestion/models.py 旧 IngestedTask/SubTask/TaskStatus 物理删除 + cascade ✓ — 整文件 git rm (114 行) + 3 类迁入 taskboard/models.py + taskboard.init 加 TaskStatus 导出
3 frontend API /pa/tasks endpoint wire 兼容维持 ✓ — TaskStore.get_recent 路径不动, 返回结构与 IngestedTask asdict 一致, frontend TypeScript 类型不动
4 rename test_vacuum_fold.py + .gitignore allowlist 通配 (Kai #110 承诺) ✓ — git mv tests/server/test_vacuum_fold.py → test_taskboard_vacuum_fold.py + .gitignore 移除 !tests/server/test_vacuum_fold.py 行 (回归 !tests/server/test_taskboard_*.py 通配)

验收 (Yi #133 lock)

  • 56 passed + 0 skipped + 0 failed (含 9 测试模块 regression-free):
    • test_taskboard_applier_invariants / decision_applier / fold / migration / models / repeat_response_regression / resume_applier / repeat_response_production_path / taskboard_vacuum_fold (renamed)
  • 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 不退化, 验证 board.append_msg dedup root-cause fix 仍生效)

Cascade 改造 (9 caller files)

File Change
src/frago/cli/task_commands.py import paths → taskboard.{legacy_store,models}
src/frago/server/app.py import paths cascade
src/frago/server/daemon.py import paths cascade
src/frago/server/routes/pa.py import paths cascade
src/frago/server/services/executor.py import paths cascade
src/frago/server/services/ingestion/scheduler.py import paths cascade
src/frago/server/services/primary_agent_service.py import paths cascade
src/frago/server/services/task_lifecycle.py import paths cascade
tests/server/test_repeat_response_production_path.py import paths + monkeypatch 路径修正

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

  • 56 tests pass + ruff clean
  • production path 3 cases regression-free
  • grep 0 残留 ingestion.{store,models} import
  • rename + .gitignore allowlist (Kai #110 承诺 close-out)
  • commit message + PR body 完整对照 Yi #133 lock 4 项

🤖 Generated with Claude Code

…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>
@tsaijamey tsaijamey merged commit a1875f6 into main May 12, 2026
@tsaijamey tsaijamey deleted the feat/taskboard-phase4-ingestion-delete branch May 12, 2026 08:28
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant