Evidence and submission
Some labs ask you to submit what you found — this page covers turning it into evidence the platform can grade.
Many labs need no submissionPlenty of labs detect success automatically from your session, with no submit box to touch — see how grading works. This page is about the labs that do ask you to submit evidence.
What counts as evidence
Evidence is the thing itself, not a description of how you got it. For an offensive objective, that's the extracted value — the VIP coupon, a leaked system prompt, a canary token proving data left the app. For a defensive objective, it's the artifact you built to remove the flaw: a rewritten system prompt, a tightened guardrail config, the corrected line of application code.
| Evidence type | Example |
|---|---|
| Extracted value | STORE_COUPON=SUMMER30-VIP |
| Defensive artifact | The patched system prompt or guardrail rule |
We never grade a write-up. "I pretended to be an admin and it told me" isn't evidence. The coupon itself is.
Submitting from a lab
Every lab has a submission panel docked alongside the target. Paste the value or artifact into the field, check it against what the target actually returned, and edit it before you finalise. The field isn't locked the moment you paste. Strip any quoting or formatting the target wrapped around it first — the checker compares the value, not the markdown around it.
POST /api/labs/{lab_id}/submit { "evidence": "STORE_COUPON=SUMMER30-VIP" } 200 { "band": "objective met" }
What the checker does
Three kinds of check run behind that endpoint. An exact match compares your value against the seeded answer, character for character. Canary-token validation confirms a minted token was actually returned or triggered, not just typed into the box. For open-ended work, a semantic judge reads your evidence against the objective's intent. All three roll up into the same result — see how grading works for the bands.
After you submit
Grading runs server-side and returns immediately: a band — objective met, partial, or not met, see how grading works for what decides each one — plus feedback text explaining what tipped the result. Every submission you make for a lab is kept in that lab's history, so you can revisit a past attempt or compare it with your current one.
Common rejections
Most rejections trace back to one of three things.
- A truncated value. Part of a long token or coupon code got cut off in the copy.
- A secret from an expired session seed. The value is real, just minted by a session that no longer exists. See live targets for why a new session resets it.
- A paraphrase judged non-substantive. Restating the objective, or describing your approach, isn't the artifact the judge is scoring for.
Copy, don't retypeCopy the value straight out of the target's response. Retyping a long token by hand is the most common way to trigger a truncated-value rejection.