Junior cannot reliably turn a person reference—name, email, or GitHub username—into a real Slack mention. The durable identity work in #733 provides a foundation, but mention resolution and rendering still need an explicit product/runtime contract.
Gaps
- Model people separately from provider identities: one canonical user may have Slack, GitHub, and email identities; Slack IDs must be scoped by workspace and provider IDs must have uniqueness constraints.
- Define trusted association paths. Slack profile email can seed a match, but GitHub email is often private or non-unique; support explicit/verified linking and avoid silently merging users on weak evidence.
- Ingest and refresh Slack profile state (user ID, email, display name, deleted/deactivated status) and GitHub username/account ID. Preserve aliases so renames do not break resolution.
- Expose a narrow resolver to the agent: lookup by Slack ID, email, display name, or GitHub username; return canonical identity plus the workspace-specific Slack user ID. Ambiguous or missing matches must fail with candidates/a clarification, not guess.
- Render mentions as Slack mrkdwn
<@SLACK_USER_ID> at delivery time. Do not rely on the model to synthesize IDs or plain-text @name strings.
- Add authorization/privacy rules around exposing email and cross-provider identity data; resolver results should return only what the task needs.
- Define behavior for guests, bots, deleted users, users outside the current workspace, and multiple Slack workspaces.
- Add observability and tests covering exact match, ambiguity, renamed accounts, stale/deactivated identities, cross-workspace collisions, GitHub-to-Slack lookup, and output escaping.
Related
Requested by David Cramer.
--
View Junior Session in Sentry
Junior cannot reliably turn a person reference—name, email, or GitHub username—into a real Slack mention. The durable identity work in #733 provides a foundation, but mention resolution and rendering still need an explicit product/runtime contract.
Gaps
<@SLACK_USER_ID>at delivery time. Do not rely on the model to synthesize IDs or plain-text@namestrings.Related
Requested by David Cramer.
--
View Junior Session in Sentry