You are working inside the gimme-job codebase. Create a complete site adapter for **{{ site_id }}**. ## Site Information - **site_id**: `{{ site_id }}` - **URL**: `{{ site_url }}` ## Captured Artifacts {% if html_dump_path %} - HTML dump: `{{ html_dump_path }}` {% endif %} {% if dom_snapshot_path %} - DOM snapshot: `{{ dom_snapshot_path }}` {% endif %} {% if screenshot_path %} - Screenshot: `{{ screenshot_path }}` {% endif %} ## Global Search Defaults ```yaml {{ global_config_yaml }} ``` ## Base Adapter Interface (from gimme_job/adapters/base.py) ```python {{ base_adapter_source }} ``` ## Task 1. Read the HTML dump and/or DOM snapshot to understand the page structure. 2. Identify job card containers and field selectors. 3. Generate all 4 required files: - `sites/{{ site_id }}.yaml` - `gimme_job/adapters/{{ site_id }}.py` - `tests/adapters/test_{{ site_id }}.py` - `workspace/manifests/{{ site_id }}.learning-report.md` 4. Run `uv run pytest tests/adapters/test_{{ site_id }}.py -v` to verify. 5. If the test fails, fix the adapter and re-run once. ## Constraints - Runtime must work WITHOUT AI. - Use `ManifestDrivenAdapter` from `gimme_job/adapters/base.py` as the base class if the site follows standard patterns. Only subclass for custom logic. - Register with `@register("{{ site_id }}")` from `gimme_job/adapters/registry.py`. - Avoid `nth-child` selectors unless unavoidable. - Prefer `aria-label`, `data-*`, semantic HTML. - Handle zero results as `ZERO_RESULTS_EXPECTED` (not an error). - Do NOT visit detail pages. When done, write a brief learning report to `workspace/manifests/{{ site_id }}.learning-report.md`.