packages/builtin-skills/src/acceptance/references/evidence.md
This reference defines the artifact contract shared by every surface. Capture commands belong to the selected surface guide; do not load another surface's instructions merely to learn how to submit an artifact.
| Type | Use when |
|---|---|
text | Command output, logs, focused request/response data, or computed assertions prove the criterion |
markdown | Reviewer-facing prose (a reasoning write-up, structured findings) should render as body text |
dom_snapshot | Structured content is stronger and smaller than pixels |
screenshot | A settled visual state, layout, or native rendering is the claim |
gif | A short temporal state should render inline, usually no more than about 10 seconds |
video | A longer animation, transition, gesture, or multi-step flow needs a player and better compression |
audio | The deliverable is something the user hears — TTS output, a voice reply, an alert tone |
transcript | A conversation, event stream, or request log is itself the proof |
The declared requiredEvidence type is binding. Do not replace a required video
with a final screenshot or a required DOM snapshot with prose.
A sound cannot be verified in prose, and a waveform screenshot proves only that
a file exists. Upload the clip itself with --type audio and the acceptance
page gives the reviewer a player.
# The generated file is the evidence — attach the artifact the feature produced,
# not a re-encode and not a screenshot of the player.
lh acceptance run result submit --operation "$LOBE_OPERATION_ID" --item "$CHECK_ITEM_ID" \
--type audio --file ./out/tts-zh-female.mp3 --by program \
--desc "TTS output for 「今天天气不错」, zh-CN female voice, 2.4s"
mp3 / wav / m4a / aac / flac / ogg / opus are recognized by
extension, so acceptance run ingest types them as audio automatically.text artifact when the claim is about what was
said (the input text, the voice/model, the measured duration). The player
proves it plays; the text artifact makes it auditable.CLI, API, backend, policy, security, and migration claims normally need two
separate text artifacts on the same check:
Keep both artifacts in the current immutable round. Do not ask a reviewer to join an explanation from an older round with fresh execution output.
--file for binary artifacts and larger text/DOM/transcript files.--content for short text assertions. Pass exactly one of --file and
--content.# File artifact captured by the selected surface.
lh acceptance run result submit --operation "$LOBE_OPERATION_ID" --item "$CHECK_ITEM_ID" \
--type "$EVIDENCE_TYPE" --file "$ARTIFACT_PATH" --by "$PROVENANCE" \
--desc "Observed state after the planned action"
# Short text assertion.
lh acceptance run result submit --operation "$LOBE_OPERATION_ID" --item "$CHECK_ITEM_ID" \
--type text --content "$ASSERTION_OUTPUT" --by cli \
--desc "Machine-readable assertion output"
--by)Set --by to the producer named by the selected surface guide. Use the direct
capture source for an unmodified artifact and program for a deterministic test,
script, or media transform. Do not infer provenance from the file extension.