Skip to content

Add channel-wide @everyone and @here mentions - #2138

Closed
matbalez wants to merge 1 commit into
block:mainfrom
matbalez:bart/channel-wide-mentions
Closed

matbalez wants to merge 1 commit into
block:mainfrom
matbalez:bart/channel-wide-mentions

Conversation

@matbalez

Copy link
Copy Markdown
Contributor

What changed

  • Add channel-wide @everyone and active-presence @here mentions for any channel member.
  • Respect channel mutes across live notifications, unread state, optimistic sends, edits, and history.
  • Preserve Nostr interoperability with standard recipient p tags plus a validated Buzz audience marker.
  • Add autocomplete entries using the established mention-row styling and the copy “Notify everyone in this channel” / “Notify everyone online in this channel.”
  • Enforce a 4,000-recipient ceiling and validate sender/recipient membership without truncating large channel rosters.

Why

Channel members need an explicit way to notify everyone or only currently online members without bypassing mute preferences. The initial implementation exposed a hidden 1,000-row database roster limit beneath the advertised 4,000-recipient contract; this version removes that truncation and uses direct, bounded membership checks.

Validation

  • Desktop tests: 3,192/3,192 passed.
  • Desktop typecheck, repository checks, and production build passed.
  • Focused Playwright channel-mention flow: 2/2 passed.
  • Core audience tests: 2/2 passed.
  • Tauri audience tests: 2/2 passed; compile check passed.
  • Relay 4,002-member roster regression: 1/1 passed; DB and relay compile checks passed.
  • Rust formatting and git diff --check passed.
  • Final code/UI review passed.

The Postgres-backed 4,002-member integration regression compiles but could not execute locally because no Postgres or Docker daemon was available. It must pass in CI before merge.

Visuals

Co-authored-by: Mat Balez <60949391+matbalez@users.noreply.github.com>
Signed-off-by: Mat Balez <60949391+matbalez@users.noreply.github.com>
@matbalez matbalez closed this Jul 23, 2026
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…into draft-page (block#2138, block#2139)

draft-page mentioned verify-claims exactly once before this, inside
baseline mode's numbered step 5. The ordinary drafting path went
check-page -> screen-sensitive -> write, so the gate Serina declared
mandatory and unskippable on 2026-09-04 was wired into one mode and
absent from the path almost every page takes.

Restructured the tail of the procedure. Step 8 no longer authorises the
write - it authorises step 9. Two new steps and a renumber:

  9.  the claim gate. Third, always after the other two, never beside
      them. Any verdict other than SUPPORTED on any claim stops the
      write entirely, as does a dispatch that produced no verdict at
      all. No partial-write path and no write-the-supported-sections
      path. Findings use screen-sensitive's shape so review has one
      place to look. A draft with zero behaviour claims still runs the
      gate and records that it found none - it never skips, and never
      invents a claim to have something to verify.
  10. the final independent pass, and ALL THREE gates run in it, not
      just verify-claims. A fix made in response to step 9 is an edit
      after check-page and screen-sensitive already ran, so re-running
      only the claim gate leaves those two holding verdicts about a page
      that no longer exists - a repair could introduce a secret or break
      a citation after screening and still reach the target path. Any
      edit after this sequence invalidates it and requires the whole
      sequence again from check-page.
  11. the existing post-write ledger and index hand-off, unchanged.

Baseline mode now points at steps 9 and 10 by number rather than naming
the gate before either had a step to point at, and takes no carve-out
from the edit-invalidates-the-sequence rule.

Forward references corrected in the same pass: step 6 said the ledger
append happens 'in step 8' (now 11) and that 'both gates below' need the
complete draft (now three).

Verification: python3 launchpad/agents/the-professor/tools/check_professor.py
--offline -> ALL NETWORK-FREE CHECKS PASSED. verify-claims now appears 8
times, across the step 9 and 10 procedure text, baseline mode and the
checklist, against 1 before - and that 1 was not in the ordinary path.
Not verified: procedure text, which the harness asserts nothing about.

Signed-off-by: test <test@example.com>
tucktuck101 pushed a commit to tucktuck101/buzz that referenced this pull request Sep 17, 2026
…into update-page (block#2138, block#2139)

update-page contained zero occurrences of verify-claims before this. It
went check-page -> screen-sensitive -> overwrite the real file.

Same shape as STEP 4's draft-page change, restructured 6-9: step 6 is
the sensitivity gate and no longer authorises the overwrite, step 7 is
the claim gate, step 8 is the final pass over all three gates, step 9 is
the existing post-write ledger append.

ONE DECISION THIS STEP HAD TO MAKE, flagged in the file as needing
confirmation. Neither block#2138 nor the plan says whether the claim gate
inherits step 5's deliberate whole-page scope. check-page runs page-wide
because a section-scoped edit can break a page-level rule. Dispatching
every claim on the page would multiply every update's cost by the page's
total claim count, doubled again by run-twice, for claims nothing in the
edit could have invalidated.

Split, on the grounds that it is not a weakening:

  - the UNSOURCED check runs over the WHOLE page. It needs no dispatch,
    so it is free, and a section-scoped edit genuinely can strip the only
    citation backing a claim elsewhere - the same cross-section failure
    step 5 already scopes page-wide for.
  - the per-claim dispatch covers only the rewritten section. A claim in
    an untouched section is checked against an untouched citation;
    rewriting a different section cannot change whether that citation
    supports it. A citation that has since gone stale is scan-repo's job
    to detect, not this gate's to re-litigate on every unrelated edit.

The free half runs page-wide and the paid half runs where the content
changed. The alternative is strictly more expensive with no failure mode
identified that it catches and this does not.

Also fixed: a cross-reference to draft-page section 8's retry-safety
note, which STEP 4 moved to section 11.

Verification: python3 launchpad/agents/the-professor/tools/check_professor.py
--offline -> ALL NETWORK-FREE CHECKS PASSED. Headings run 0, 1, 1a, 2-9
contiguously.
Not verified: procedure text, which the harness asserts nothing about.

Signed-off-by: test <test@example.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant