--- id: OPEN-WP-0003 type: workplan title: "Integration CLI validator" domain: infotech repo: open-reuse status: finished owner: codex topic_slug: infotech created: "2026-06-24" updated: "2026-06-24" state_hub_workstream_id: "16149ad7-be98-4ec1-807b-3d4b62db2bba" --- # Integration CLI validator Replace the manual validation checklist in `registry/README.md` with an automated `open-reuse validate` command. Follows OPEN-WP-0002 schema v0.1 and patterns from reuse-surface `reuse-surface validate`. ## Design decisions - **Runtime:** Python package (`open_reuse/`) with `uv`/`pyproject.toml`, matching reuse-surface CLI conventions. - **Scope:** Validate Integration Definition YAML against `schemas/integration.schema.yaml` and check index consistency in `registry/indexes/integrations.yaml`. - **Out of scope:** Upstream monitoring, validation harness execution, or federation publish — those belong to later workplans. ## Bootstrap Python package ```task id: OPEN-WP-0003-T01 status: done priority: high state_hub_task_id: "70b8cead-3c16-4e48-ab8f-ee6f7cedf25e" ``` Result 2026-06-24: Added `pyproject.toml`, `open_reuse/` package, and CLI entry point. Documented install commands in `AGENTS.md` and `.claude/rules/stack-and-commands.md`. ## Implement validate command ```task id: OPEN-WP-0003-T02 status: done priority: high state_hub_task_id: "0f8c8e25-1c1f-4f94-8771-71bcc3402db2" ``` Result 2026-06-24: Implemented schema validation, index consistency checks, `--repos-base` external definition resolution, and `--fail-on-warnings`. ## Add tests and CI ```task id: OPEN-WP-0003-T03 status: done priority: medium state_hub_task_id: "e84e7b00-43ec-429e-afa0-42cb8eaa0074" ``` Result 2026-06-24: Added `tests/test_validate.py` (8 tests) and `.gitea/workflows/ci.yml`. ## Update registry documentation ```task id: OPEN-WP-0003-T04 status: done priority: medium state_hub_task_id: "cfd38f45-0c0a-4790-b666-c211983b3ee9" ``` Result 2026-06-24: Updated `registry/README.md` with CLI as primary validation path; manual checklist retained as fallback.