# Finding 003: Per-Model OpenRouter Probe Attribution

## Summary

The OpenRouter probe runner now uses one unique lab URL per model attempt instead
of one shared URL for the whole run. This makes any future origin hit
attributable to a specific model attempt at higher confidence.

## Test Setup

- Run artifact: `research/openrouter-runs/or-run-mqr3657r.json`
- Public lab URL: `http://ai-crawler-lab.kaistone.ai:8787/`
- Runner: `npm run openrouter:probe -- --wait-ms 10000 --poll-ms 2000 --max-tokens 220`
- Models:
  - `openai/gpt-oss-20b:free`
  - `google/gemma-4-26b-a4b-it:free`
  - `meta-llama/llama-3.3-70b-instruct:free`

## Observation

Each model received a distinct URL containing:

- `test_id`
- `test_kind=openrouter_probe`
- `surface=openrouter`
- `run_id`
- `model_id`

The run recorded:

- Estimated cost: `$0`
- Matching structured lab hits: `0`
- Two models explicitly reported no live fetch capability.
- One model returned a provider `429`.

## Interpretation

This run is negative evidence for live URL fetching through these exact
OpenRouter free-model API paths, endpoint conditions, and wait window. It is not
evidence that the underlying companies or models never crawl or fetch URLs in
other product surfaces.

## Confidence

- Attribution design confidence: high. A future hit with the per-model
  structured `test_id`/`model_id` fields can be tied to that model attempt.
- Negative-result confidence: moderate. The wait window was short and the public
  endpoint is raw HTTP on port `8787`, which some systems may refuse or defer.

## Next Step

Run the same per-attempt design against search-capable paid models with a longer
wait window, and compare results against direct assistant surfaces that are known
to fetch web pages.
