Summary

GitHub commit

https://github.com/open-chat-labs/open-chat/commit/f5996408adf83356b3f71251429c2487da84c0c3

Changelog

Description

This release brings the community canister up to date with the redesigned moderation system described in the trust and safety blog post, completing the receiving side of the pipeline already released in the UserIndex (2.0.2011), LocalUserIndex (2.0.2008) and storage (2.0.2009/2.0.2010) releases.

The moderation machinery in this release is dormant until explicitly enabled by platform-operator actions which are themselves dual-authorized: the classifier is off (no API key is set), no internal moderation channel is configured, and no referral configuration exists. What does take effect immediately is the protective path for human reports: a report which asserts that content is child sexual abuse material deletes the message and quarantines the media in the evidence vault at once — the material is never viewed outside the quarantine framework — while any suspension waits for a human verdict. Quarantined messages are viewable by no one and cannot be user-restored while their report is unresolved.

The release also carries a set of unrelated fixes accumulated since 2.0.1988, including the c2c retry-detection fix and a member-demotion permissions fix.

Added

  • Reports which assert child sexual abuse content quarantine the media and delete the message immediately, while the suspension waits for the human verdict (#9119)
  • c2c_moderation_undelete and c2c_moderation_hard_delete so verdicts can restore or permanently remove auto-sanctioned messages (#9119)
  • Escalate classifier moderation referrals to the user_index for human review (#9119)
  • Post moderation alerts as a structured ModerationReport message type and support status updates (#9095)
  • c2c_send_moderation_report endpoint for posting escalations into the internal moderation channel (#9092)
  • c2c_flag_message endpoint so user_index can flag reported messages (#9092)
  • Notify user_index of CSAM detections for auto-sanction and escalation (#9093)
  • Queue public messages for classification via the local_user_index and store the returned moderation flags (#9091)
  • Per-message moderation flags, exposed as moderation_flags on messages, and moderation_flags in the community summary and summary updates (#9088, #9090)

Changed

  • Quarantined messages (CSAM-flagged, deleted by moderation) are viewable by no one and cannot be user-restored while the report is unresolved (#9119)
  • Include blob references when escalating CSAM detections, for evidence-vault quarantine (#9119)
  • Suspend "verified user" (unique person) gating — the gate is ignored, and is filtered out of composite gates so an OR gate requires another branch (#9061)

Fixed

  • c2c_flag_message can delete the message in the same update, so moderation takedowns can never leave content deleted-but-unflagged; flags which are already set no longer prevent that deletion (#9119)
  • c2c_moderation_hard_delete deletes a message which was not already soft-deleted rather than reporting success while the content is still live (#9119)
  • Only abandon a group import due to a contract violation if the reject code matches too (#9124)
  • Prevent members from demoting others more senior than themselves (#9115)
  • Lock against a user having two gate payments in progress concurrently (#9080)
  • Fix detection of when to retry c2c calls (#9106)

Wasm Verification

Verify that the hash of the gzipped WASM matches the proposed hash.

git fetch
git checkout f5996408adf83356b3f71251429c2487da84c0c3
./scripts/verify-release.sh 2.0.2013 cfcf351f71b2722b9df0297538c3503b7b595eba3d779a664711bb18c643b31a
Payload

Proposal to execute nervous system function:

Nervous system function:

NervousSystemFunction { id: 2005, name: "Upgrade community canisters", description: Some( "This will upload the given WASM to the group_index which will in turn call c2c_upgrade_community_canister_wasm on the local_group_index on each subnet. These will each trigger a rolling upgrade of community canisters on their subnet.", ), function_type: Some( GenericNervousSystemFunction( GenericNervousSystemFunction { target_canister_id: Some( 4ijyc-kiaaa-aaaaf-aaaja-cai, ), target_method_name: Some( "upgrade_community_canister_wasm", ), validator_canister_id: Some( 4ijyc-kiaaa-aaaaf-aaaja-cai, ), validator_method_name: Some( "upgrade_community_canister_wasm_validate", ), topic: Some( DappCanisterManagement, ), }, ), ), }

Payload sha256:

5fed8da8efc5d45f89249393f1173e35d5393f90997beb8246bae66b57f07b56

Payload:

{ "version": { "major": 2, "minor": 0, "patch": 2013 }, "wasm_hash": "cfcf351f71b2722b9df0297538c3503b7b595eba3d779a664711bb18c643b31a", "filter": null }

Overview