# GitLab fork MR proof

Web client, Chromium, 1280 × 800, light theme, fresh scenario database per commit.
Thread turns use Replay (dev). MR title/body generation uses Pi with `openai/gpt-6-luna`.
GitLab requests use the authenticated `glab` CLI and real gitlab.com projects.

Apply `enable-mr-text-generation.patch` to the current scenario runner checkout.
The scenario embeds the synthetic fixture manifest from this run. To recreate fixtures,
run `create-gitlab-fixtures.py` and replace the scenario's `fixture` constant with its JSON output.

Run:

```sh
T3CODE_DEV_SEED=0 \
T3_SCENARIO_INHERIT_ENV='SHELL,NODE_OPTIONS,NODE_EXTRA_CA_CERTS,XAI_API_KEY,PI_*,GLAB_*,GITLAB_*,T3CODE_DEV_SEED' \
vp run scenarios:prove scripts/scenarios/gitlab-fork-create-mr.e2e.ts \
  --base bf9b8b784582d39b3a9712f37ebef852359f0d93 \
  --head 5326e51ec098908ae5533396d9cd596f292c0d65 \
  --upload-command 'ghdrop upload'
```

The same single scenario seeds all three projects before navigating: a plain fork branch,
a renamed fork branch under a nested subgroup, and a same-project control branch. Each has
upstream as origin and both forks as remotes, with its feature branch pushed using `-u` to
its intended remote. It opens each thread by link, clicks Create MR, waits for the result,
and captures it. Assertions check the count, source project ID, and target project ID of
actual MRs returned by GitLab. Existing fixture MRs are closed before each side so the
control can be created again.

No GitLab API or git command is mocked. Fixture projects and MRs are removed after capture.
