Spec for spec-driven development

Job Tracker Spec

Emily Ruth · October 27, 2026

This spec turns the Job Tracker PRD into testable requirements, acceptance tests and a prioritized backlog for the engineering team. This doc is the source of truth: the spec changes first, then the code.

ConventionsData modelRequirementsAcceptance testsDesign constraintsBacklogOpen questions

How to use this spec

Data model

Three entities. Every record carries id, version and updatedAt for safe merging (SYNC).

EntityFields
Jobtitle, company, link, posted date, date applied, date rejected, interviewing (bool), follow-up log, interview log, reply log, due date, review-site ratings and counts (2 sites), recommend %, excitement rating, general notes, vetting output
Contactname, company, phone (international), business email, personal email, LinkedIn, reply log
Companyname, rating, latest vetting date, vetting notes

Requirements

IDRequirement
UI-1THE SYSTEM SHALL show six tabs: Jobs, Applied, Interviewing, Rejected, Contacts, Companies.
UI-2THE SYSTEM SHALL support inline editing, sortable and resizable columns, a pinned header and dark mode.
UI-3WHEN the user opens a job, contact or company, THE SYSTEM SHALL show its full record in a slide-out drawer.
CAP-1WHEN the user runs the bookmarklet on a posting, THE SYSTEM SHALL create a job with its title, company and link.
STG-1WHEN a job gets a date applied, THE SYSTEM SHALL move it to Applied.
STG-2WHEN Interviewing is ticked, THE SYSTEM SHALL move the job to Interviewing.
STG-3WHEN a job gets a date rejected, THE SYSTEM SHALL move it to Rejected.
STG-4WHEN a job is opened or a non-stage field is edited, THE SYSTEM SHALL keep the job on its current tab.
REM-1WHEN an applied, follow-up or interview date is added, THE SYSTEM SHALL set the due date 7 days after the latest one.
REM-2WHEN the due date passes, THE SYSTEM SHALL change its color.
REM-3WHEN a job has had no activity for 30+ days, THE SYSTEM SHALL suggest closing it.
CO-1WHEN a job or contact names a new company, THE SYSTEM SHALL create that company.
CO-2THE SYSTEM SHALL let the user rename, delete or merge companies.
CO-3WHEN a company rating changes, THE SYSTEM SHALL update it on related jobs.
CO-4THE SYSTEM SHALL match companies by exact name.
VET-1WHEN a quick screen runs, THE SYSTEM SHALL check hard gates before scoring, and stop and ask about compromising on a fail.
VET-2WHEN a quick screen scores 55 or higher, THE SYSTEM SHALL offer a full vet.
VET-3WHEN the company was vetted in the last 60 days, THE SYSTEM SHALL reuse that research and check only for news since.
VET-4WHEN a vet finishes, THE SYSTEM SHALL write its output to the job record.
VET-5THE SYSTEM SHALL count a skill only with on-the-job evidence and flag anything not on the resume or confirmed by the user.
SYNC-1WHEN a record is saved, THE SYSTEM SHALL timestamp it and merge by newest.
SYNC-2WHEN the AI writes a record, THE SYSTEM SHALL check its version first and keep the user's edit on conflict.
SYNC-3WHEN cloud sync is unavailable, THE SYSTEM SHALL keep working with local storage only.
DIG-1WHEN the weekday digest runs, THE SYSTEM SHALL email new matches since the last run and skip jobs already passed on.
BAK-1WHEN the user exports, THE SYSTEM SHALL download all data as JSON.

Acceptance tests

Starter set for the highest-risk rules. Add one per remaining requirement as tasks are built.

TestReqGivenWhenThen
T1CAP-1A posting page is openThe bookmarklet runsA new job has the posting's title, company and link
T2STG-1A job on JobsA date applied is enteredThe job moves to Applied
T3STG-3A job on AppliedA date rejected is enteredThe job moves to Rejected
T4REM-1Applied on Oct 1, follow-up on Oct 5The follow-up is savedDue date is Oct 12
T5CO-1No company named AcmeA job for Acme is addedAcme appears on Companies
T6VET-1A contract-only postingA quick screen runsIt stops before scoring and asks about compromising
T7VET-2A quick screen scores 54The screen finishesNo full vet is offered
T8SYNC-2The user edits a job while the AI writes to itBoth saves landThe user's edit is kept
T9BAK-1Any dataThe user exportsA JSON file with all jobs, contacts and companies downloads

Regression tests (bugs already fixed; must never return)

TestReqGivenWhenThen
R1SYNC-1A job was just addedAn older cloud snapshot arrivesThe new job is still there
R2STG-4A job on RejectedThe user opens itIt stays on Rejected
R3STG-4A job with one stage field setThe user edits a different fieldThe job stays on its current tab

Design constraints

Rules for every change.

Backlog

Next release, in priority order. Shipped work is listed below it for traceability.

Shipped

Open questions