Repository navigation
Releases
v0.2.1
What's Changed
This release removes the AI match scoring feature from the job matching pipeline and updates the documentation and UI to reflect this change. It also simplifies the code and database schema accordingly.
Removal of AI Match Scoring:
- Dropped the
scorecolumn from thematched_jobstable in the database migration logic (app/database.py). - Removed the
scorefield from theMatchedJobmodel and its__repr__method (app/models/job.py). - Eliminated the
scorefield from the API response model and feed endpoint, and removed themin_scorequery parameter and related logic (app/routers/feed.py). - Removed UI references to "match score" and "best match" sorting in all supported languages (
app/locales/en.json,app/locales/de.json,app/locales/ru.json,app/locales/uk.json).
Documentation & UI Improvements:
- Updated feature descriptions in all language files to remove references to AI scoring and rationales, and clarified deduplication and automation features (
app/locales/en.json,app/locales/de.json,app/locales/ru.json,app/locales/uk.json).
Codebase Cleanup:
- Removed unused imports related to scoring from
app/models/job.py. - Cleaned up
.pre-commit-config.yamlby removing an unnecessary exclude pattern.
These changes collectively remove the AI scoring logic and references from both backend and frontend, streamline the codebase, and ensure the documentation and UI accurately represent the platform's current functionality.
Full Changelog: v0.2.0...v0.2.1
v0.2.0
✨ New Features
-
Dedicated Job Details Page:
-
Added a new
/job/{job_id}routing and a responsive UI (job.html) to view full matched job details. -
Features a visual "Match Score" ring, detailed job descriptions, and direct action buttons (Save, Dismiss, View on Arbeitsagentur).
-
Clickable Feed Integration:
-
Job cards in the feed now link directly to the new details page via clickable titles and a dedicated "View" button.
-
Lazy-Loading Descriptions:
-
The backend now automatically fetches and caches missing job descriptions from the Bundesagentur für Arbeit (BA) API when a user views a job's details.
-
Expanded Localization:
-
Added UI translations for the new job details interface across all supported languages (English, German, Russian, Ukrainian).
🛡️ Security & Data Integrity
-
Robust Text Sanitizer (
text_sanitizer.py): -
Implemented a new defense-in-depth HTML parser to strip malicious markup (e.g.,
<script>,<style>,<iframe>) from untrusted third-party BA API responses. -
Automatically removes invisible formatting, zero-width, and private-use characters to prevent hidden prompt-injection payloads from reaching the LLM matcher.
-
Normalizes whitespace and safely truncates abnormally long text strings to protect database columns and LLM context limits.
-
Strict Schema Validation:
-
Hardened
BAJobListingandBADetailedJobschemas to enforce strict data sanitization on initialization. -
Added strict validation for external URLs (allowing only well-formed
http/https) and reference numbers. -
API Client Protections:
-
The
ArbeitsagenturClientnow proactively refuses to execute requests if the requested job reference number contains invalid or unsafe characters.
🧪 Testing & Chores
- Added comprehensive test suites (
test_text_sanitizer.pyandtest_job_info.py) to verify defense against adversarial payloads, entity-encoded XSS attacks, and malformed HTML. - Expanded API client tests to ensure missing fields and HTTP 404 errors from the BA API are handled gracefully without crashing the view.
Full Changelog: v0.1.3...v0.2.0
v0.1.3
Fixed missing dependencies error in pyproject.toml
Full Changelog: v0.1.2...v0.1.3
v0.1.2
Fixed: idle connection error after 6-8 hours of waiting
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Add missing dependencies
Full Changelog: v0.1.0...v0.1.1