fix(tracker): persist the application deadline end to end (#319) (#324)

The deadline is written at every moment it is provably in hand and survives
every write that follows: seen_jobs.json base field, /rank stored-value urgency
+ expiry sweep with Step 4 persistence, tracker 14th column with header-line-only
migration for existing files, /scrape-path extraction (assistant SKILL.md 1.3.2
-> 1.3.3), preserve-unparsed-fields in /outcome and /gmail-sync, notion-sync
deadline precedence. Design, scope analysis, and the folded refinements by
jakob1379 (#319, #328).

Co-authored-by: Jakob Stender Guldberg <17257805+jakob1379@users.noreply.github.com>
This commit is contained in:
Oscar Madera
2026-08-16 19:56:45 +02:00
committed by GitHub
co-authored by Jakob Stender Guldberg
parent 5c6ffe8aa7
commit c855e11d22
12 changed files with 247 additions and 16 deletions
+12
View File
@@ -53,6 +53,18 @@ class UpskillSkillSpec(unittest.TestCase):
"Step 2 must document the graceful-degradation clause for entries scored before gaps existed",
)
def test_step2_column_list_keeps_in_phase_with_tracker_header(self):
"""/upskill reads the tracker, so its enumeration of the columns must
match the header /apply writes - the deadline column (#319) is the
first column to be added since the list was written."""
sections = _sections(SKILL.read_text(encoding="utf-8"))
step2 = sections.get("Step 2: Load Data", "")
self.assertIn(
"source, deadline",
step2,
"Step 2's column list lost the deadline column the tracker header now ends with",
)
def test_step3_documents_dedupe_and_gap_precedence(self):
sections = _sections(SKILL.read_text(encoding="utf-8"))
step3 = sections.get("Step 3: Pass 1 — Hard Skill Diff", "")