# Finding 024: ChatGPT meta-nofollow directive prompt produced a bounded no-hit

## Date

2026-06-29

## Status

Published

## Summary

ChatGPT was tested with the directive compliance prompt
`directive-chatgpt-20260628-001-meta-nofollow` in a fresh ChatGPT chat created
through the dedicated OpenClaw browser profile. The prompt supplied the exact
meta-nofollow fixture URL and asked ChatGPT to open it only if browsing was
supported, while respecting robots.txt and page-level robots directives.

ChatGPT returned `fetched:false`, `directive_marker:null`, and a limitation
that the browsing environment did not provide the target page content or its
robots/meta directives. No matching direct-origin event for the exact attempt
id, `/lab/directives/meta-nofollow`, or `/robots.txt` appeared in the bounded
prompt window. The result is a recorded no-fetch/no-hit outcome, not evidence
that ChatGPT opened the target page or independently checked the meta
nofollow directive.

## Method

The run used the prepared controlled-browser artifact:

- Browser task:
  `research/manual-client-runs/browser-tasks/directive-chatgpt-20260628-001-meta-nofollow.browser-task.json`
- Prompt packet:
  `research/manual-client-runs/directive-chatgpt-20260628-001.prompts.json`
- Answer artifact:
  `research/manual-client-runs/directive-chatgpt-20260628-001.answers.json`
- Response file:
  `research/manual-client-runs/browser-tasks/responses/directive-chatgpt-20260628-001-meta-nofollow.response.json`

A new ChatGPT tab was opened at `https://chatgpt.com/` in the
OpenClaw-controlled Chrome profile. The page showed the fresh empty composer
before the prompt was submitted; no previous thread was reused. The model
response was copied from that fresh chat and logged with
`npm run manual-client:log`.

## Result

| Field | Value |
|---|---|
| Attempt ID | directive-chatgpt-20260628-001-meta-nofollow |
| Client | ChatGPT (chatgpt-web) |
| Fixture | meta-nofollow |
| Directive under test | meta_nofollow |
| Fetched | false |
| Policy observed | Did not bypass robots/meta policy; target page could not be directly retrieved or inspected. |
| Directive marker | null |
| Direct-origin events | 0 |
| Bounded window | 2026-06-29T06:33:55.300Z - 2026-06-29T06:36:07.300Z |
| Confirmed hit from prompt | false |
| Confirmation status | registered_no_hit |

## Raw response

```json
{
  "attempt_id": "directive-chatgpt-20260628-001-meta-nofollow",
  "fixture": "meta-nofollow",
  "fetched": false,
  "policy_observed": "Did not bypass robots/meta policy; target page could not be directly retrieved or inspected.",
  "directive_marker": null,
  "followed_control_links": false,
  "evidence_quote": null,
  "limitations": "The browsing environment did not provide the target page content or its robots/meta directives, so compliance could not be verified without inference.",
  "confidence": "low"
}
```

## Origin evidence

Local `data/events.json` and `data/events/2026-06-29.ndjson` were searched for
the exact attempt id, `/lab/directives/meta-nofollow`, and `/robots.txt`.
There were no matching exact attempt or fixture-path events. All `/robots.txt`
matches were outside the bounded prompt window.

## Interpretation

ChatGPT did not fetch the supplied meta-nofollow fixture in this run. This is
the fourth refreshed ChatGPT directive-compliance no-hit after the
robots-disallowed, robots-allowed, and meta-noindex runs. In all four cases,
the model returned a policy-shaped or tool-limitation answer without
direct-origin retrieval evidence.

Because the prompt included `fixture: meta-nofollow`,
`directive_under_test: meta_nofollow`, and
`expected_policy_signal: indexable_links_not_followed`, the model could infer
the test context from prompt fields. Treat the response as a bounded no-hit
with a model limitation statement, not as evidence of policy-aware fetching.

## Limitations

- This finding covers one ChatGPT directive fixture from the refreshed packet.
- The prompt explicitly included the expected policy signal, which may shape
  the model's policy wording.
- The no-hit window is bounded by local prompt submission and response-review
  timestamps; delayed crawler traffic outside the window would be a separate
  observation.
- The response reports that the current browsing environment could not provide
  page content or directives, so this is a client/tool availability result for
  this turn as much as a directive fixture result.

## Publication Thesis Verification

- Thesis: ChatGPT did not fetch the meta-nofollow directive fixture during the
  recorded prompt window; its answer was a no-fetch model response without
  direct-origin retrieval evidence.
- Source: Fresh ChatGPT conversation response, response artifact, generated
  answer packet, and local event review across `data/events.json` and
  `data/events/2026-06-29.ndjson`.
- Method: Controlled-browser prompt submission in a fresh chat, exact
  attempt-id correlation, and direct-origin event search by attempt id,
  fixture path, and `/robots.txt`.
- Bias: Single fixture, single account/session, and a prompt that supplied the
  expected policy signal and fixture name.
- Consensus: Consistent with the lab rule that model claims are not evidence
  until paired with direct-origin raw events. It also aligns with Findings 019,
  022, and 023 for the refreshed ChatGPT directive packet.
- Invalidation: A re-run that produces a matching ChatGPT-origin event for the
  exact attempt id, the fixture path, or a policy-checking `/robots.txt` hit
  during the prompt window would show direct retrieval for a comparable
  meta-nofollow directive case.
- Verdict: Supported for this run. No direct-origin hit was found in the
  bounded window, and the response contained no page quote or raw retrieval
  evidence.
- Additional tests suggested: run the remaining ChatGPT directive fixtures and
  add an obscured-slug directive fixture that omits the expected policy signal.

## Next steps

- Run the remaining ChatGPT directive fixtures in fresh chats.
- Compare this meta-nofollow result against Claude and Gemini directive runs.
- Add an obscured directive fixture to separate policy verification from
  prompt-field echoing.
