Repository navigation
Truthfulness and Safety
| Output | Source | Gate |
|---|---|---|
| Resume bullets, projects, skills | Fact Bank entries, selected and ordered |
resume.validate() rejects anything not in the bank |
| Skill spelling | the JD's spelling of a skill already listed ("Kubernetes (K8s)") | only from a fixed alias table; stripping aliases must give the original line exactly |
| Form answers | presets, approved answers, ordered rules | unset preset → the human queue |
| "Do you have experience with X?" | Yes only if X (or its meaning, e.g. SPA → React) is in the skills | never a guessed "No" |
| Open-ended answers (v0.8) | Fact Bank sentences chosen for this job | logged with fact ids in drafts_review.md and the event log |
Sponsorship, work authorization, citizenship, export control, arbitration, salary, EEO and demographics, references, background checks, and anything sensitive (SSN, bank, passwords, date of birth). The draft module refuses these by pattern before it looks at the Fact Bank, and the "answer from the page" API refuses them too.
A candidate on OPT is authorized to work today without sponsorship, but will need it later. A form asked "Are you able to work in the US without visa sponsorship for the next 5 years?". The plain "authorized without sponsorship" rule would have answered Yes, which isn't true. v0.8 adds a long-term variant whose answer is derived from the presets (needs sponsorship in the future → No), and the legal airbag checks the same variant, so a "Yes" there now stops the submission.
| Airbag | Trigger |
|---|---|
| Sensitive field | SSN, bank/routing, card, password, DOB, driver's license, passport, tax id |
| Payment | application or processing fee, card or billing details |
| Unexpected site | the form moved to a host that isn't an ATS or the job's own site |
| Answer drift | a legal answer differs from the presets |
| Rate caps | daily cap (default 25) and 3 per company per day |
| Kill switch |
workspace/STOP exists |
A fired airbag records a flag, sends an SOS email if configured, screenshots the form, and moves on without submitting.
hCaptcha, reCAPTCHA, Cloudflare Turnstile and Ashby's automation flag are detected and handed to the candidate with the form filled and the resume ready. After an Ashby flag, Ashby submissions pause for 24 hours.
profile/ and workspace/ are git-ignored. CI runs a privacy gate on every pull request and push (PII patterns,
forbidden paths, noreply-only commit emails, keyed fingerprints of private terms). The public demo is built from
anonymized events and refuses to publish if a company name would leak.
Related: Home · Architecture · Discovery · Fit gate · Tailoring · Apply engine · Email codes · Outcomes · Platform · Metrics
REGEN · source-first discovery, proof-backed tailoring, receipts for every submit · Home · Architecture · Metrics · pages live in docs/wiki/ and are reviewed like code