← All work

Engineering case study · JobSignal

Recovering interrupted ingestion without letting writers collide.

JobSignal is an AI application that turns a resume into ranked job matches, each with a written explanation. This case covers one recent engineering problem: what happens when a background ingestion run is interrupted, and how to repair the leftover state safely when more than one write path can touch the same rows.

Live product Fix merged · CI passing Production acceptance pending

What the product does

A candidate uploads a resume. Claude extracts a structured profile; pgvector retrieves candidate listings, sourced from public Department of Labor filings that indicate sponsorship history; an LLM reranker orders the shortlist and writes a rationale for each match. The public homepage is open; the matching flow itself needs an account and a resume.

  1. Ingest listings from source data this case
  2. Normalize and chunk into child records this case
  3. Vector retrieval against the candidate profile unchanged
  4. LLM rerank unchanged
  5. Written rationale per match unchanged

The application is built like production even though it is a solo product: row-level security, prompt-injection hardening, per-user quotas, model routing with prompt caching, and daily health checks.

The problem

Job data has to be both usable and consistent. Ingestion runs in the background and writes listings in batches of child chunks. When a run is interrupted, it leaves records in an unfinished state. A repair job that simply re-processes the leftovers introduces a second writer, and two writers touching the same rows produce duplicates and partial writes that are worse than the original interruption.

My role

I own JobSignal end to end. For this change I defined the requirement and the acceptance criteria, designed the guard, and reviewed the implementation, which was produced with AI coding tools under the cross-LLM workflow I run. The design, review, and the call on what counted as done are mine; this page does not claim every line was hand-written.

Decisions

How it was verified

Test snapshot2026-09-14, candidate commit 45696f8: 94 test files, 1,487 tests. Not re-run for this page and not a live production figure; Playwright end-to-end runs are counted separately.
CIPassing on the merged change.

Status and boundaries

Code merged CI passing Production behavior acceptance pending

The change is merged and CI is green. Acceptance of the behavior in production, against real interrupted runs, has not been completed yet and is tracked separately. The application-level lease is not presented as a substitute for database-level coordination.

Where to see the evidence