captchaforge 0.2.36

[DO NOT USE — UNDER ACTIVE DEVELOPMENT, NOT PRODUCTION-READY] Captcha solver scaffolding for chromiumoxide-driven browsers. The architecture is in place (vendor solvers, retry-loop iframe walking, VLM provider abstraction, real-WAF bench harness) but the live-vendor success rate is still 0% — Cloudflare Turnstile / hCaptcha / reCAPTCHA detect us at a TLS / CDP fingerprint layer that no flag-based stealth has cleared. Watch the repo; do not depend on this for any real workload.
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