# Changelog

All notable changes to VDL are documented here.

Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

---

## [Unreleased]

---

## [1.0.4]

### Fixed
- Installer now explicitly removes old `vdl` and `vdl-mcp` binaries from the install directory before placing new ones, ensuring a clean upgrade rather than an in-place overwrite.
- Installer detects and warns when an existing `vdl` or `vdl-mcp` binary at a different PATH location will shadow the newly installed binary.
- Done message now instructs users to run `hash -r` (bash) or `rehash` (zsh) if the old version is still resolved after install.

### Added
- Offline smoke tests for the installer (`tests/smoke/test_install.sh`) covering fresh install, upgrade, shadow detection, and clean-replace behavior.

---

## [1.0.3]

### Added
- First-run bootstrap (`vdl/bootstrap.py`) creates required directories, `config.toml`, `websites.yaml` (from bundled copy), and the state DB on first startup.
- Workflow-first demo scripts under `demos/` for video download, playlist download, playlist resolution, link-list downloads, crawl-based discovery, and plain progress output.

### Changed
- `README.md` now serves as the single top-level install and usage guide, organized by standalone binary vs Python package installation.
- Demo files now use plain placeholder constants instead of command-line parsing or environment-variable lookup for their example inputs.
- Release flow now ignores untracked scratch files while still blocking tracked or staged changes.
- Release script auto-loads `.env`, streamlines normal confirmations, and improves retry behavior around existing tags and upload failures.
- `VDLClient()` now auto-wires its default runtime dependencies, and discovery progress is surfaced for library callers.
- CLI behavior was polished so bare `vdl` launches interactive mode and `vdl help` works as a top-level affordance.

### Removed
- Legacy config migration path from the active runtime code.
- The separate `docs/USAGE.md` page after folding its content into `README.md`.

## [1.0.0]

### Added
- Rebuilt VDL as a proper Python package under `src/vdl/` with `pyproject.toml` and `hatchling` build backend.
- Headless CLI (`vdl download`, `vdl playlist`, `vdl resolve`, `vdl status`, `vdl doctor`, `vdl config`) with `--json` output flag.
- Interactive CLI mode via Rich (launched by `vdl` with no arguments).
- Python library API (`VDLClient`, `DownloadRequest`, `DownloadResult`, `PlaylistInfo`).
- MCP server (`vdl-mcp`) for LLM-assisted media automation; distributed as optional `vdl[mcp]` extra.
- XDG-compliant path layout with `ensure_paths()` and `get_default_paths()`.
- SQLite-backed state store for idempotent downloads, status tracking, and reconciliation.
- Site-specific crawler support via `websites.yaml` rule files and Selenium-based discovery.
- Legacy config migration from `~/.config/video-downloader/` to `~/.config/vdl/`.
- GitLab CI release pipeline (`ci/release-vdl.yml`) with PyPI Trusted Publishing.
- macOS arm64 binary build (`scripts/build-macos.sh`) with smoke-test and SHA256 checksums.
- Installer (`scripts/install.sh`) with platform detection, checksum verification, and `PATH` warning.
- Release manifest (`release.json`) published to GitLab Pages for the installer to resolve.
- `vdl doctor` command for verifying `ffmpeg`, `ffprobe`, and `yt-dlp` availability.

---

[Unreleased]: https://gitlab.com/bildcraft/products/video-downloader/-/compare/vdl-v1.0.4...HEAD
[1.0.4]: https://gitlab.com/bildcraft/products/video-downloader/-/compare/vdl-v1.0.3...vdl-v1.0.4
[1.0.3]: https://gitlab.com/bildcraft/products/video-downloader/-/releases/vdl-v1.0.3
[1.0.0]: https://gitlab.com/bildcraft/products/video-downloader/-/releases/vdl-v1.0.0
