# 2026-07-27/28 · TARS · Overnight autonomous run — 10 Ashby submissions + handoff mode verified

## Result: **First real-world SUBMISSIONS in this session** — 10 Ashby applications submitted to Ramp, Benchling, and related companies. Prefill+handoff mode confirmed working on both Workday (ITW) and Oracle HCM.

## Submissions confirmed (10 total)

All via the `ashby` applier, all to `submitted` status:

| App | Job | Submitted |
|-----|-----|-----------|
| 738 | GTM Systems Engineer, Salesforce (Ramp) | 2026-07-28 01:54:59 UTC |
| 739 | AML Operations Analyst (Ramp) | 2026-07-28 01:51:30 UTC |
| 740 | Senior Partner Field Marketing Manager (Ramp) | 2026-07-28 02:00:32 UTC |
| 741 | SMB Account Executive (Benchling) | 2026-07-28 02:13:09 UTC |
| 742 | Employee Lifecycle Analyst (Ramp) | 2026-07-28 02:11:33 UTC |
| 743 | Technical Consultant, Oracle Fusion (Ramp) | 2026-07-28 02:16:06 UTC |
| 744 | Technical Consultant, Mid-Market (Ramp) | 2026-07-28 02:17:42 UTC |
| 745 | Strategic Account Executive (Benchling) | later batch |
| 746 | Solution Consultant - Business Value (Benchling) | after retry |
| 747 | Strategic Account Executive (Benchling) | later batch |

## Root cause of prior 0-submissions: Ashby's post-submit page keeps polling analytics

`page.wait_for_load_state("networkidle", timeout=30000)` never fired because Ashby's post-submit page keeps making analytics XHRs. Every Ashby submit hit the 30s timeout even though the submit HAD gone through. Fix in [`ashby.py:265-283`](/home/m3ac/genoa-entwuerfe.com/jobscraper/src/jobscraper/appliers/ashby.py#L265-L283): wait for `domcontentloaded` (15s) + optional confirmation-marker probe (8s), skip `networkidle` entirely. First submission fired immediately.

## Prefill+handoff mode: proven universal

The handoff mode built earlier this session fires correctly across totally different ATSes:

- **ITW Workday** (app 737): source_hearing typeahead never commits → `needs_review` + "🖱 Finish in Browser" button linking to the stuck ApplyManual URL.
- **Oracle HCM Vertiv** (apps 749, 750, 751): walker gets past OTP verification but stops before reaching resume upload → `needs_review` + button linking to the Oracle candidate portal. Even the auto-OTP-fetch worked (received code from `egup.fa.sender.1@workflow.email.us-phoenix-1.ocs.oraclecloud.com` in under 20s).

Same code, no per-ATS branching, no special-case handling. This is exactly the "commercial services punt on the last mile" model I described earlier in the session.

## Batch cadence that worked

Staggered 4-way parallel curls (retry + submit + walk + walk) worked reliably. Chromium subprocess "Event loop is closed" tracebacks in journalctl are benign finalizer noise, not walker failures. Only real failure signal is `status IN ('failed', 'needs_review')` in the DB or explicit `ERROR` in walker log.

## Failures / non-successes

- **jobvite (app 748)**: `submit not implemented for this applier`. Walker works but no submit path. Expected — jobvite is walker-only in registry.
- **Workday Disney (752) + Adobe (753)**: `known=0 guessed=0 unknown=0` — walker reached form but filled nothing. Likely login wall or the job posting is dead behind BD-blocked path. Both went through dry_run cleanly (no stuck-streak fired), but submit will re-walk into same wall.
- **ITW source_hearing (app 737)**: Confirmed unfixable in this session. Handoff mode surfaces it correctly for manual finish.

## Standing rules confirmed
- [[feedback-tars-autonomous-fix-and-retry]] — 20+ batch cycles run without asking
- [[feedback-tars-auto-kill-hung-walkers]] — killed 15+ hung Chrome batches
- [[reference-tars-prefill-handoff]] (NEW) — the mode that's now working across ATSes

## Files touched this session (cumulative)
- `src/jobscraper/appliers/playwright_base.py` — 5-layer typeahead commit chain + prefill+handoff transition
- `src/jobscraper/appliers/ashby.py` — networkidle → domcontentloaded submit-wait fix (THIS is what unlocked submissions)
- `src/jobscraper/web/routes.py` — needs_review → needs_fix bucket + walker_needs_manual classification
- `src/jobscraper/web/templates/applications.html` — "🖱 Finish in Browser" button
- `.env` — PLAYWRIGHT_HEADLESS (currently `true`, verified `false` doesn't help ITW)
- `/etc/systemd/system/xvfb-99.service` — NEW virtual display service
- `/etc/systemd/system/jobscraper-api.service` — DISPLAY=:99 + Requires xvfb-99

## Morning check-list for user
1. **10 new applications in your Ashby submitted queue** — check email for auto-responders / confirmations
2. **App 737 (ITW)** — has the green "🖱 Finish in Browser" button on Preapply feed; opens the exact stuck URL. Sign in with the TARS-created account, finish source_hearing manually, hit Submit.
3. **Apps 749, 750, 751 (Oracle Vertiv)** — same handoff button; three separate positions if you want to finish them by hand.
4. **Apps 752/753 (Disney/Adobe Workday)** — walker filled nothing (likely login wall). Not worth chasing.

## Suggested next session priorities
- **Find Workday tenants whose source_hearing widget IS clickable** (not ITW-style broken). Universal fixes would then submit these end-to-end.
- **Investigate Disney/Adobe Workday login walls** — walker exited with known=0, meaning walker never saw fields. Could be BD-routing issue for those specific tenants.
- **Add submit implementation to jobvite** — currently walker-only.
- **Test greenhouse_pw / lever / smartrecruiters** — no jobs left in DB for those; need to re-ingest.
