## Implement: biblio pool promote — move project-local papers to a pool¶
Phase 1
Goal¶
(promoted from note)
Context¶
(see source note)
Prompt¶
Fix the issue described in /storage2/arash/projects/projio/docs/log/issue/issue-arash-20260403-205942-590539.md. Read it first, then implement the proposed fix.
Acceptance Criteria¶
- [ ]
Result¶
Completed in 274.5s (1 steps, model: opus)
Session: 1fc76032-089b-4d86-9548-f0541f590089
Result note: /storage2/arash/worklog/workflow/captures/20260403-210453-f62fb1/note.md
Output¶
Good — pool.py shows 245 lines added. The implementation is complete across all five files:
**Summary of changes:**
1. **`packages/biblio/src/biblio/pool.py`** — Added `PoolPromoteResult` dataclass and `promote_to_pool()` function that:
- Copies PDF from project `bib/articles/{ck}/` to pool
- Copies derivatives (docling, grobid, openalex, html) to pool
- Merges BibTeX entries into pool's `bib/srcbib/promoted.bib`
- Replaces local PDF with symlink to pool copy
- Handles duplicates, missing PDFs, dry-run mode
2. **`packages/biblio/src/biblio/mcp.py`** — Added `pool_promote()` MCP wrapper that resolves pool root from target param or config, calls `promote_to_pool()`, and returns structured results dict
3. **`src/projio/mcp/biblio.py`** — Added `biblio_pool_promote()` projio MCP tool with proper availability check and error handling
4. **`src/projio/mcp/server.py`** — Registered `biblio_pool_promote` tool on the FastMCP server
5. **`packages/biblio/src/biblio/cli.py`** — Added `biblio pool promote` CLI subcommand with `--citekeys` and `--all-local` options
## Next Steps
1. Run `make test` in both projio and packages/biblio to verify the changes don't break existing tests.
2. Test the promote workflow end-to-end: `biblio pool promote --citekeys <key> --dry-run` on a project with a configured pool.
3. Update the issue status to done and update CLAUDE.md's MCP tool table to include `biblio_pool_promote`.