captchaforge 0.2.39

Captcha detection and solving for Firefox and BiDi-driven browsers. Detection, vendor solver scaffolding, trusted cross-origin click delivery into nested OOPIFs, and stealth personas are implemented and tested; broad live-vendor solve rates are not yet benchmarked.
Documentation
name: Driver Matrix

# Runs the captchaforge solver chain against multiple Rust browser
# drivers (chromiumoxide, playwright-rs, fantoccini, headless_chrome)
# to surface per-driver behaviour deltas. A regression in any driver
# usually indicates a CDP-API drift the driver hasn't tracked yet.
#
# Triggers: nightly + manual.

on:
  schedule:
    - cron: "0 8 * * *"   # 08:00 UTC nightly
  workflow_dispatch:

permissions:
  contents: read

jobs:
  driver-matrix:
    strategy:
      fail-fast: false
      matrix:
        driver:
          - chromiumoxide
          - playwright-rs
          - fantoccini
          - headless_chrome
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Install Chrome
        run: |
          sudo apt-get update
          sudo apt-get install -y google-chrome-stable
      - name: Build adapter for ${{ matrix.driver }}
        run: |
          # Each driver lives under tests/driver_adapters/<name>/ as
          # a separate cargo binary that drives the same fixture set
          # through a different driver. The binary exits 0 on parity
          # with the chromiumoxide reference; non-zero on drift.
          cargo build --release --bin driver-adapter-${{ matrix.driver }} || \
            echo "driver-adapter for ${{ matrix.driver }} not yet implemented, skipping"
      - name: Run ${{ matrix.driver }} parity
        run: |
          if [ -x target/release/driver-adapter-${{ matrix.driver }} ]; then
            ./target/release/driver-adapter-${{ matrix.driver }}
          else
            echo "::warning::driver-adapter for ${{ matrix.driver }} not yet implemented"
          fi