Upgrade Group canisters to 2.0.2014
GitHub commit
https://github.com/open-chat-labs/open-chat/commit/f5996408adf83356b3f71251429c2487da84c0c3
Changelog
Description
This release brings the group canister up to date with the redesigned moderation system described in the trust and safety blog post, matching the Community release (2.0.2013) and completing the receiving side of the pipeline already released in the UserIndex, LocalUserIndex and storage canisters.
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.1989, 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_undeleteandc2c_moderation_hard_deleteso verdicts can restore or permanently remove auto-sanctioned messages (#9119)- Escalate classifier moderation referrals to the user_index for human review (#9119)
c2c_flag_messageendpoint 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_flagson messages, andmoderation_flagsin the public group summary (#9089, #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_messagecan 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_deletedeletes a message which was not already soft-deleted rather than reporting success while the content is still live (#9119)- 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.2014 085ccc7a2a0beaa2d10eea2bd7bb9d9841e8409b9cd6b85aad989c0022e0e7c0
Proposal to execute nervous system function:
Nervous system function:
NervousSystemFunction { id: 2001, name: "Upgrade group canisters", description: Some( "This will upload the given WASM to the group_index which will in turn call c2c_upgrade_group_canister_wasm on the local_group_index on each subnet. These will each trigger a rolling upgrade of group canisters on their subnet.", ), function_type: Some( GenericNervousSystemFunction( GenericNervousSystemFunction { target_canister_id: Some( 4ijyc-kiaaa-aaaaf-aaaja-cai, ), target_method_name: Some( "upgrade_group_canister_wasm", ), validator_canister_id: Some( 4ijyc-kiaaa-aaaaf-aaaja-cai, ), validator_method_name: Some( "upgrade_group_canister_wasm_validate", ), topic: Some( DappCanisterManagement, ), }, ), ), }
Payload sha256:
aad38b452fe758449377a67abdfc3ad16e345ca6f1b467f6c66bfe4d0c50f809
Payload:
{ "version": { "major": 2, "minor": 0, "patch": 2014 }, "wasm_hash": "085ccc7a2a0beaa2d10eea2bd7bb9d9841e8409b9cd6b85aad989c0022e0e7c0", "filter": null }