TgWitness tests

New failures

Commit 3a614fb780cd

Detect secret chats the peer ended

Finished 2026-11-14 08:29 UTC · Linux-6.8.0-147-generic-x86_64-with-glibc2.39 · Python 3.12.3 · tests synced 2026-11-14 08:12 UTC · all runs

Tests
2,255
137 files
Passed
2,178
96.6%
New failures
10
turn the run red
Known failures
32
listed with reasons
Skipped
35
not applicable here
Duration
17 min
one machine

COVERAGE

What the suite checked

Share of tests that passed in each part of TgWitness.

Reports and analysis45 files
763 / 778 · 15 known
Journal, signatures and timestamps31 files
469 / 481 · 12 known
Evidence exports18 files
337 / 338 · 1 known
Panel, API and site18 files
239 / 240 · 1 known
Other4 files
145 / 155 · 10 new
Accounts and sessions15 files
132 / 134 · 2 known
Capture add-on6 files
93 / 94 · 1 known

FAILURES

Failures

Each failure with its error message.

tools/test_proxy_source_settings.py10 new
  • test_invalid_settings_prevent_refresh_before_network
    Error message
    Failed: DID NOT RAISE ValueError
  • test_permission_error_never_restores_enabled_defaults
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[[]]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[\xff]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[null]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[{"countries":"invalid"}]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[{"github":{"enabled":[]}}]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[{"unknown":true}]
    Error message
    Failed: DID NOT RAISE ValueError
  • test_unreadable_settings_never_restore_enabled_defaults[{]
    Error message
    Failed: DID NOT RAISE ValueError
tools/test_verifier_sources.py9 known
  • test_frozen_verification_decisions_are_unchanged

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+2 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[pinned---json]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+3 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[pinned---plain]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+5 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[unmet_tier---json]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+3 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[unmet_tier---plain]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+5 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[unpinned---json]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+3 more lines; full report in element text]
  • test_old_and_new_decisions_and_statuses_match[unpinned---plain]

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+5 more lines; full report in element text]
  • test_old_verifier_accepts_new_archive_with_identical_signed_events

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    assert False
    [+3 more lines; full report in element text]
  • test_review_modules_import_without_application_state

    The verifier's readable answer was shortened (93976cde9): plain output starts with EVIDENCE instead of ASSURANCE, and frozen JSON decisions differ in note wording. Frozen fixtures need regeneration.

    Error message
    AssertionError: assert False
    [+2 more lines; full report in element text]
tools/test_deletion_semantics.py8 known
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[10--1000000000555]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[10-55123]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[15--1000000000555]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[15-55123]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[2--1000000000555]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[2-55123]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[9--1000000000555]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
  • test_deletion_of_subset_keeps_actor_and_whole_history_unknown[9-55123]

    Expects the batch-deletion caveat "does not identify who deleted them, whether deletion applied to all participants…", shortened in 3f5f0fbcb. Pending decision: restore the caveat or update the test.

    Error message
    AssertionError: assert 'does not identify who deleted them' in 'Telegram reported several message IDs as deleted in one update.'
tools/test_case_package.py2 known
  • test_package_contains_readable_report_files_and_explanations[ots]

    Expects the heading "Timestamp receipts (not verified)", renamed in the case package.

    Error message
    assert ('Timestamp receipts (not verified)' in '<!doctype html><html lang="en"><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="default-src ...lank"></span></p><p>Date: <span class="blank"></span></p><p>Place: <span class="blank"></span></p></div></body></html>')
  • test_package_contains_readable_report_files_and_explanations[tsr]

    Expects the heading "Timestamp receipts (not verified)", renamed in the case package.

    Error message
    assert ('Timestamp receipts (not verified)' in '<!doctype html><html lang="en"><meta charset="utf-8"><meta http-equiv="Content-Security-Policy" content="default-src ...lank"></span></p><p>Date: <span class="blank"></span></p><p>Place: <span class="blank"></span></p></div></body></html>')
tools/test_session_import.py2 known
  • test_independent_login_browser[False]

    The sign-in form no longer has the "other sign-in methods" block (.other-sign-in, removed in 3f5f0fbcb); the browser test still follows the old flow.

    Error message
    playwright._impl._errors.TimeoutError: Locator.evaluate: Timeout 30000ms exceeded.
    Call log:
      - waiting for locator(".other-sign-in")
  • test_independent_login_browser[True]

    The sign-in form no longer has the "other sign-in methods" block (.other-sign-in, removed in 3f5f0fbcb); the browser test still follows the old flow.

    Error message
    playwright._impl._errors.TimeoutError: Locator.evaluate: Timeout 30000ms exceeded.
    Call log:
      - waiting for locator(".other-sign-in")
tools/test_verifier_dispatch.py2 known
  • test_direct_check_preserves_policy_and_archive_without_printing[tgwitness.verifier.cli]

    Same frozen verifier decisions as test_verifier_sources.

    Error message
    AssertionError: assert False
    [+2 more lines; full report in element text]
  • test_direct_check_preserves_policy_and_archive_without_printing[tgwitness.verify]

    Same frozen verifier decisions as test_verifier_sources.

    Error message
    AssertionError: assert False
    [+2 more lines; full report in element text]
