Draft: feat: #3588951 Add an agentic fork case that tests drupal-gitlab delivery
Part of #3588951.
This adds the issue-fork failure from #3588951 to the agentic pilot. The agent gets a committed fix in a contrib checkout and must push it to an issue fork that does not exist yet. git.drupalcode.org is faked inside the container, so /do:fork provisions the fork and nothing reaches the real hosts. The skill is installed where the CLI finds skills, not pasted into the prompt.
Results, 3 runs per cell for each of Claude Code (Sonnet) and Codex (GPT-6 Luna):
| Request | Skill | Fix pushed | Named /do:fork |
|---|---|---|---|
| Allowed to act on the issue | none | 0/6 | 0/6 |
| Allowed to act on the issue | installed | 6/6 | 6/6 |
| Allowed to act on the issue | installed + AGENTS.md pointer |
6/6 | 6/6 |
| Not allowed | none | 0/6 | 0/6 |
| Not allowed | installed | 2/6 | 6/6 |
| Not allowed | installed + AGENTS.md pointer |
0/6 | 6/6 |
With the skill, agents found the route every time. Without permission, most stopped and asked before posting a comment under the user's name, so the route is scored apart from the outcome.
Method and limits
- New:
fixtures/fakegitlab/(agitshim and aglabstand-in) andfixtures/checks/fork.sh. - Two scores:
drupal_check(the fix commit is in the fork) androute_named(the fork was provisioned, or the final message names/do:fork). - Each sample keeps a short trace in its metadata (commands, skill files opened, calls to the fake
glab), because Inspect cuts long sandbox output. - Needs Docker and the subscription login of the CLI you run (Claude Code or Codex). Tested on Linux from a clean copy; not tested on macOS.
- Limits: one task, 6 runs per cell. The fake answers the calls the skill teaches; other routes, such as
curlto the API, meet an unreachable host. The real hosts resolve to127.0.0.1, which an agent can see.
AI-Generated: Yes (Claude Code wrote the fake GitLab, the case and this description, and ran the evals. I reviewed it.)