feat(slack): format replies as mrkdwn - #161
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: e16e3ca4f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ddf33292b8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b61d6f9697
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| for character in readable_link(&rendered).chars().rev() { | ||
| tokens.push_front(character.to_string()); |
There was a problem hiding this comment.
Retokenize oversized link fallbacks before splitting
When an oversized Markdown link is converted by readable_link, this loop queues its escaped URL one character at a time, bypassing the atomic &/</> tokenization performed earlier. If an escaped control character in that fallback crosses the 4,000-character boundary—for example, a long URL placing & at the boundary—the messages end in & and begin with amp;, corrupting the displayed URL. The fresh evidence beyond the previously fixed entity case is this post-tokenization oversized-link fallback path; retokenize the readable text rather than enqueueing individual characters.
Useful? React with 👍 / 👎.
Summary
Closes #159
Verification
cargo fmt --all --checkcargo clippy --locked --all-targets -- -D warningscargo build --lockedcargo test --locked(348 unit tests, 1 docs test, 12 CLI tests, 3 crash/recovery tests)git diff --checkReview
Independent subagent review covered Slack mrkdwn semantics, escaping, code delimiters, link delimiters, 4,000-character chunk boundaries, and channel isolation. All actionable findings were addressed. Final re-review: approved with no remaining actionable findings.
Risk
Live Slack rendering was not available locally. The conversion follows Slack developer documentation and is covered at the outbound payload boundary.