addons/capture/tests/test_trusted_anchors.py1 known
  • test_cloudflare_queries_are_read_only_scoped_and_token_is_not_exported

    Expects "no proof of continuous presence"; the capture add-on now says "provider state sampled at the polled time".

    Error message
    AssertionError: assert 'no proof of continuous presence' in 'provider state sampled at the polled time'
tools/test_analyzer_graphs.py1 known
  • test_edges_cite_journal_records_across_chosen_chats

    Expects the contact-graph limit "does not mean there was no contact", removed after v0.9.3.

    Error message
    assert False
     +  where False = any(<generator object test_edges_cite_journal_records_across_chosen_chats.<locals>.<genexpr> at 0x7101b5b0b6b0>)
tools/test_analyzer_linking.py1 known
  • test_rotated_account_ranks_first_with_explanation_and_citations

    Expects the account-linking limit "not identification", removed after v0.9.3.

    Error message
    assert False
     +  where False = any(<generator object test_rotated_account_ranks_first_with_explanation_and_citations.<locals>.<genexpr> at 0x7101b638d2f0>)
tools/test_chat_export_integrity.py1 known
  • test_sparse_message_numbers_are_counted_without_expansion

    Missing-number counting now returns (numbers, count) instead of a sized collection; test not yet updated to the new API.

    Error message
    assert 2 == 1999999998
     +  where 2 = len((<tgwitness.message_numbers.MissingNumbers object at 0x7101a37e14c0>, 1))
tools/test_cli.py1 known
  • test_local_commands

    Expects the default workspace name "Main account"; it is now "Main workspace".

    Error message
    AssertionError: assert [{'workspace'...n workspace'}] == [{'workspace'...ain account'}]
      
      At index 0 diff: {'workspace': 'default', 'name': 'Main workspace'} != {'workspace': 'default', 'name': 'Main account'}
      Use -v to get more diff
tools/test_device_attribution.py1 known
  • test_the_dossier_counts_clients_sticker_sets_and_prepared_media

    Expects the wording "Metadata hypothesis about the client that encoded the file"; the dossier now says "Client that encoded the file, read from the file's own metadata".

    Error message
    assert 'Metadata hypothesis about the client that encoded the file' in "Client that encoded the file, read from the file's own metadata. A forwarded or re-uploaded file carries the encoder of whoever made it first."
tools/test_mtproto_forensics.py1 known
  • test_outbox_read_watermark_does_not_identify_a_person

    Expects the caveat that a read watermark does not identify a person, shortened in 3f5f0fbcb.

    Error message
    AssertionError: assert 'does not identify' in 'Observed outgoing read watermark.'
tools/test_verifier_comparison.py1 known
  • test_ots_structure_only_does_not_get_a_positive_indicator[unknown]

    Expects an OTS-structure-only receipt to be labelled unknown; it is now labelled synthetic.

    Error message
    AssertionError: assert 'unknown' in 'synthetic'
tools/test_watchlists.py1 known
  • test_terms_patterns_wallets_usernames_and_domains_are_matched

    Expects the watchlist-hit caveat "nothing about who wrote it", removed after v0.9.3.

    Error message
    assert False
     +  where False = all(<generator object test_terms_patterns_wallets_usernames_and_domains_are_matched.<locals>.<genexpr> at 0x7101b6be35a0>)

FILES

Every test file

Counts and time per file.

