Result of the HOST-owned evidence composer. The app asks for evidence and
receives opaque refs — it never sees the screenshot, the error trace, or the
diagnostics JSON. dismissed is an ordinary outcome, not an error.
failed exists so a broken upload can never wear dismissed's clothes: the
user DID confirm, the host DID try, and the bytes did not land. Collapsing
that into dismissed would make the app tell the user they cancelled
something they did not — the consent-truthfulness rule. An app should offer a
retry on failed and stay silent on dismissed.
Result of the HOST-owned evidence composer. The app asks for evidence and receives opaque refs — it never sees the screenshot, the error trace, or the diagnostics JSON.
dismissedis an ordinary outcome, not an error.failedexists so a broken upload can never weardismissed's clothes: the user DID confirm, the host DID try, and the bytes did not land. Collapsing that intodismissedwould make the app tell the user they cancelled something they did not — the consent-truthfulness rule. An app should offer a retry onfailedand stay silent ondismissed.