Greenhouse real-tenant validation¶
Companion to the Workday validation. Validated the Greenhouse
engine against a live public Greenhouse application form — PerfectServe's "Senior Software
Engineer, .NET – US Remote" (job-boards.greenhouse.io/perfectserve/jobs/5826519004). Greenhouse
apply forms are public (no account/login), so this was pure read-only inspection — nothing filled,
nothing submitted.
What matched (no bug — contrast with Workday)¶
Modern Greenhouse (job-boards.greenhouse.io) renders core fields with clean, stable ids, and our
GreenhouseSelectors.CoreCssChain("#{id}") targets exactly those:
| Field | Real form | Our primary selector | Match |
|---|---|---|---|
| First name | input#first_name (autocomplete=given-name) |
#first_name |
✅ |
| Last name | input#last_name |
#last_name |
✅ |
input#email (type=text, not email) |
#email (id-based, type-agnostic) |
✅ | |
| Phone | input#phone (type=tel) |
#phone |
✅ |
| Resume | input#resume (type=file) |
input#resume |
✅ |
Because our anchors are id-based (not type='email' etc.), the email field being type=text is a
non-issue. The old job_application[first_name] name fallbacks stay for legacy Greenhouse tenants.
Findings¶
-
GAP — Location (City) + Country are newer REQUIRED fields the engine doesn't fill. The real form has
#candidate-location(label "Location (City)*") and#country, bothrole=combobox/aria-autocomplete=list/aria-required=true.GreenhouseApplyEnginefills first/last/email/phone only, so these two required fields are left for the user — the app can't complete a modern Greenhouse application without them. Filling them needs the type-then-pick-from-list combobox mechanic (the app has an equivalent for Workday dropdowns and the phone country widget). Deliberately NOT auto-implemented here: it's a new capability, and it can't be validated autonomously without typing into / submitting a real application (which the build never does). Tracked as a follow-up with the exact field ids above. -
Minor — the
#submit_appprimary submit selector is stale on modern Greenhouse. The real submit is<button>Submit application</button>with no id; thebutton[type='submit']fallback inSubmitCssChaincatches it, and the engine never auto-clicks submit anyway, so this is cosmetic (the primary just never hits on new tenants).
Verdict¶
Greenhouse core-field selectors are correct against a real modern tenant — no fix needed (unlike Workday, whose contact selectors were genuinely broken). The one substantive gap is the unfilled required Location/Country comboboxes, filed as a follow-up.