- task_scheduler: extend LocalScheduler (concrete class), not TaskScheduler
(Protocol); remove unsupported VRAM kwargs from super().__init__()
- dev-api: lazy import db_migrate inside _startup() to avoid worktree
scripts cache issue in test_dev_api_settings.py
- test_task_scheduler: update VRAM-attribute tests to match LocalScheduler
(no _available_vram/_reserved_vram); drop deepest-queue VRAM-gating
ordering assertion (LocalScheduler is FIFO, not priority-gated);
suppress PytestUnhandledThreadExceptionWarning on crash test; fix
budget assertion to not depend on shared pytest tmp dir state
- test_dev_api_settings: patch path functions (_resume_path, _search_prefs_path,
_license_path, _tokens_path, _config_dir) instead of removed module-level
constants; mock _TRAINING_JSONL for finetune status idle test
- test_wizard_tiers: Vue SPA is free tier (issue #20), assert True
- test_wizard_api: patch _search_prefs_path() function, not SEARCH_PREFS_PATH
- test_ui_switcher: free-tier vue preference no longer downgrades to streamlit
New endpoints:
- GET /api/wizard/status — resume-after-refresh; returns wizard_step + saved_data
- POST /api/wizard/step — persist step data; side effects per step
(step 3: plain_text_resume.yaml, step 5: .env keys,
step 6: search_profiles.yaml)
- GET /api/wizard/hardware — GPU detection + profile suggestion
- POST /api/wizard/inference/test — soft-fail Ollama/LLM connectivity check
- POST /api/wizard/complete — set wizard_complete=true, apply service URLs
Updated:
- GET /api/config/app now includes wizardComplete (from user.yaml) and isDemo
(from DEMO_MODE env) so the Vue nav guard can gate on a single config fetch
30 tests, all passing