# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.3.0] - 2025-02-06

### Added
- **Crossref Integration Module**: New module for querying Crossref API
  - `CrossrefClient` for querying works by DOI, title, author
  - `CrossrefWork`, `CrossrefAuthor`, `CrossrefReference` data models
  - `query_crossref()` convenience function
  - Support for PMID to DOI and DOI to PMID conversion
  - CLI command: `crossref-cli`
- **RSS Feed Processing Module**: New module for fetching and parsing RSS feeds
  - `RSSFetcher` with async batch processing
  - Intelligent caching with expiration
  - Retry logic with exponential backoff
  - Export to JSON and CSV formats
  - CLI command: `rss-fetcher`
- **Google Scholar Integration**: Enhanced web scraping capabilities
  - `SearchConfig` for flexible search configuration
  - `SearchResult` and `GoogleScholarPaper` models
  - Duplicate detection and removal
  - Rate limiting and caching
  - CLI command: `google-scholar-crawler`
- **DOI Utilities**: New utilities in `core.utils`
  - `clean_doi()` - Clean and standardize DOI format
  - `validate_doi()` - Validate DOI format
  - `extract_doi_from_text()` - Extract DOIs from text
- **Enhanced LLM Filter Support**: Added Ollama support for local LLM inference
  - New `OllamaClient` for local model execution
  - Support for multiple LLM providers (DashScope, Ollama, OpenAI)

### Changed
- **Minimum Python Version**: Updated minimum requirement to Python 3.12
- **Code Quality**: Ruff is now the primary linter (replacing Black, isort, Flake8)
- **Test Coverage**: Improved to 51%+ (570 tests passing)
- **Documentation**: Comprehensive documentation updates with new modules

### Fixed
- Fixed import issues in `__init__.py` for `clean_doi` utility
- Fixed `__all__` sorting in package exports
- Improved error handling across all modules

### Dependencies
- Added `habanero>=1.2.0` for Crossref API
- Added `feedparser>=6.0.0` for RSS processing
- Added `python-dateutil>=2.8.0` for date parsing
- Updated `llama-index>=0.10.0`
- Updated `langchain>=0.1.0`

## [0.2.1] - 2024-XX-XX

### Added
- Initial PubMed integration
- PDF validation module
- Markdown processing utilities
- DOI downloader functionality
- LLM-based markdown filtering with DashScope support

### Dependencies
- `pypdfium2>=4.0.0` for PDF processing
- `biopython>=1.84` for PubMed API
- `dashscope>=1.14.0` for LLM integration
- `llama-index>=0.10.0` for LLM framework

## [0.1.0] - 2024-XX-XX

### Added
- Initial project release
- Basic PDF validation
- Markdown to JSON conversion
- PubMed query functionality

---

## Versioning Policy

- **Major version (X.0.0)**: Breaking changes, major features
- **Minor version (0.X.0)**: New features, backward compatible
- **Patch version (0.0.X)**: Bug fixes, minor improvements

## Upgrade Notes

### From 0.2.x to 0.3.0

1. **Python Version**: Ensure you're using Python 3.12 or higher
2. **Dependencies**: Run `pip install --upgrade information-composer` to get new dependencies
3. **Code Quality**: Use `ruff` instead of `black`/`isort`:
   ```bash
   # Old
   black src/
   isort src/

   # New
   ruff format src/
   ruff check src/
   ```
4. **New CLI Commands**: Additional commands available:
   - `crossref-cli` - Query Crossref API
   - `rss-fetcher` - Fetch RSS feeds
   - `google-scholar-crawler` - Crawl Google Scholar

### Breaking Changes

None in this release. All changes are backward compatible.
