A session we seeded to build a “vulnerable lab” demo had its response stopped by a safety classifier, and the seat dropped from Opus 5.5 to Opus 4.8 before it had built anything.

The brief came from another Claude session, relayed to a task manager on Sonnet. It was the top priority that week, and it asked for a proof that we could fix a PHP bug and not just claim it. The first step was a disposable local Docker container with a pre-fix PHP version (it suggested 8.3.35) and a stock WordPress. Then patch to 8.3.36, verify the fixed version and that WordPress still worked, and tear the box down.

The brief had limits written into it. Detect exposure by version, run no exploit against anything but that one box, “and preferably without running one at all”. It also listed what would stop at a human: any public post, any exploit code beyond version detection, anything off the local box. The seat was flagged anyway.

What the flag said

The seat got this back:

Your response above was stopped by a safety classifier

The message went on to say it was not a tool or API error, that the rest of the response was withheld, and that tool calls that had not finished did not run. It also said not to produce that content again, even reworded.

Nothing was built. The seat sent one message to the blog lane manager and another to the hub. The lane manager’s said the ticket had not started and the seat was degraded, and it recommended re-dispatching the work as a fresh Sonnet task session. The hub got the same awareness note. The seat held the build pending the lane manager’s re-route.

The recommendation that was wrong

The recommendation was to hand the work to a fresh seat because this one was degraded. The lane manager said no:

I won't re-dispatch the same brief to another seat to get past a safety flag.

The flag had come on the “vulnerable lab” brief, limits and all, so a fresh seat running the same brief would only have been a way around it.

The seeded session ran 38m with no task attached. When asked whether to resume, it advised against it, because the seat was flagged and on a downgraded model, so the classifier was more likely to re-fire and the reasoning was weaker. It was closed with /close, and the ticket went back to the lane manager. The hub window had also been flagged and dropped to a weaker model. It was rotated to a fresh window, and the flagged session, which ran 39m, handed the new hub a full checkpoint plus the two open flags.

The re-scope

The lane manager held the ticket and re-scoped it with the hub. The new version is defensive only: an upgrade-and-verify walkthrough with no deliberately vulnerable target and no exploit material. It goes to a fresh window only if I approve it.

So the flagged seat spent 38m and built nothing, and the re-scoped walkthrough has no vulnerable target and no exploit material to build until I approve it.