Files
api/inventory/self-serve-inventory.md
T
Jeppe Bandopenhands 5441fea665 fix(api): simplify XLVask Selvvask surface by removing AI autopilot pipeline (#367)
## Summary

Removes the XLVask autopilot / automation / MiniMax / OpenAI pipeline
and the related module config, CLI, cron, and migration scaffolding. The
Selvvask view (Superuser -> Fakturaer -> Periode -> Selvvask) is reduced
to a single read-only listing of usage logs plus operator-driven ignore
/ unignore / accept / reject endpoints gated on the
`review_xlvask_usage_order` permission.

See `inventory/self-serve-inventory.md` for the full surface map.

## Test plan

- [x] `vendor/bin/pest --testsuite=Unit` -> **1266 passed**, 1 unrelated
pre-existing failure (`BirdControlPlaneActivationTest`, needs
`PLENO_REPO_ROOT_FOR_TESTS`).
- [x] `php -l` on every modified PHP file -> no syntax errors.
- [x] Grep validation -> zero production-code references to removed
surfaces (`xlvask_autopilot_service`, `xlvask_automation_service`,
`xlvask_automation_policy_service`, `EnsureXLVaskAutomationSchema`,
`runScheduledAutomationIfReady`, `processAutopilotQueue`, `MiniMax`,
`minimax`, ...).
- [ ] Qodana + Tests workflows green on this PR.

Co-authored-by: openhands <openhands@all-hands.dev>

---------

Co-authored-by: openhands <openhands@all-hands.dev>
2026-08-12 20:02:30 +02:00

5.8 KiB

XL Vask Selvvask surface — inventory & simplification plan

Scope

The XLVask surface that powers the Superuser → Fakturaer → Periode → Selvvask view. Goal: remove the AI / MiniMax / autopilot pipeline, leaving only the operator-facing review and order-creation flow.

Out of scope: any other XLVask, plate scanner, customer, or vehicle surface.

Files removed

Path Reason
services/nginx/app/classes/xlvask_autopilot_service.php AI autopilot pipeline
services/nginx/app/classes/xlvask_automation_service.php AI automation pipeline
services/nginx/app/classes/xlvask_automation_policy_service.php AI policy service
services/nginx/app/classes/minimax.php MiniMax integration
services/nginx/app/modules/miniMax/ MiniMax module (config + class)
services/nginx/app/modules/xlvask/AUTOMATION_RUNBOOK.md Runbook for removed pipeline
services/nginx/app/modules/xlvask/cron/tasks.php Module-owned cron registry (replaced by empty cron_task_registry discovery)
services/nginx/app/modules/xlvask/migrations/20260804_xlvask_ai_auto_policy_v2.php Migration for removed AI schema
services/nginx/app/modules/xlvask/config/xlvask_automatic_order_attachment_enabled_c.php Legacy autopilot gate
services/nginx/app/modules/xlvask/config/xlvask_automatic_order_creation_enabled_c.php Legacy autopilot gate
services/nginx/app/modules/xlvask/config/xlvask_minimax_integration_enabled_c.php MiniMax gate
services/nginx/app/modules/xlvask/config/xlvask_openai_integration_enabled_c.php OpenAI gate
services/nginx/app/cron/EnsureXLVaskAutomationSchema.php Migration helper
scripts/xlvask-automation-migrate.php CLI wrapper for migration
services/nginx/app/tests/Unit/XLVask/XLVaskAutomationMigrateScriptTest.php Removed migration test
services/nginx/app/tests/Unit/XLVask/XLVaskAutomationServiceTest.php Removed automation test
services/nginx/app/tests/Api/XLVaskReviewApiTest.php Replaced by Selvvask route contract test

Code changes (kept & simplified)

Path Change
services/nginx/app/cron/Cron.php Drop ProcessXLVaskAutopilotQueueCron registration + function
services/nginx/app/cli.php Drop xlvask-automation-migrate case
services/nginx/app/routes/moduleConfigRoute.php Drop /minimax/config GET/POST endpoints
services/nginx/app/routes/moduleXLVaskRoute.php Drop /modules/xlvask/tasks/import-usage 410 stub and /tasks/debug route
services/nginx/app/routes/xlvaskUsageLogsRoute.php Slim to operator-only: list, summary, ignore/unignore, accept, reject, fast-link
services/nginx/app/modules/xlvask/helpers/xlvask_tasks.php Drop runScheduledAutomationIfReady, processAutopilotQueue, autopilot cleanup, legacy auto-creation branch
services/nginx/app/modules/xlvask/xlvask_c.php Drop minimax_integration_enabled, automatic_order_attachment_enabled, automatic_order_creation_enabled, openai_integration_enabled
services/nginx/app/objects/xlvask_usage_logs_o.php Add summarizeUsageOrdersReadOnly (replaces autopilot summary)
services/nginx/app/openapi.yaml Replace autopilot/automation openapi block with operator-flow endpoints
services/nginx/app/tests/Unit/Cron/CronTaskRegistryTest.php Update count: 24 → 22, drop xlvask.autopilot_queue assertion
services/nginx/app/tests/Unit/XLVask/XLVaskUsageRouteContractTest.php Replaced with end-to-end contract assertions for the new operator surface

New operator-facing endpoints

All under routes/xlvaskUsageLogsRoute.php and scoped to the operator's allowedHallIds (all-scope users see every configured scanner hall; own-scope users see only their group's halls).

Method Path Permission Purpose
GET /modules/xlvask/services/usage/orders list_xlvask_usage_orders_own/all List usage logs with direct linked order id, amount summary, ignored metadata
GET /modules/xlvask/services/usage/orders/summary list_xlvask_usage_orders_own/all Read-only per-period summary (counts + net amount)
PATCH /modules/xlvask/services/usage/orders/{id}/ignore review_xlvask_usage_order Mark ignored with reason
POST /modules/xlvask/services/usage/orders/{id}/unignore review_xlvask_usage_order Clear ignored metadata
POST /modules/xlvask/services/usage/orders/{id}/accept review_xlvask_usage_order Convert to order via createOrderFromWash
POST /modules/xlvask/services/usage/orders/{id}/reject review_xlvask_usage_order Mark ignored with reject reason
GET /modules/xlvask/services/usage/orders/fast-link list_xlvask_usage_orders_own Cached fast-link redeem (existing)

Permissions

The Selvvask surface uses these permissions only:

  • list_xlvask_usage_orders_own
  • list_xlvask_usage_orders_all
  • review_xlvask_usage_order

manage_xlvask_usage_automation, ignore_xlvask_usage_order, superuser_xlvask_automation_activate are not referenced anywhere in the slimmed surface.

Persistence model

xlvask_usage_logs_o already exposes ignored_at, ignored_by, ignored_reason columns — no migration required for the simplified flow.

orders_o::selectByWashId(int|string $WashId) and orders_o::addXLVaskOrder(users_o $user, xlvask_usage_log $xlvask_usage_log) are the only integration points with the order pipeline.

Tests

  • vendor/bin/pest --testsuite=Unit --colors=never passes 1266 tests.
  • One pre-existing failure (BirdControlPlaneActivationTest) requires PLENO_REPO_ROOT_FOR_TESTS (coolify repo) and is unrelated to this change.

Repo scope

This inventory covers api. The pleno-vue side has not yet been updated in this session and will be handled in a follow-up PR.