| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .. | ||
| appeal_reverses.d0.sor.json | ||
| notice_and_decision.d1.sor.json | ||
| notice_and_decision.d2.sor.json | ||
| notice_and_decision.d3.sor.json | ||
| premoderated_chat.d1.sor.json | ||
| premoderated_chat.d2.sor.json | ||
| README.md | ||
| redacted_segment.d0.sor.json | ||
| redaction_reversed.d0.sor.json | ||
| unexplained_gap.d1.sor.json | ||
| unexplained_gap.d2.sor.json | ||
| vectors.json | ||
live-conformance/moderation — live moderation
The corpus of extensions/live-moderation.md §11:
rooms under review policies, each a room (its WRD1 descriptor, WRG1 grants, key-log head
or none, and each principal's WEV1 chain), its WMP1 review policies, its WMN1 notices
and complaints, and the media objects under moderation; the decisions in its chains with
their WMS1 statements; what a verifier states of them; each restricting decision's
statement-of-reasons export, byte for byte; and clips of a redacted take.
Moderation equivalence. For each room vector, a conforming moderation verifier given its
descriptor, grants, key_log, chains, policies, notices and objects (§7.1)
reaches the outcome the vector states (§7.5):
refuse: thereasonand where,at:["room", …]with the room verifier's own place (live-rooms §9.1),["policy", i],["notice", i], or["record", c, i]for recordiof chainc;acceptorgap: theroom_outcome(acceptorgap); thegapsthat remain, eachprincipal,firstandlast; theexplainedgaps (§7.3), each with thedecisionswithholding its seqs fromfirsttolast; thedecisions(§7.5), each itsdigest,decider,t,target,target_type,verdict,reason,statement(known,noneorunknown),basis(own,notice,complaint,fallback, ornullfor an unknown statement),supersedes,noticeand whether it isstanding; theitems(§6), each itsdigest,target_type,kind(an event kind or a media kind),t,entry(mode,deadline_ms,fallback) ornull, and itstimeline, each entry'st,state,decisionand whether the state isvisible; and theexports: for each decision, thefileholding its record,nullfor an allow, orrefusesor_incompletewith themember§9.8 names.
Each export file, NAME.dK.sor.json, is the record of decision K of vector NAME, exactly
the bytes §9.2 writes, with no trailing newline.
Clip equivalence. For each clip, a conforming verifier of a clip under moderation (§8.3),
given its descriptor, record and parts (as live-recording's corpus gives them) and the
standing restrictions of the room vector its room names, reaches the outcome the clip
states: refuse with the reason and at (live-recording's places), or accept with the
record's digest clip, its signer, window, bound_us, and the facts of each part as
live-recording states them (without the FETCH address) and the part's withheld chunks, each
its index and the decision that restricts it.
A verifier that reaches another outcome, reason, place, decision, state, export byte or fact does not conform.
Provenance. Generated here: wai_live_moderation_vectors gen writes every file from rooms
authored in code, from fixed seeds. Each chat room principal's key is SHA-256 of a fixed label
and the principal's index; every time is a constant (the rooms' t0 is 2026-10-16T00:00:00Z);
every text is written for the corpus in English; the phone number is of a reserved fictional
range; every origin, address and link is an .example name (RFC 2606); and Ed25519 signing is
deterministic (RFC 8032), so every file is the same bytes on every machine. The recorded take
is live-recording's lesson session, written by that corpus's own rules (../recordings/),
so its room, chains, commitments and chunks are that corpus's byte for byte; this corpus adds
the director's decisions to the director's chain, and the performer's complaint. The
generator asserts that each vector reaches the outcome it was written to have, and that the
corpus gives every reason of §10, before it writes. No recorded data. The legal provisions
the vocabulary cites are cited by identifier, as examples of a room's vocabulary; nothing in
the corpus states that any content is or is not lawful.
Layout
vectors.json:categories(§9.5, informative),principalsandlesson_principals(the keys, by name, informative),vectorsandclips.NAME.dK.sor.json: the exports.
The rooms:
premoderated_chat: a chat room whose descriptor holds chat for review five seconds and then denies it; a first policy names a reviewer, a trusted flagger and the vocabulary, and a second, from 20 s, also reviews reactions after delivery with a fallback of hold. One message allowed before its deadline, one denied with automated detection, one past its deadline taking the fallback, which the clock signs; a reaction held at its deadline; a message allowed by a decision without a statement; a host's message, not reviewed.subscriber_view: the same room as a subscriber that is not a reviewer receives it: the denied message and the fallback's are withheld, and the gap they leave is explained.unexplained_gap: the same room with the allowed message withheld: a delivery gap.notice_and_decision: an allowed message, a notice that it is illegal, and the decision that answers it (SOURCE_ARTICLE_16); a message the fallback denied, a trusted flagger's notice, and the redaction that answers it (SOURCE_TRUSTED_FLAGGER).appeal_reverses: a denial with automated means, its author's complaint, and the decision on the complaint that allows the message.redacted_segmentandredaction_reversed: live-recording's lesson session with its video reviewed after delivery; the director redacts chunk 3 of the performer's take, and in the second the performer complains and the director restores it.- refused, one defect each:
not_moderator(refused by the room,kind_not_permitted),policy_malformed,policy_unlinked,policy_conflicts_room,policy_bad_signature,policy_wrong_room,notice_malformed,notice_bad_signature,statement_misplaced,statement_malformed,reason_not_in_policy,target_unknown,target_not_decidable,target_prev_mismatch,not_reviewer,supersede_gap,supersede_unknown,supersede_mismatch,notice_unknown,notice_mismatch,fallback_not_in_policyandfallback_early; sor_incomplete: a denial whose statement states no facts, accepted, its export refused.
The clips, chunks 2 to 5 of the performer's take: clip_withheld and
clip_trimmed_withheld (a byte range from inside the redacted chunk) withhold chunk 3;
clip_redaction_not_applied gives its bytes; after the appeal, clip_restored_missing
leaves it out and clip_restored_whole presents it.
Running
cd ../../wai-rs
cargo run --no-default-features --features live_moderation --bin wai_live_moderation_vectors -- verify ../live-conformance/moderation
cargo run --no-default-features --features live_moderation --bin wai_live_moderation_vectors -- gen ../live-conformance/moderation # regenerate
cargo test --no-default-features --features live_moderation --test live_moderation
cd ../live-conformance
python3 -I live_moderation_verify.py moderation
wai_live_moderation_vectors verify and tests/live_moderation.rs require every file to
regenerate byte for byte, no other file but this one to be there, and wai-rs to give every
case its outcome; the test also requires §10 to list exactly the reasons the reference
reports, and the generator that the corpus gives each of them. live_moderation_verify.py is
the second implementation, written from the extension's text and sharing no code with
wai-rs: it verifies each room with live_rooms_verify.py and each clip with
live_record_verify.py, writes every export itself, reads §9.5, §9.6 and §10 from the
extension, gives every case the same outcome, requires every reason of §10 to appear, and
then mutates copies of the corpus, one defect each, each of which must fail. Pass = an exit
status of 0 from each.