- Extend RBAC modules/permissions; Home + drawer + Nav routes for ATF/NCIC/military/judicial/intelligence - Wire Orders/Evidence/Reports/ATF/NCIC/Military/Judicial/Intelligence Compose flows with Hilt ViewModels - Evidence: custody chain merge in repository; list/detail UI; fix transfer entity evidenceId - SyncService: hydrate credential payloads after list pull; CredentialCacheSyncPort API + tests - CredentialCacheMerger hydrateMissingPayloads; CredentialsViewModel refresh/hydrate split - OrderServiceTest; SyncService + CredentialCacheMerger tests; NCIC operator display - docs: OUTSTANDING-PRODUCTION-AND-COMPLIANCE-WORK.md; GAPS updates; README implementation status - Misc doc/build updates (OpenAPI test, compliance matrix, etc.) Made-with: Cursor
972 B
972 B
Keeping OpenAPI in sync
Source of truth
The running Spring Boot app exposes the authoritative contract:
- OpenAPI JSON:
GET /v3/api-docs - Swagger UI:
/swagger-ui.html
The static file docs/api/api-specification.yaml is a human-maintained reference for design reviews. It can drift from springdoc.
CI drift check (implemented baseline)
OpenApiContractIntegrationTest (module :backend) loads the Spring context and asserts that /v3/api-docs includes expected paths (e.g. /api/v1/sync/credential, /api/v1/credentials, /api/v1/directory, /api/v1/integrity/verify). It runs as part of ./gradlew :backend:test and therefore ./gradlew smoaVerify.
For a full golden-file diff, still optional: start the backend, curl /v3/api-docs, and compare to a committed artifact (normalize JSON ordering if needed).
Script
See scripts/export-openapi-local.sh for a minimal local export (requires a reachable backend).