release: v0.2.0 repository hygiene, CI, and docs sync

Stop tracking personal workflow artifacts at repo root, add CI and MIT
license, align README and agent skills with artifacts/ defaults, and
enable Ruff in dev/CI so releases are verifiable without local-only runs.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
windyboy
2026-06-01 15:32:03 +08:00
co-authored by Claude Sonnet 4.5 Cursor
parent e70bd35498
commit 6f0df5a774
101 changed files with 1451 additions and 653105 deletions
+34 -29
View File
@@ -2,8 +2,8 @@
## Documentation Status
- Last synchronized: **2026-04-07**
- Validation baseline: **`pytest -q` → 517 passed**
- Last synchronized: **2026-06-01** (see [`CHANGELOG.md`](CHANGELOG.md) for release history)
- Validation baseline: **`uv run pytest -q` → 517 passed**
- Human-in-the-loop workflow includes `vlm apply-review` for syncing manual plan edits from CSV back into `plan.json`.
- Scanner now detects `ffprobe` availability, degrades gracefully, and treats partial `find` output as a warning-backed partial result.
- JSON artifacts (`identities.json`, `analysis.json`, `plan.json`) are schema-validated on load/save, and plan loading now crosses a typed `ExecutionPlan` boundary.
@@ -73,6 +73,10 @@ vlm scan
This creates `artifacts/inventory.csv` with all discovered files and their metadata.
### Generated artifacts (do not commit)
Default pipeline outputs live under `artifacts/` (or `workspace_dir` from config). **Do not commit** `artifacts/`, `runs/`, or legacy root-level files such as `inventory.csv`, `identities.json`, `analysis.json`, or `plan.json` at the repository root. Keep API keys in `~/.vlm/config.yaml` only — never commit config copies or paste keys into issues.
**What happens:**
- Discovers video files using the system `find` command
- If `find` exits non-zero after emitting paths, VLM keeps the partial results and logs a warning; if no paths are emitted, discovery returns an empty deterministic result
@@ -763,7 +767,7 @@ Common enrichment outcomes:
- `Skip reasons: rate_limited=...`
Cause: TMDB rate limit hit (`429`).
Action: retry later; VLM already applies bounded retry/backoff.
Action: retry later; VLM already applies bounded retry/backoff. For large libraries, lower `enrichment.max_concurrency` (try **24** before the default **6**) to reduce simultaneous TMDB requests during `vlm enrich` and ffprobe work during `vlm scan`.
- `Enriched now: 0` with non-zero records
Cause: often `no_key`, `no_match`, or provider errors.
@@ -810,19 +814,13 @@ Always keep backups of important files!
- **Local files only**: Designed for local or mounted network storage
- **Best-effort rollback**: Rollback may not succeed if files have been modified
## Gemini CLI Agent Skills
## Agent skills
This project includes built-in expert guidance for the Gemini CLI. These skills co-locate project knowledge with the source code.
This project includes workflow guidance under `skills/vlm-library-workflow/` (scan → parse → enrich → analyze → plan → review-plan → apply-review → execute).
### Activation
To activate the expert guidance in Gemini CLI, use:
### Activation (Gemini CLI)
```bash
# General expert guidance and knowledge base
activate_skill vlm-expert
# Step-by-step library organization workflow
activate_skill vlm-library-workflow
```
@@ -838,17 +836,17 @@ activate_skill vlm-library-workflow
### Running Tests
```bash
# Run all tests
pytest
# Run all tests (recommended)
uv run pytest -q
# Run specific test file
pytest tests/test_scanner.py
uv run pytest tests/test_scanner.py
# Run with verbose output
pytest -v
uv run pytest -v
# Run with coverage
pytest --cov=vlm tests/
# Run with coverage (requires dev extras)
uv run pytest --cov=vlm tests/
```
### Code Style
@@ -864,13 +862,19 @@ pytest --cov=vlm tests/
src/vlm/
├── cli.py # Click-based CLI interface, global options
├── context.py # CLIContext and pass_context for commands
├── cli_helpers.py # Shared CLI helpers
├── commands/ # Command implementations
│ ├── scan.py # Scan command
│ ├── parse.py # Parse command
│ ├── enrich.py # Enrich command
│ ├── analyze.py # Analyze command
│ ├── plan.py # Plan command
── execute.py # Execute/Rollback commands
── execute.py # Execute/Rollback commands
│ ├── review_plan.py # Plan review export / TUI
│ ├── report.py # Report commands
│ ├── quarantine_cmd.py
│ ├── state_cmd.py
│ └── config_cmd.py
├── scanner.py # File discovery and metadata extraction
├── parser.py # Filename parsing (titles, years, episodes)
├── enrichment.py # Title/reputation enrichment pipeline
@@ -881,8 +885,14 @@ src/vlm/
├── io.py # Unified JSON/CSV I/O helpers (load/save JSON, analysis writer, plan/analysis adapters)
├── utils.py # UTC time, format_size, etc.
├── analysis.py # Completeness and duplicate detection
├── duplicate_resolve.py # Duplicate group keep-index (by_quality, by_reputation, by_reputation_quality_time, first_seen, manual)
├── duplicate_resolve.py # Duplicate group resolution strategies
├── planner.py # Execution plan generation (optionally consumes analysis)
├── plan_review.py # Review CSV and apply-review
├── plan_render.py # Plan rendering helpers
├── plan_structure_preview.py
├── review_display.py # Terminal review output
├── review_tui.py # Optional Textual review UI
├── transaction.py # Execution transaction log
├── executor.py # File operations and rollback
├── quarantine.py # Quarantine management
├── state.py # File state tracking
@@ -909,16 +919,11 @@ tests/
## Contributing
Contributions are welcome! Please:
1. Write tests for new features
2. Follow existing code style
3. Update documentation
4. Add clear commit messages
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for versioning, test commands, and PR expectations.
## License
[Add your license here]
MIT — see [`LICENSE`](LICENSE).
## Acknowledgments
@@ -930,6 +935,6 @@ Built with:
## Support
- Report issues: [GitHub Issues](https://github.com/yourusername/video-library-manager/issues)
- Documentation: See CLAUDE.md for architecture details
- Report issues in your repository host's issue tracker
- Documentation: [`CLAUDE.md`](CLAUDE.md) for architecture; [`CHANGELOG.md`](CHANGELOG.md) for releases
- Logs: Check `~/.vlm/vlm.log` for detailed information