feat(standards): Standards epic CLI — applicability subcommand + --strict-standards gate #20
merged
cole.christensen@gmail.com wants to merge
phase-3-standards-applicability-cli
into main
No CI
CLI side of the Standards epic (#250) — single consolidated PR covering Phase 3 applicability and Phase 7 strict-standards gate.
Pairs with fangorn/anvil#153 (server counterpart, also consolidated).
Phase 3 — Applicability subcommand
anvil requirement applicability list STD-… --organization <slug>
anvil requirement applicability add STD-… --organization <slug> --repo <slug>
anvil requirement applicability remove STD-… --organization <slug> --repo <slug>
Routes to the new org-scoped endpoints:
GET /api/v1/:org/standards/:id/applicabilitiesPUT /api/v1/:org/standards/:id/applicabilities/:repo_slugDELETE /api/v1/:org/standards/:id/applicabilities/:repo_slug
Validation
- Requires
STD-*IDs;REQ-*rejected with “applicability is standards-only”. - Unknown prefix uses the existing
unknown_prefix_errorhelper for consistency with create/update/view/delete.
Phase 7 — --strict-standards flag
anvil requirement status --strict-standards [--organization <slug>]
Hits the server’s strict_status/1 gate. Exits 0 if every (mandatory standard × applicable repo) is :covered, non-zero with a human-readable summary otherwise.
Test plan
- Unit tests for prefix routing + standards-only rejection (applicability)
- Unit tests for
strict_standards_returns_ok_on_2xx_status_ok+strict_standards_errors_on_422_uncovered - Full Rust suite passes: 75 tests, 0 failures
-
cargo clippy --all-targets -- -D warningsclean -
cargo fmt --all -- --checkclean
Consolidation note
Originally split across PRs #20 (Phase 3 CLI) and #21 (Phase 7 CLI). Consolidated into this single PR per the workspace “one PR per repo per logical change” rule.
Pair PR
Server: fangorn/anvil#153.
Created May 24, 2026 at 02:20 UTC
| Merged May 25, 2026 at 20:43 UTC
by
cole.christensen@gmail.com