mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 08:36:25 +00:00
fix(html-report): read and render the tracker deadline column (#325)
/html-report was the one tracker consumer #319's deadline column left behind: Step 1 now parses every canonical column and Step 3 renders Deadline after Date. The drift guard derives CANONICAL_HEADER from apply.md itself, so a future column added elsewhere but missing here fails with the column named; legacy 13-field rows read as empty deadline, never dropped, never inferred. Includes rule-6 sweep refinements and deadline-reconciliation rules authored by jakob1379. Co-authored-by: Jakob Stender Guldberg <17257805+jakob1379@users.noreply.github.com>
This commit is contained in:
co-authored by
Jakob Stender Guldberg
parent
c855e11d22
commit
762d3218ef
@@ -23,6 +23,16 @@ per-file diff commands.
|
||||
|
||||
### Fixed
|
||||
|
||||
- **The `/html-report` dashboard now reads and renders the tracker's `deadline`** (follow-up to
|
||||
#319). The tracker gained a fourteenth `deadline` column and every other consumer (`/outcome`,
|
||||
`/upskill`, `/notion-sync`) was updated to know it, but the dashboard's Step 1 field
|
||||
enumeration and Step 3 table columns still listed the original thirteen - the one surface
|
||||
where the column could not be seen at all, so a `drafted` application's clock stayed invisible
|
||||
in the report that reviews the pipeline end to end. The Step 1 enumeration now matches the
|
||||
canonical 14-column header and the applications table can show a `Deadline` column, subject to
|
||||
the existing empty-column rule. Pinned by `tests/test_html_report_command.py` so a future
|
||||
column addition cannot silently vanish from the dashboard again.
|
||||
|
||||
- **Application deadlines are written down at every moment the framework provably holds them**
|
||||
(#319). `/scrape` fetched the deadline and rendered it in a table, `/rank` turned it into the 🔥
|
||||
urgency marker and the expiry check, and nothing stored it - so the marker fired exactly once,
|
||||
@@ -42,6 +52,16 @@ per-file diff commands.
|
||||
`tests/test_rank_command.py`, `tests/test_apply_records_application.py`, and
|
||||
`tests/test_upskill_skill.py`.
|
||||
|
||||
The sweep's edges are stated rather than left to the reader: an entry with no stored `deadline`
|
||||
is left alone and never inferred from another field (the majority case, since most entries
|
||||
predate the column), `--all` re-scores any status including `expired` so a swept job is
|
||||
recoverable, and `/rank` Step 4's idempotency rule now names the sweep as its deliberate
|
||||
exception instead of contradicting it. Step 5 reports how many entries were swept and how many
|
||||
were retired, so an automated status change is never silent. `/outcome` Step 1 states that the
|
||||
header append is the one edit it may make outside a matched row, so it does not read as a
|
||||
violation of Step 4's own "never restructure the CSV". `/notion-sync` forbids reconciling two
|
||||
disagreeing deadlines by taking the earlier or later of them.
|
||||
|
||||
- **`convert_salary_excel.py` no longer misreads whole-thousands cells from a Danish-locale
|
||||
export** - a cell like `60.000` (thousands separator, no decimal comma) was handed to
|
||||
`float()` and silently written as `60.0`, a 1000x-wrong salary in `salary_data.json` that
|
||||
|
||||
Reference in New Issue
Block a user