fix(handlers): HOTFIX OFFSEC-015 — scope broadcast recipients to sender org #1243

Open
release-manager wants to merge 2 commits from fix/offsec-015-staging into staging

2 Commits

Author SHA1 Message Date
f89f7a34d9 test(handlers): add 15 BroadcastHandler test cases to PR #1243
Some checks failed
Release-Manager/probe release-cycle-probe
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 28s
CI / Detect changes (pull_request) Successful in 31s
E2E API Smoke Test / detect-changes (pull_request) Successful in 29s
E2E Chat / detect-changes (pull_request) Successful in 34s
Harness Replays / detect-changes (pull_request) Successful in 28s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 42s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 34s
gate-check-v3 / gate-check (pull_request) Successful in 35s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 52s
qa-review / approved (pull_request) Successful in 22s
security-review / approved (pull_request) Successful in 24s
sop-checklist / all-items-acked (pull_request) Successful in 23s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m39s
sop-tier-check / tier-check (pull_request) Successful in 30s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 12s
CI / Python Lint & Test (pull_request) Successful in 11s
E2E Chat / E2E Chat (pull_request) Failing after 10s
Harness Replays / Harness Replays (pull_request) Successful in 8s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 23s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m50s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 6m18s
CI / Canvas (Next.js) (pull_request) Successful in 19m21s
CI / Canvas Deploy Reminder (pull_request) Has been skipped
CI / Platform (Go) (pull_request) Failing after 20m29s
CI / all-required (pull_request) Successful in 2s
Merges 14 new tests (truncate, validation, DB errors, success paths,
graceful degradation) with the 11 existing OFFSEC-015 org-isolation tests.
All 25 tests now use setupBroadcastDB + QueryMatcherEqual with exact SQL.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 12:08:44 +00:00
aff7f810bc fix(handlers): hotfix OFFSEC-015 — scope broadcast recipients to sender's org
Some checks failed
CI / Canvas Deploy Reminder (pull_request) Blocked by required conditions
CI / all-required (pull_request) Blocked by required conditions
Block internal-flavored paths / Block forbidden paths (pull_request) Successful in 13s
CI / Detect changes (pull_request) Successful in 1m2s
Harness Replays / detect-changes (pull_request) Successful in 25s
Secret scan / Scan diff for credential-shaped strings (pull_request) Successful in 22s
E2E API Smoke Test / detect-changes (pull_request) Successful in 1m15s
gate-check-v3 / gate-check (pull_request) Successful in 24s
E2E Chat / detect-changes (pull_request) Successful in 1m27s
Handlers Postgres Integration / detect-changes (pull_request) Successful in 1m21s
qa-review / approved (pull_request) Successful in 31s
security-review / approved (pull_request) Successful in 27s
sop-tier-check / tier-check (pull_request) Successful in 30s
lint-required-no-paths / lint-required-no-paths (pull_request) Successful in 1m31s
Runtime PR-Built Compatibility / detect-changes (pull_request) Successful in 1m41s
CI / Shellcheck (E2E scripts) (pull_request) Successful in 10s
CI / Python Lint & Test (pull_request) Successful in 12s
Harness Replays / Harness Replays (pull_request) Successful in 11s
E2E Chat / E2E Chat (pull_request) Failing after 48s
Runtime PR-Built Compatibility / PR-built wheel + import smoke (pull_request) Successful in 11s
E2E API Smoke Test / E2E API Smoke Test (pull_request) Successful in 2m56s
Handlers Postgres Integration / Handlers Postgres Integration (pull_request) Successful in 7m13s
CI / Canvas (Next.js) (pull_request) Successful in 19m1s
CI / Platform (Go) (pull_request) Failing after 20m41s
sop-checklist / all-items-acked (pull_request) [info tier:low] acked: 0/7 — missing: comprehensive-testing, local-postgres-e2e, staging-smoke, +4 — body-unfilled: comprehensive-testing, l
Cherry-picked from 5a05302c (main) / 98382eb1 (hotfix branch).

Recursive CTE walks parent_id chain to find sender's org root, then
filters recipients to same org only. Prevents cross-tenant broadcast.

Also adds CWE-400 rate limiting (3/min), CWE-400 message cap (1000
chars), and CWE-79 html.EscapeString sanitization.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-15 22:42:56 +00:00