Repository navigation
Conversation
The member check ignores case, so the worker now sends to each member address as the member stored it, for To, CC and BCC, instead of the address the step wrote. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🤖 CI report✅ Trunk lane — non-backend laneThis PR is assigned to the non-backend lane. It does not run backend Python tests and may merge in parallel with PRs in other lanes. ✅ Duplication (Python) — cleanNew Python code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying. ✅ Duplication (TypeScript) — cleanNew TypeScript code duplication introduced by this branch. Fails at 70+ tokens in app code, or 150+ tokens when both copies live in test files. Advisory while the gate proves itself: extract a shared helper instead of copying. ✅ Comment density — 0% of added code lines are comments (0 of 202)This section warns when comments are more than 3% of the code lines a PR adds, and alerts above 6%. Before agent-assisted PRs, the typical share was about 2%. Only full-line comments count. Docstrings, generated files, snapshots, migrations, and workflow files are left out. Comments that restate the code, record how the change came about, or narrate the next line add noise for the next reader. Keep the comments that explain a reason the code cannot show, and remove the rest. See This check does not block merging. It updates on every push and clears when the share drops. |
…ndbox-split/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ndbox-split/stored-member-address # Conflicts: # nodejs/src/cdp/services/managers/organization-members.service.test.ts
…ndbox-split/stored-member-address
…it/stored-member-address
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> # Conflicts: # docs/internal/workflows-email-sending-tiers.md # nodejs/src/cdp/services/managers/organization-members.service.test.ts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address
When two members stored an address in different cases, a step that wrote a third case was delivered as written, to a mailbox no member verified. That send now skips, unless the step writes one of the stored addresses exactly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> # Conflicts: # nodejs/src/cdp/services/managers/organization-members.service.test.ts
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address # Conflicts: # nodejs/src/cdp/services/messaging/email.service.ts
…it/stored-member-address
New commits were pushed — dismissing the stamphog approval from an earlier head. Re-add the trigger label to request a fresh review.
…it/stored-member-address
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Two member rows can hold the same address once trimmed. Keeping both copies made the single-casing shortcut fail and blocked a send to the only mailbox there is. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop the empty placeholder map in checkSandboxRecipients, and read the stored addresses back in the delivery test instead of recomputing initcap's output. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New commits were pushed — dismissing the stamphog approval from an earlier head. Re-add the trigger label to request a fresh review.
…it/stored-member-address # Conflicts: # docs/internal/workflows-email-sending-tiers.md # nodejs/src/cdp/services/managers/organization-members.service.test.ts # nodejs/src/cdp/services/managers/organization-members.service.ts
…it/stored-member-address
…it/stored-member-address
…it/stored-member-address
…it/stored-member-address
# Conflicts: # nodejs/src/cdp/services/managers/organization-members.service.ts
…it/stored-member-address
…it/stored-member-address
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address # Conflicts: # nodejs/src/cdp/services/managers/organization-members.service.test.ts
…it/stored-member-address
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…it/stored-member-address Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New commits were pushed — dismissing the stamphog approval from an earlier head. Re-add the trigger label to request a fresh review.
|
Note 🤖 Claude Opus 5.5 responding on behalf of Michael Replaced by #131731 in the isolated sandbox rebuild. |
Problem
Merge danger
Warning
🟡 Merge risk: medium · two-way door (merge-risk rubric)
git revertthe merge commit. Nothing to clean up.Changes
checkRecipientsreturns{ blocked, deliverTo }instead of the blocked list alone.How did you test this code?
email.service.test.tscovers mixed-case and display-name recipients, quoted commas and escaped quotes, in workflow and test sends. It reads the stored addresses back from the database.organization-members.service.test.tschecks that the lookup returns the stored address, and that two casings equal after trim deliver to one mailbox.Earlier runs at older heads, not this head
Live run at the #129052 head bb10d28, which contains this PR. Same devbox kit as #128946: private Django and Node
cdp-api, a seeded org, a local server that records each SES request, and the dev Valkey for the allowances. Sends used the editor's "Run test" path.Twin@andtwin@(live at the feat(cdp): cap sandbox sends per project and recipient each day #129052 head b265921):TWIN@matches neither and is skipped as not a member; each exact casing, and a padded' Twin@ ', is delivered to that stored mailbox.Shadow diff at this PR's head 47e749e against its base #129049 00c9b47, eleven sandbox sends through the same kit:
MEMBER@that matches neither of two stored casingsTest rationale: each case catches a sandbox email delivered to an address no member stored.
Release status
Docs update
docs/internal/workflows-email-sending-tiers.mdsays the worker delivers to the stored address.🤖 Agent context
Autonomy: Human-driven (agent-assisted)
Agent: Claude Code, Claude Opus 5.5
Skills:
/writing-tests,/writing-code-comments,/stacking-prs,/writing-pr-descriptionsMore context for AI agents
Twin@and an unverifiedtwin@still delivertwin@to the verified member. That decision stays open.checkAgainstinorganization-members.service.ts, andcheckSandboxRecipientsinemail.service.ts.Stack decisions, moved here from the visible body:
sandbox, created only by PostHog codeWORKFLOWS_SANDBOX_SENDER_ENABLED, no feature flag in CDP Node code🤖 Generated with Claude Code