## 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>
96 lines
5.8 KiB
Markdown
96 lines
5.8 KiB
Markdown
# 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.
|