Operator tooling for viewer-evidence coverage gaps in priv/support_matrix.json.
Each viewer row has one of three status values:
supported— promotion-complete row withevidence,recorded_at, andviewer_kindon the matrix (legacy rows withoutevidence:still list as supported but warn duringvalidate).unverified— recording obligation not satisfied; noevidence:orevidence_deferred.explicit_deferral— matrix-only deferral with requiredevidence_deferredprose; must not carry promotion keys.
Subcommands
mix rendro.viewer_evidence list [--json]
mix rendro.viewer_evidence missing [--json]
mix rendro.viewer_evidence validate [--strict]
mix rendro.viewer_evidence record <surface> <viewer> [--fixture PATH] [--recorded-by ID]Supported automated recordings:
mix rendro.viewer_evidence record forms chrome_pdfium
mix rendro.viewer_evidence record forms apple_preview
mix rendro.viewer_evidence record forms adobe_acrobat_reader
mix rendro.viewer_evidence record embedded_files adobe_acrobat_reader
mix rendro.viewer_evidence record links adobe_acrobat_reader
mix rendro.viewer_evidence record links apple_preview
mix rendro.viewer_evidence record protection apple_preview
mix rendro.viewer_evidence record protection adobe_acrobat_reader
mix rendro.viewer_evidence record signature_widget chrome_pdfium
mix rendro.viewer_evidence record signature_widget adobe_acrobat_reader
mix rendro.viewer_evidence record signature_widget apple_preview
mix rendro.viewer_evidence record signed_artifact chrome_pdfium
mix rendro.viewer_evidence record signed_artifact adobe_acrobat_reader
mix rendro.viewer_evidence record signing_preparation adobe_acrobat_reader
mix rendro.viewer_evidence record long_lived_signed_artifact adobe_acrobat_readerlist prints summary counts and a fixed-width table (surface, viewer,
status, notes) sorted by surface then viewer. missing filters to
status == "unverified" only. --json emits {"summary": {...}, "cells": [...]}
on stdout only; errors go to stderr.
Evidence files live under priv/viewer_evidence/<surface>/<viewer>.md with a
per-file byte budget of 65_536 bytes (byte_size/1 on disk).
Exit codes (D-22)
list— 0 when the matrix parses successfully.missing— 1 when anyunverifiedcell exists; 0 when none.validate— 1 on Tier-A schema errors, evidence-file failures, or orphan scans; 0 when only Tier-B legacy-supported warnings and/or staleness warnings (180 days) remain. With--strict, staleness warnings (180 days) are fatal — 1 when anysupportedrow is stale; 0 when dates are current. Operator/release use only; not part ofmix ci.
CI enforcement
Merge-blocking checks run through mix docs.contract (eighth lane:
test/docs_contract/viewer_evidence_claims_test.exs). This task is not part
of the mix ci alias in Phase 68 — use it locally before recording promotions.
Human workflow guide: guides/viewer_evidence.md.