FAQ¶
Short answers; each links to the spec or ADR that recorded the full
reasoning. Specs live under
openspec/changes/add-job-pilot/.
Why is there no database?
The public trends parquet plus its daily git tags already is one:
main is the latest snapshot, every day has an immutable tag, and an
in-memory DuckDB anti-join between two URLs yields "new since last
run". No state to back up, host, or leak.
(Spec: specs/new-jobs-delta/spec.md.)
Why LangGraph for a pipeline this simple?
Version 2 adds human-in-the-loop approval before outreach messages are
sent. LangGraph's checkpointer and interrupt() make that an added
node, not a rewrite. LangChain's chain abstractions are deliberately
not used.
(ADR 0003.)
Why are the evals plain pytest instead of LLM-judged?
job-pilot contains no LLM reasoning — all model calls happen inside the
deployed job-matcher API. Deterministic code gets deterministic tests.
(Design: design.md §Evals.)
Why does a job show "not analyzed" in the digest? It passed the category filter but failed a rule that does not pay for analysis: no title-keyword hit, or a salary band below the floor. It is listed so you can overrule the filter by hand.
Why did I get an email saying "no new matching jobs"?
By design. A quiet day still sends a short email so that silence always
means breakage. (Spec: specs/email-digest/spec.md.)
Why is the resume committed to a public repository? Owner decision at the Inception gate (2026-07-15): simpler CI, no fetch token, and what is committed is exactly what is scored. The committed copy is scrubbed — no phone, no street address.
Why fpdf2 and not WeasyPrint or python-docx for the PDFs?
WeasyPrint needs system pango/gobject libraries; DOCX→PDF conversion
needs LibreOffice or Word. Both are heavyweight dependencies for a
one-page letter. fpdf2 is pure Python, and the letterhead is a data
template (templates/letterhead.yaml).
(Corrections logged in add-job-pilot/tasks.md and
templated-cover-letter/proposal.md.)
Why doesn't a failed job get retried?
One attempt, log, report, continue — the same policy job-matcher pinned.
Retries hide real board problems and can double cost. The job appears
in the digest's Failures section instead.
(Spec: specs/match-runner/spec.md.)
Next: Home