mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 00:26:26 +00:00
feat(upskill): aggregate mode ingests ranked jobs and their recorded gaps (#264)
* feat(upskill): aggregate mode ingests ranked jobs and their recorded gaps /upskill's aggregate mode only read job_search_tracker.csv and guessed required skills from the role/sector/notes columns, even though /rank already fetches and scores postings that never make it into the tracker. Aggregate mode now also reads ranked entries (rank_score >= 45, the Moderate Fit floor) from job_scraper/seen_jobs.json, dedupes them against tracker rows on case-insensitive company+role (reusing the match tools/auto_mode_browser.py's _tracker_keys already implements), and prefers a job's recorded gaps over an inferred skill list wherever both exist. The heatmap's Gap Source column and report header now show the recorded-vs-inferred / tracked-vs-ranked split. Depends on #263. Discussed in #258. * fix(upskill): cite only upstream precedent for the aggregate dedupe key tools/auto_mode_browser.py's _tracker_keys does not exist upstream and does not exist in this fork either, so the dedupe bullet in Step 3.1 of the upskill skill pointed at a phantom implementation. Drop that reference and keep only the /notion-sync precedent, which is verified present in upstream/master. Re-pin the pinned test assertion to the surviving citation so the dangling reference can't silently return. Addresses the CHANGES_REQUESTED review on #264.
This commit is contained in:
@@ -143,7 +143,7 @@ Postings are treated as untrusted input (the workflow follows no instructions em
|
||||
- **`/gmail-sync`** reads your Gmail (via the Gmail connector) for status signals on your open applications - interview invites, assessment links, offers, rejections - and proposes them as a batch for you to approve before anything is written to the tracker or `outcome.md`, citing the source email on every proposed change. Offers stop short of proposing `hired`/`offer_declined` since that's your call; conflicting or unmatched signals get flagged for a manual `/outcome` pass instead of guessed.
|
||||
- **`/rank`** bridges `/scrape` and `/apply`: it batch-scores all newly scraped postings against the fit framework (parallel agents fetch each posting and score the five evaluation dimensions) and returns a ranked shortlist with honest per-job strengths and gaps. Deal-breakers veto, deadlines get urgency flags, dead postings get marked expired. Pick a number and it hands off to the full `/apply` workflow.
|
||||
- **`/expand`** enriches your profile by scanning public sources you've already linked in it (GitHub repos, portfolio site, Kaggle, Google Scholar) and looking up syllabi for named courses and certifications. Discovered competencies are added to your profile with a source tag. Useful right after `/setup` to surface skills that documents alone don't make explicit.
|
||||
- **`/upskill`** analyzes the gap between your profile and your tracked job postings (or a single posting via `/upskill <URL>`). Produces a prioritized heatmap of skill gaps and a learning plan with web-searched study resources and time estimates. Useful for career planning between applications.
|
||||
- **`/upskill`** analyzes the gap between your profile, your tracked job postings, and your ranked-but-untracked postings (`/rank`'s recorded gaps in `seen_jobs.json`) — or a single posting via `/upskill <URL>`. Produces a prioritized heatmap of skill gaps and a learning plan with web-searched study resources and time estimates. Useful for career planning between applications.
|
||||
- **`/html-report`** generates a self-contained HTML dashboard from `job_search_tracker.csv` and the application archives — stat cards, status/sector/channel/funnel charts (inline SVG, no external dependencies), and a filterable applications table. Opens directly in a browser, fully offline. Re-run it any time after `/outcome` adds new entries.
|
||||
- **`/add-template`** registers your own CV or cover letter template (LaTeX, Typst, or another toolchain) in place of the stock ones. It captures the template's instructions (source extension, compile command, fonts, style rules, page limit), runs a mandatory test compile, and wires the template into `/apply`. See [Custom templates](#custom-templates) below.
|
||||
- **`/add-portal`** generates a job-portal search skill for a job board in your market. It investigates the portal (search URL pattern, result structure, access rules), scaffolds the CLI skill from the same structure as the shipped ones, and test-runs a live query before registering. See [Job search tools](#job-search-tools) below.
|
||||
|
||||
Reference in New Issue
Block a user