diff --git a/CHANGELOG.md b/CHANGELOG.md index 85093f6..8b9bddd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ ## [Unreleased] +## [0.5.0] — 2026-08-07 + +Scoring became CV-aware. A job's match score is now owned by the CV that produced +it, so changing your CV re-opens every cached job instead of silently reusing a +verdict reached for someone else's profile. + ### New Features - **`jobradar cache prune-scores`** (`cli.py` / `cache.py`) @@ -30,6 +36,20 @@ - **Release highlights in Chinese, English and Spanish** (`docs/release-highlights.*.md` / `README*.md`) The highlights document now follows the same `..md` convention as the READMEs, with a language switcher in each file. Each README gained a Performance section carrying the latest release's headline figures and linking to the highlights and to the `### Validation` entries behind them. +- **Release-highlights inclusion rule restated** (`docs/release-highlights.*.md`) + The rule read "from 0.5.0 onward each release is compared against the previous release", which said nothing about releases with nothing to compare. It now states that a release is listed when it changes performance or user-facing behavior, that the kind of change determines what is compared — measured figures for performance work, changed behavior for behavior work — and that a release altering neither is not listed. + +### Validation + +- **CV-aware scoring** — `f14e369` (0.4.0) → `b47dfc0` + - Held constant: the same local cache (293 jobs), the same CV (`eaf1b010`), `gemini-3.5-flash-lite` + - Jobs `assess` could reach: 0 → 205. Before, the command reported "all assessed" because every row carried a legacy assessment + - Cached jobs a CV change could never re-open: 95 → 0 + - Jobs holding a match for the current CV: 93 → 293, by backfilling 200 (0 failures, 173 s, 5 workers) + - Scales feeding `effective_score`: 2 (legacy 0–10 alongside match 0–100) → 1 + - Cache-hit classification, measured on five jobs a previous CV had rejected: passing the current `cv_hash` yields 0 skipped / 5 re-assessed, against 5 skipped / 0 re-assessed on the legacy path + - Verdict: correctness only. **No performance or cost improvement is claimed** — the release adds assessment work rather than removing it, since a cached job without a match for the current CV is now re-evaluated instead of reused. Expect a one-off cost increase on the first search after changing CV, and no change thereafter. Search latency was not measured and is not claimed either way. + ## [0.4.0] — 2026-08-07 ### New Features diff --git a/README.es.md b/README.es.md index 668845c..f18794a 100644 --- a/README.es.md +++ b/README.es.md @@ -79,7 +79,8 @@ Indeed 741 + LinkedIn 255 = 996 extraídos ## Rendimiento -Última versión, 0.4.0: +El trabajo de rendimiento más reciente es de 0.4.0. La versión actual, 0.5.0, +modificó el comportamiento y no el rendimiento, y no reclama cifras propias: | Métrica | Antes | Después | | --- | --- | --- | diff --git a/README.md b/README.md index a987d75..32dff85 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,8 @@ Indeed 741 + LinkedIn 255 = 996 scraped ## Performance -Latest release, 0.4.0: +Most recent performance work, 0.4.0. The current release, 0.5.0, changed +behavior rather than speed and claims no performance figures of its own: | Metric | Before | After | | --- | --- | --- | diff --git a/README.zh.md b/README.zh.md index 1a5e52e..8ec2f39 100644 --- a/README.zh.md +++ b/README.zh.md @@ -79,7 +79,7 @@ Indeed 741 + LinkedIn 255 = 996 抓取 ## 性能 -最新版本 0.4.0: +最近一次性能改动来自 0.4.0。当前版本 0.5.0 改的是行为而非速度,不声称任何性能数字: | 指标 | 优化前 | 优化后 | | --- | --- | --- | diff --git a/data/jobradar_cache.db.bak b/data/jobradar_cache.db.bak new file mode 100644 index 0000000..7773f7c Binary files /dev/null and b/data/jobradar_cache.db.bak differ diff --git a/docs/release-highlights.es.md b/docs/release-highlights.es.md index 243315c..a4af6cb 100644 --- a/docs/release-highlights.es.md +++ b/docs/release-highlights.es.md @@ -6,7 +6,41 @@ Resumen orientado al usuario de lo que mejoró cada versión. Cada cifra debe po rastrearse hasta una entrada `### Validation` en [CHANGELOG.md](../CHANGELOG.md); este archivo nunca introduce una cifra propia. -A partir de 0.5.0, cada versión se compara con la versión anterior. +A partir de 0.5.0, una versión aparece aquí cuando modifica el rendimiento o el +comportamiento visible para el usuario, y se describe en comparación con la versión +anterior. Qué se compara depende del tipo de cambio: el trabajo de rendimiento se +compara con cifras medidas; el de comportamiento, con lo que la herramienta hace +ahora de forma distinta. Una versión que no altere ninguno de los dos no se lista. + +## 0.5.0 + +Una versión de comportamiento, no de rendimiento. La puntuación pasó a depender del +CV, lo que cambia qué devuelve una búsqueda y cuánto cuesta. Las cifras proceden de +la entrada `### Validation` de `f14e369` → `b47dfc0`. + +**Cambiar de CV vuelve a abrir todos los empleos en caché** +Hasta 0.4.0 la puntuación se guardaba sin registrar qué CV la produjo, así que un +empleo juzgado con un CV antiguo seguía juzgado. En una caché de 293 empleos, 95 que +un CV anterior había rechazado no podían reconsiderarse nunca; ahora son 0. + +**`assess` dejó de informar de un trabajo que no hacía** +Filtraba por la columna heredada antes de consultar los resultados de coincidencia y, +como cada fila llevaba una puntuación heredada, anunciaba "todo evaluado" mientras 205 +empleos carecían de puntuación para el CV actual. Empleos alcanzables: 0 → 205. + +**Una sola escala de puntuación en lugar de dos** +Una puntuación heredada de 0–10 y una de coincidencia de 0–100 se devolvían por la +misma propiedad y se ordenaban entre sí. Escalas en `effective_score`: 2 → 1. + +**Nuevo: `jobradar cache prune-scores`** +Elimina resultados de coincidencia de una versión de prompt obsoleta y, opcionalmente, +de un CV obsoleto, para que la siguiente búsqueda los recalcule. + +**Nota sobre el coste** +Esta versión añade trabajo de evaluación en lugar de quitarlo. La primera búsqueda tras +cambiar de CV reevalúa los empleos en caché en vez de reutilizar el veredicto de otro CV; +las búsquedas posteriores no se ven afectadas. No se afirma ninguna mejora de latencia ni +de coste. ## 0.4.0 diff --git a/docs/release-highlights.md b/docs/release-highlights.md index 3a55fd5..6f23dcc 100644 --- a/docs/release-highlights.md +++ b/docs/release-highlights.md @@ -6,7 +6,40 @@ User-facing summary of what each release improved. Every figure here must trace back to a `### Validation` entry in [CHANGELOG.md](../CHANGELOG.md); this file never introduces a number of its own. -From 0.5.0 onward each release is compared against the previous release. +From 0.5.0 onward, a release appears here when it changes performance or +user-facing behavior, and is described against the previous release. Which +kind of change it is determines what gets compared: performance work is +compared on measured figures, behavior work on what the tool now does +differently. A release that changes neither is not listed. + +## 0.5.0 + +A behavior release, not a performance one. Scoring became CV-aware, which changes +what a search returns and what it costs. Figures below come from the +`### Validation` entry for `f14e369` → `b47dfc0`. + +**Changing your CV now re-opens every cached job** +Until 0.4.0 a score was stored without recording which CV produced it, so a job +judged under an old CV stayed judged. On a 293-job cache, 95 jobs an earlier CV +had rejected could never be reconsidered — now 0. + +**`assess` stopped reporting work it wasn't doing** +It selected on the legacy column before consulting match results, so with every +row carrying a legacy score it announced "all assessed" while 205 jobs had no +score for the current CV. Reachable jobs: 0 → 205. + +**One scoring scale instead of two** +A legacy 0–10 score and a 0–100 match score were both returned by the same +property and sorted against each other. Scales feeding `effective_score`: 2 → 1. + +**New: `jobradar cache prune-scores`** +Drops match results from an outdated prompt version, and optionally from an +outdated CV, so the next search recomputes them. + +**Cost note** +This release adds assessment work rather than removing it. The first search after +changing CV re-evaluates cached jobs instead of reusing another CV's verdict; +later searches are unaffected. No latency or cost improvement is claimed. ## 0.4.0 diff --git a/docs/release-highlights.zh.md b/docs/release-highlights.zh.md index f6fc2d7..d243978 100644 --- a/docs/release-highlights.zh.md +++ b/docs/release-highlights.zh.md @@ -5,7 +5,33 @@ 面向使用者的版本优化摘要。这里的每个数字都必须能在 [CHANGELOG.md](../CHANGELOG.md) 的 `### Validation` 中找到出处;本文档不产生任何自己的数字。 -从 0.5.0 起,每个版本对比上一个发布版本。 +从 0.5.0 起,只要版本改变了性能或使用者能感知的行为,就在这里与上一个发布版本 +对比说明。对比什么取决于改动的性质:性能改动比实测数字,行为改动比工具的实际 +表现差异。两者都没有改变的版本不会出现在本文档中。 + +## 0.5.0 + +这是行为变更版本,不是性能版本。评分开始区分 CV 归属,因此搜索返回什么、花多少钱 +都随之改变。下列数字出自 `f14e369` → `b47dfc0` 的 `### Validation` 条目。 + +**换 CV 后所有缓存职位重新参与评估** +0.4.0 之前,评分落库时不记录是哪份 CV 算的,于是被旧 CV 判定过的职位就一直维持 +那个判定。293 条缓存中,有 95 条被旧 CV 拒绝的职位永远无法被重新考虑——现在为 0。 + +**`assess` 不再谎报自己已完成** +它先按 legacy 列筛选再查匹配结果,而每条记录都带着 legacy 评分,于是它宣称 +"所有 JD 已有评估",实际有 205 条在当前 CV 下毫无评分。可捞出的职位:0 → 205。 + +**评分只剩一种分制** +legacy 的 0~10 分与 match 的 0~100 分曾由同一个属性返回,并在同一次排序里比大小。 +参与 `effective_score` 的分制:2 → 1。 + +**新增 `jobradar cache prune-scores`** +删除过时 prompt 版本的匹配结果,也可一并删除旧 CV 的,让下次搜索按当前口径重算。 + +**成本说明** +本版本增加而非减少评估量。换 CV 后的第一次搜索会重新评估缓存职位,而不是复用另一份 +CV 的判定;之后的搜索不受影响。本版本不声称任何延迟或成本改进。 ## 0.4.0 diff --git a/pyproject.toml b/pyproject.toml index de455b0..8224987 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "jobradar" -version = "0.4.0" +version = "0.5.0" description = "Radar-scan the job market against your CV — auto-discover, scrape and LLM-assess matching roles" license = {text = "BUSL-1.1"} requires-python = ">=3.11" diff --git a/uv.lock b/uv.lock index 6d4101e..f9a7819 100644 --- a/uv.lock +++ b/uv.lock @@ -581,7 +581,7 @@ wheels = [ [[package]] name = "jobradar" -version = "0.4.0" +version = "0.5.0" source = { editable = "." } dependencies = [ { name = "anthropic" },