Reviewing package changes
I noticed that some packages were removed from the environment, specifically pydantic==2.12.4. This means that it's no longer installed, which could potentially cause issues if any library depends on it. However, since the tests passed, it seems fine for now. Pydantic remains in the development dependencies for the pre-commit mypy hook but not in the runtime. We've also made significant changes to how sessions serialize, which may lead to issues for old sessions with pydantic-ai messages.
Noting functionality changes
I realized we've removed the token pruning functionality, which could impact long sessions. The user said it’s not a concern, but I should still note this behavior change, as it means compaction has been removed. We also took out tool output pruning and rolling summaries, which might not have been used often, but it's a missing feature to bring up with the next developer. Additionally, old sessions won’t show previews for certain kinds, and we’ve fixed some documentation references as well.
Preparing handoff message
I need to produce a handoff message covering several key aspects regarding the branch tunacode-loop-replace. The latest commit is 0aa8074d, and I want to summarize that we've completed phases 6-10, focusing on UI extraction and dict-only persistence while removing the pydantic-ai dependency. All tests have passed successfully. I've also listed closed tickets and significant file changes, including updates to pyproject.toml, .github/workflows, and documentation. It's crucial to note there's a hard break with session messages needing to be a list of dicts, as old pydantic-ai sessions won't be supported.
Summarizing changes and next steps
I've removed the compaction, rolling summary, and prune functionality, meaning they no longer free tokens. The pydantic-ai dependency is also gone, so any leftover imports will fail. Since .tickets/ is gitignored, ticket status updates haven't been pushed. Moving forward, I might want to clean up documentation and memory-bank mentions, removing old pydantic references in comments. I must also ensure release notes and CI pipeline settings are adjusted for master/PRs. Since the user requested just the handoff message, I'll keep it straightforward without extra details.
Crafting handoff message
I need to create a handoff message based on the system message and user instructions. It's essential to keep it professional and avoid mirroring any profanity. The message will have clear headings:
- Status
- Branch/Commits: Branch tunacode-loop-replace, commit hash 0aa8074d and earlier commit c91a6539 for the UI fix.
- What Changed
- Removed pydantic guard/hook
- Verification Commands: Run uv sync --extra dev, uv run pytest, and uv run pre-commit run --all-files.
- Tickets: Closed EPIC tun-1658, though ticket status updates aren't pushed yet.
- Caveats / Future Work
I will keep it concise while ensuring all relevant details are included!
Handoff (next dev)
Branch / commits
- Branch: tunacode-loop-replace
- Latest: 0aa8074d — tun-865e: hard-break tinyagent history; drop pydantic-ai leftovers
- Prior relevant: c91a6539 — UI/headless output extraction for tinyagent dict messages
What’s done (Phase 6/7/8/9/10 effectively wrapped up)
- Hard break to tinyagent dict message history only.
- src/tunacode/core/session/state.py: serialize/deserialize now rejects non-dict messages (no TypeAdapter / no pydantic-ai message shapes).
- src/tunacode/ui/screens/session_picker.py: preview now tinyagent-only (removed legacy kind=request + parts fallback).
- Removed pydantic-ai and remaining dead code paths:
- Deleted legacy resume modules: src/tunacode/core/agents/resume/{filter,prune,summary}.py
- Deleted unused legacy plumbing: src/tunacode/core/agents/history_preparer.py, src/tunacode/core/agents/request_logger.py
- Deleted compaction test that targeted the removed prune logic: tests/unit/core/test_compaction.py
- Removed the pydantic usage guardrails completely:
- Deleted scripts/pydantic_usage_report.py + scripts/pydantic_usage_baseline.json
- Removed pre-commit hook pydantic-usage from .pre-commit-config.yaml
- Removed CI job pydantic-usage-guard from .github/workflows/lint.yml
- Cleaned docs/templates referencing it (docs/CONTRIBUTING.md, .github/pull_request_template.md)
- Dependencies:
- pyproject.toml: removed pydantic-ai (also removed now-unused pydantic + tenacity)
- uv.lock regenerated accordingly
Verification (all green on this branch)
- uv sync --extra dev
- uv run ruff check --fix .
- uv run ruff format .
- uv run pytest (418 passed, 1 skipped)
- uv run deptry src/ (no issues)
Tickets
- Closed via tk: tun-865e, tun-3c4e, tun-7aeb, tun-385b, tun-49a4, tun-1658
- Note: .tickets/ is gitignored in this repo, so ticket state changes are local to the environment running tk.
Caveats / “if something breaks later”
- Old persisted sessions containing pydantic-ai message objects are intentionally unsupported now (non-dict messages raise immediately).
- Tool-output pruning / rolling summary compaction was removed; if long-context token pressure becomes a problem again, it needs a fresh tinyagent/dict-native implementation.