Deploying 10 targeted fixes across easy-apply.ts, linkedin-adapter.ts, and submit.ts will achieve 95%+ LinkedIn Easy Apply success rate
HypothesisDeploying 10 targeted fixes across easy-apply.ts, linkedin-adapter.ts, and submit.ts will achieve 95%+ LinkedIn Easy Apply success rate
6/6 = 100% after select fix deployed. 9/13 total for the day (3/7 before fixes, 6/6 after). From Run 1 (40%) to Run 10 (100%) = 150% relative improvement across 10 iterations.
Changelog
| Date | Summary |
|---|---|
| 2026-04-06 | Audited: domain tag career added, last_audited stamped |
| 2026-04-03 | Added ratchet convergence chart (TS, eval: 8.63) |
Hypothesis

Deploying 10 targeted fixes across three files (easy-apply.ts, linkedin-adapter.ts, submit.ts) will push the LinkedIn Easy Apply success rate above the 95% target. The fixes address every failure pattern observed across Runs 7-9: select placeholder detection, autocomplete validation errors, stuck form navigation, verification timing, and safety pacing. If the ratchet hypothesis holds, eliminating all known failure patterns should yield near-perfect success.
Method

10 fixes deployed in a single batch on 2026-04-02 across three files:
easy-apply.ts (8 fixes): maxSteps 10→15; stuck-cycle recovery (when sameButtonCount >= 2, call _fillEmptyRequiredFields()); resume radio auto-select; CDP select placeholder fix (value !== "" → selectedIndex <= 0, catching the Databricks/Pyspark root cause); 20+ tech pattern expansion (Databricks, Snowflake, Pyspark, dbt, Airflow, Kafka, Spark, Kubernetes, etc.); select fallback to last/highest option when no pattern matches; autocomplete ArrowDown+Enter for city/location/school fields to prevent “valid answer” errors; _fillEmptyRequiredFields made public for cross-class access.
linkedin-adapter.ts (2 fixes): scroll modal to bottom before submit (Strategy 0); verification changed from single 5s wait to 3-retry progressive waits (7s, 3s, 5s) checking toast, modal-closed, and CDP “Applied” badge.
submit.ts (1 fix): safety rail reduced 15min→7min. Sufficient human-like pacing; doubles potential throughput per session.
Results
Run 10 results on 2026-04-02:
LinkedIn Easy Apply submission rate across 8 iterations (composite eval: 8.63)
- 6/6 = 100% after fixes deployed (14:30 onwards)
- 3/7 = 43% before fixes (morning cycle, pre-deployment)
- 9/13 = 69% total for the day (combining pre-fix and post-fix)
The CDP select placeholder fix (selectedIndex <= 0) was the single most impactful change, directly resolving the Databricks/Pyspark dropdown failure from Run 9 and preventing similar failures on other technology dropdowns.
Full ratchet progression across 10 runs:
| Run | Date | Rate | Key Fix |
|---|---|---|---|
| 1-2 | 2026-03-15 | 40% (4/10) | F30-F32: Safety dialog, review button, domain dropdowns |
| 3 | 2026-03-22 | 0/0 | No LinkedIn attempts (Greenhouse/Direct focus) |
| 4 | 2026-03-23 | 42% (5/12) | F33-F34: Multi-checkbox, select event dispatch |
| 5 | 2026-03-25 | 29% (18/62) | F35-F38: Session recovery, timeouts, modal detection |
| 6 | 2026-03-25 | Restricted | Account restriction; anti-detection suite deployed |
| 7 | 2026-03-29 | 83% (5/6) | F39: Click-and-verify loop |
| 8 | 2026-04-01 | Deployed | F40-F42: Scroll, verification, checkbox/textarea |
| 9 | 2026-04-02 | 67% (2/3) | Proactive scroll, CDP select detection (diagnostic) |
| 10 | 2026-04-02 | 100% (6/6) | 10-fix batch: select placeholder, autocomplete, stuck recovery |
Findings

-
The Karpathy ratchet works. 40% to 100% across 10 iterations, each fixing the top failure and re-measuring. Progression was non-monotonic (Run 5 dropped to 29% under volume; Run 6 was a restriction) but the trend is unmistakable.
-
Failures form layers. Click-level failures (Runs 1-7) masked form-level failures (Run 8), which masked field-level failures (Runs 9-10). Complex multi-step systems work this way: the first failure in the chain hides everything downstream.
-
selectedIndex <= 0is the highest-impact fix of the series.value !== ""was broken because LinkedIn placeholder options can have non-empty values.selectedIndexis a DOM-state signal that cannot be gamed by option attribute choices. -
Stuck recovery is a meta-pattern.
sameButtonCount >= 2+_fillEmptyRequiredFields()catches any unresolved required field regardless of cause. General-purpose safety net that reduces the need for failure-specific fixes. -
Batch deployment works when fixes are orthogonal. All 10 targets had independent failure modes. The 43%-to-100% jump is unambiguous collective evidence; per-fix attribution is traceable to prior run diagnostics.
Next Steps

With LinkedIn Easy Apply at 100%, the focus shifts to:
- Sustaining the rate: Monitor over the next 5+ runs to confirm 95%+ is maintained, not a lucky streak. The 6-submission sample size is small.
- New channels: Lever (25 boards configured, adapter ready) and Workday (10 portals configured) are next in the pipeline. Apply the same ratchet methodology.
- Screening answer quality (F10): The current heuristic-based answers work for common patterns but produce generic responses for complex domain questions. Routing to an LLM for nuanced screening answers is the next quality frontier.
- Interview conversion: 118+ LinkedIn submissions with no measured interview signal from LinkedIn messages. The Gmail crawl pipeline (deployed 2026-03-31) is now the primary measurement layer.