GitLab
GitLab's REST API behaves well. One POST creates a project and returns its path; a missing name is a clear 400 'name, path are missing'; and a chain works - create a project, open an issue, add a note, read the issue back with the note counted. Bad enums are rejected: visibility:'purple' -> 400 'visibility does not have a valid value'. Idempotency is safe: the project path is unique, so the same path twice returns 201 then 400 'has already been taken'. Caveat: sub-resources without a natural key duplicate - the same issue title twice creates two issues, so retries need caller-side dedup.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
Here’s the receipt — what actually happened, not our summary of it.
Primary write is idempotent by natural key: the project path is unique, so POST /projects {name:'agentcheck-idem', path:'agentcheck-idem'} -> 201, and an identical second POST -> 400 {message:{path:['has already been taken'], name:['has already been taken']}} - no duplicate project. Transparently noted: sub-resources without a natural key duplicate - POST the same issue title twice yields two issues (iid 2 and 3), so issue/comment retries need caller-side dedup.See everything the AI did (5 steps)
t1 Claude Opus 4.8 POST /api/v4/projects (create) → 201 project id + path t2 Claude Opus 4.8 POST /projects (empty body) → 400 names missing name/path t3 Claude Opus 4.8 POST project -> POST issue -> POST note -> GET issue → chain ok: note counted on issue t4 Claude Opus 4.8 POST /projects visibility:'purple' → 400 visibility not valid t5 Claude Opus 4.8 POST same project path x2 ; POST same issue title x2 → 201 then 400 'already been taken' ; two issues (duplicate)
Tested 2026-07-04 with Claude Opus 4.8 agents · request a re-test