* Deduplicate string cleanup helpers and not-found responses
* Enforce aliased imports for infra and shared modules
* Enforce @client/@server aliases for deep relative imports
* Deduplicate visa sponsor and location filter definitions
* Use shared city filter export in extractor location checks
* chore: move @types/canvas-confetti to devDependencies, remove unused get-tsconfig direct dep
* chore: configure knip with workspace entry points for all packages
* refactor(shared): split 1119-line types.ts into domain modules under types/
* refactor: remove llm-service.ts shim, migrate all import sites to llm/service directly
* refactor(settings): migrate 4 manually-resolved settings into conversion registry
* refactor: split gmail-sync.ts into gmail-api, email-router, and thin orchestrator
* refactor(orchestrator): extract useKeyboardShortcuts and usePipelineControls from OrchestratorPage
Splits the 840-line OrchestratorPage into a thin orchestration shell (~480 lines) by
extracting keyboard shortcut handling into useKeyboardShortcuts.ts and pipeline
control logic into usePipelineControls.ts. Net negative line count across all files.
* feat: create settings registry (Step 1)
Introduces a single source of truth for all settings, combining schema definitions, default logic, parsing, and serialization into a single configuration object.
* feat: derive schema, keys, and types from settings registry (Step 2)
Derives AppSettings nested shape, SettingKey DB union, and updateSettingsSchema Zod shape automatically from the settings registry.
* refactor: gut envSettings and remove settings-conversion (Step 3)
Replaces manual env arrays with registry-driven maps in envSettings.ts.
Deletes settings-conversion.ts since all parsing/defaults now live in the registry.
* refactor: simplify getEffectiveSettings with generic loop (Step 4)
Replaces ~334 lines of manual key-by-key unpacking with a generic registry-driven iteration loop (~40 lines). Models, typed, string, and virtual kinds are automatically derived.
* refactor: simplify settingsUpdateRegistry (Step 5)
Replaces ~350 lines of explicit per-key update handlers with a dynamic generic loop over the settings registry, properly routing persistence and side effects.
* refactor(settings): implement nested settings registry and clean up tests
- Migrate settings system to use a centralized nested registry (`settings-schema.ts`, `registry.ts`)
- Remove obsolete flat-to-nested conversion logic (`settings-conversion.ts`)
- Address Biome warnings by explicitly ignoring intentional `any` usage in generic runtime schema builder and registry logic
- Clean up unused variables in test files (`SettingsPage.test.tsx`) to achieve a 100% green CI pipeline
* refactor(settings): address PR comments on env data and registry parsing
- Narrow `getEnvSettingsData` return type to `Partial<AppSettings>` to satisfy strict typing and omit 'typed' registry entries
- Introduce `parseNonEmptyStringOrNull` for typed string settings so empty-string overrides cleanly fall back to defaults (matching original `||` logic)
- Add missing unit tests for registry parse/serialize helpers (JSON, bools, numeric clamping)
* feat(orchestrator): parallelize scoring and bulk rescore with bounded concurrency
* chore(docs): format versioned docs metadata for biome
* fix(orchestrator): address PR review feedback on async pool and bulk rescore
* ci(docs): run biome --write before docs version commit
* don't run for generated docusaurus
* format
* workflow to autoupdate docs version
* fix versioning
* add link back to app
* remove old docs
* html link???
* don't track .docusaurus
* documantation build
* feat(orchestrator): add visual feedback when moving jobs to Ready
- Added `toast.message("Moving job to Ready...")` in `OrchestratorPage.tsx` for single item keyboard shortcut action.
- Added `toast.message("Moving jobs to Ready...")` in `useBulkJobSelection.ts` for bulk `move_to_ready` action.
- Updated `OrchestratorPage.test.tsx` to verify the toast notification.
This addresses the issue where pressing 'R' provided no visual feedback until the action completed.
* fix(orchestrator): remove accidental db files
Removed `orchestrator/data/jobs.db`, `orchestrator/data/jobs.db-shm`, and `orchestrator/data/jobs.db-wal` which were accidentally created during testing.
* fix(orchestrator): remove accidental root sqlite.db
Removed `orchestrator/sqlite.db` which was also accidentally created.