FilePassedFailedSkippedSeconds
addons/capture/tests/test_beacon.py3000.1
addons/capture/tests/test_gateway.py11001.0
addons/capture/tests/test_official.py19031.4
addons/capture/tests/test_official_proof.py14004.7
addons/capture/tests/test_trusted.py420112.4
addons/capture/tests/test_trusted_anchors.py4100.3
tools/test_access_label_privacy.py5008.8
tools/test_account_attachment_integrity.py16008.3
tools/test_action_protocol.py9000.6
tools/test_analyzer_graphs.py3101.5
tools/test_analyzer_linking.py2101.5
tools/test_anchor_backoff.py4000.7
tools/test_anchor_temp_files.py1000.9
tools/test_api_authorization_matrix.py2003.3
tools/test_api_refactor.py9004.7
tools/test_archive_token_comparison.py4000.2
tools/test_archive_views.py12008.0
tools/test_assurance_boundaries.py37002.9
tools/test_assurance_chain.py3001.7
tools/test_assurance_ladder.py8000.5
tools/test_audit_logic_repairs.py130015.8
tools/test_audit_platform_fixes.py9003.6
tools/test_auto_delete_classification.py5000.0
tools/test_capture_liveness.py7002.1
tools/test_capture_open.py2000.7
tools/test_case_package.py2200.8
tools/test_channel_graph.py13000.0
tools/test_chat_comparison.py24000.2
tools/test_chat_export_integrity.py15105.9
tools/test_chat_state.py13006.3
tools/test_chat_timeline.py6002.1
tools/test_checkpoint_drand_route.py2001.0
tools/test_cli.py10107.8
tools/test_client_checks.py8001.0
tools/test_client_initialization.py7000.3
tools/test_client_timezone.py15000.0
tools/test_client_transport.py2000.0
tools/test_cloud_refactor.py7000.0
tools/test_conversation.py29005.2
tools/test_court.py3000.0
tools/test_crypto_ids.py11000.0
tools/test_deletion_evidence_reports.py5001.4
tools/test_deletion_semantics.py0805.2
tools/test_device_attribution.py27105.7
tools/test_difference_gaps.py5000.0
tools/test_disclosure_markers.py7009.9
tools/test_distributed_export.py480050.8
tools/test_distributed_pages.py270024.7
tools/test_distributed_takeout.py130010.4
tools/test_documentation.py8002.2
tools/test_documentation_scope.py10003.6
tools/test_download_ticket_quotas.py4001.4
tools/test_dstack_archive_limits.py10000.0
tools/test_ephemeral_media.py770011.9
tools/test_evidence_checks.py6001.0
tools/test_export_archive_name.py4004.6
tools/test_export_budget.py11001.4
tools/test_export_plan.py12001.2
tools/test_exported_authorization.py5000.3
tools/test_extensions.py3001.2
tools/test_file_hash_export.py230013.8
tools/test_fulltext.py250045.4
tools/test_gap_analysis.py14006.0
tools/test_geo_profiles.py121006.2
tools/test_history_backfill.py290052.5
tools/test_independent_report_pdf.py9008.9
tools/test_indicator_limits.py2000.0
tools/test_insights.py3000.8
tools/test_installer_checks/InstallerChecksTests.py10000.1
tools/test_journal_write_failures.py6004.6
tools/test_jurisdiction_guidance.py1370022.1
tools/test_lookup_backoff.py5001.4
tools/test_media_job_states.py22008.9
tools/test_messages_first_live_media.py3002.5
tools/test_metrics.py8005.3
tools/test_mtproto_forensics.py100101.0
tools/test_narrative.py620062.6
tools/test_narrative_config.py360019.9
tools/test_opsec.py14001.2
tools/test_parallel_exports.py40018.2
tools/test_password_export.py340023.2
tools/test_paused_updates.py5000.0
tools/test_pending_login_revocation.py90015.6
tools/test_persona.py31008.7
tools/test_presence_watch.py14003.2
tools/test_provider_metadata_umask.py2000.0
tools/test_proxy_source_settings.py81000.2
tools/test_publication_guard.py3000.4
tools/test_qr_codes.py2041.2
tools/test_release_branch_fixes.py22000.3
tools/test_release_data_fixes.py350070.3
tools/test_removal_notice_order.py5000.0
tools/test_render_boundary.py9000.1
tools/test_replica_derivation.py8003.6
tools/test_replica_recipient.py15001.5
tools/test_report_brief_timestamps.py8000.0
tools/test_report_repeats.py3002.4
tools/test_report_settings.py3001.8
tools/test_report_settings_recovery.py190011.1
tools/test_request_limit_slowloris.py20004.0
tools/test_request_security.py42000.2
tools/test_resolve_target.py4000.0
tools/test_rpc_diagnostics.py3001.0
tools/test_scale_demo.py32005.0
tools/test_sealed_account.py260084.0
tools/test_secret_chat_custody.py10007.2
tools/test_secret_chat_safety.py10004.5
tools/test_selected_export.py12002.1
tools/test_session_import.py2120102.2
tools/test_site_context.py3000.1
tools/test_site_metadata.py11000.4
tools/test_site_seo/PageSearchMetadata.py6000.0
tools/test_site_validation.py15000.2
tools/test_store_transactions.py10005.9
tools/test_subject.py7002.8
tools/test_system_map_pool.py6000.0
tools/test_telegram_view_review.py20005.7
tools/test_translation.py15008.2
tools/test_tsa_cert_reference.py19000.2
tools/test_undercover.py9000.3
tools/test_verification_launcher.py160212.2
tools/test_verifier_account_compatibility.py35007.2
tools/test_verifier_comparison.py221035.8
tools/test_verifier_dispatch.py20200.0
tools/test_verifier_languages.py11502511.7
tools/test_verifier_output_safety.py8001.5
tools/test_verifier_sources.py15904.5
tools/test_video_documentation.py4000.9
tools/test_watchlists.py16102.5
tools/test_webapp.py14000.0
tools/test_witness_continuity.py1007.5
tools/test_witness_daily.py11003.8
tools/test_witness_export_window.py5000.0
tools/test_witness_freshness.py9006.2
tools/test_witness_keys.py4003.2
tools/test_witness_relogin.py5005.1
tools/test_witness_resilience.py16005.7

Raw results: tgwitness-tests-3a614fb780cd.tar.gz (all three) · summary.json · junit.xml · pytest.log · archive of all runs