feat: delete mode, indicator outlines, terser report messages - #174
Merged
Conversation
…link Fall back to the full name when a user has no @username instead of a placeholder dash, which was rendering as a stray dot in front of the file count. The report link becomes a Reports web_app button, and the shown-once caption and the word 'offline' are gone.
The reports list showed '(no username)' for users who do have a name; carry first/last name through the list API and the create DM so both surfaces label a user the same way the command does. The DM also gets the Reports button instead of a bare link.
A Cloudflare paste names specific files, but the round encrypts the uploader's whole history — so the files that actually triggered it disappear into the grid. Record them on their blobs and draw a yellow outline around those thumbnails; outline sits outside the border and takes no layout space, so it composes with the selected state.
A Cloudflare complaint can name material that's clearly unwanted but that nobody can attribute to a minor. Banning the uploader and filing with NCMEC is the wrong call there; deleting the files isn't. A delete-mode switch swaps the classification scale for a single delete toggle and the review button for a confirmed delete. The selected files are destroyed, every other file in the round is restored to disk, the round closes as 'deleted', and the uploader keeps their account. The key is verified against every blob before anything is written or deleted, so a wrong key destroys nothing.
This was referenced Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Message trims, a way to delete files without reporting anyone, and indicator marking.
Messages
@usernamenow shows their full name instead of a placeholder dash — that dash was rendering as the stray·in front of the file count. Applies to/report, the create DM, and the console list (which said(no username)for users who do have a name).offlineand theShown once and not stored…caption.Delete mode — for material that's clearly unwanted but that nobody can attribute to a minor, where banning + filing with NCMEC would be wrong. A switch at the bottom of the report swaps the A1–NR scale for a single delete toggle and the Review button for a confirmed Delete. Selected files are destroyed, every other file in the round is restored to disk, the round closes as
deleted, and the uploader is not banned. Deleted files are marked cleared so a later round can't drag them back in.Indicator marking — a Cloudflare paste names specific files, but the round encrypts the uploader's whole history, so the triggering files vanish into the grid. They're now recorded on their blobs and drawn with a yellow
outline, which sits outside the border and takes no layout space, so it composes with the selected state rather than shifting the grid.Test plan
resolve_targetsreturns the indicator map.ruff check,ruff format --check,ty check,pytest(567 passed).node --check.Schema: one additive column (
report_blobs.indicator, default 0) via the existing idempotent migration; one new status value.