Ran a dedicated post-M7 release-readiness audit. Found and fixed the one real gap: mypy was a declared dev dependency but had never been run in any milestone's validation loop. Fixed all 43 pre-existing type errors it surfaced, including two genuine defensive- programming gaps (unguarded Optional vehicle/customer lookups that could have crashed with unhandled 500s instead of clean 404/401 responses) rather than suppressing them. make lint now runs ruff + mypy; mypy reports zero errors across 44 source files. Re-verified end to end against a genuinely wiped-volumes clean checkout: automatic migrations, deterministic seed, 66/66 backend tests, and the full user-journey matrix (login, dashboard, vehicle/booking detail, return workflow, invalid-mileage rejection, data-quality review, duplicate-customer merge, audit trail, Knowledge Assistant, n8n, MCP Hub) via curl and Playwright. Live-verified both external-dependency degraded modes, not just unit tests: stopped n8n mid-flow and confirmed a return still commits with the outbox event staying pending and retrying with backoff, then self-healing to succeeded with zero manual intervention once n8n came back; verified RAGcore's unavailable-degradation path against an unreachable host. Added frontend/e2e/interactive-elements.spec.ts (11 tests covering every nav item, filter, tab, and role boundary) alongside the existing demo script test — 12/12 e2e tests passing. Verified no secrets are committed (.env never tracked, clean git history scan) and .env.example covers every operator-configurable setting. Confirmed no placeholders, TODOs, fake responses, hardcoded metrics, or dead routes anywhere in the codebase. Updated README.md with an honest integration-status section and PROJECT_STATE.md with the full audit findings. Added artifacts/final-acceptance/summary.md as the authoritative final evidence document (commands, results, URLs, demo access, integration status per external dependency, known limitations, deployment instructions, five-minute demo flow).
41 lines
1.1 KiB
Makefile
41 lines
1.1 KiB
Makefile
.PHONY: up down logs test lint seed reset n8n-setup demo e2e
|
|
|
|
up:
|
|
docker compose up --build -d
|
|
|
|
down:
|
|
docker compose down
|
|
|
|
logs:
|
|
docker compose logs -f --tail=200
|
|
|
|
test:
|
|
docker compose run --rm api pytest
|
|
|
|
lint:
|
|
docker compose run --rm api ruff check .
|
|
docker compose run --rm api mypy app
|
|
|
|
seed:
|
|
docker compose exec api python -m app.cli seed --reset
|
|
|
|
reset:
|
|
docker compose down -v
|
|
docker compose up --build -d
|
|
|
|
# One-time per environment: imports and activates the n8n return-processing workflow.
|
|
# The n8n owner account itself cannot be scripted safely and must be created once at
|
|
# http://localhost:5678/setup (any email/password, no verification required) before
|
|
# this target's activation takes effect. See docs/17-runbook.md.
|
|
n8n-setup:
|
|
docker compose exec n8n n8n import:workflow --input=//imports/mobilityops-return-processing.json
|
|
docker compose exec n8n n8n publish:workflow --id=mobilityops-return-processing
|
|
docker compose restart n8n
|
|
|
|
# Full deterministic demo bootstrap: build, migrate (automatic on api startup), seed.
|
|
demo: up
|
|
docker compose exec api python -m app.cli seed --reset
|
|
|
|
e2e:
|
|
cd frontend && npx playwright test
|