## 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>
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_ownlist_xlvask_usage_orders_allreview_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=neverpasses 1266 tests.- One pre-existing failure (
BirdControlPlaneActivationTest) requiresPLENO_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.