feat(wizard): Vue onboarding wizard + user config isolation fixes #65
No reviewers
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Circuit-Forge/peregrine#65
Loading…
Reference in a new issue
No description provided.
Delete branch "feature/vue-wizard"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
GET /api/wizard/status,POST /api/wizard/step,GET /api/wizard/hardware,POST /api/wizard/inference/test,POST /api/wizard/complete)wizardstore with crash-recovery, cloud auto-skip (steps 1/2/5), and soft-fail inference testwizardGuardrouter gate — all routes require wizard completion;/setupbounces complete users to/AppNavhidden and sidebar margin removed on/setuproutes_user_yaml_path()dangerous fallback to Meg's legacy profile removedRESUME_PATHreplaced with_resume_path()— user-isolated, derived from STAGING_DBupload_resumewas passing file path string tostructure_resume()(expects text); now extracts bytes → text correctlyWizardResumeStep.vuewas readingdata.experienceinstead ofresp.data.experienceTest plan
pytest tests/test_wizard_api.py -v)/)/setupinaccessible after wizard complete; redirects to/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- _user_yaml_path(): remove dangerous fallback to /devl/job-seeker/ config/user.yaml (Meg's legacy profile); a missing user.yaml now returns an empty dict via load_user_profile, never another user's data - RESUME_PATH: replace hardcoded relative Path('config/plain_text_ resume.yaml') with _resume_path() that derives from _user_yaml_path() so resume file is always co-located with the correct user.yaml - upload_resume: was passing a file path string to structure_resume() which expects raw text; now extracts bytes, dispatches to the correct extractor (pdf/odt/docx), then passes text — matches Streamlit wizard - WizardResumeStep.vue: upload response is {ok, data: {experience…}} but component was reading data.experience (top level); fixed to read resp.data.experience to match the actual API envelope