feat(web): suggest usernames in PR review comments - #52
Conversation
|
@coderabbitai review Please review the current head, |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '=== PR metadata and checks ==='
gh pr view 52 --repo RTVision/t3code --json headRefOid,baseRefOid,files,reviewDecision,statusCheckRollup --jq '{
headRefOid,
baseRefOid,
fileCount: (.files | length),
files: [.files[].path],
reviewDecision,
checks: [.statusCheckRollup[] | {name: .name, status: .status, conclusion: .conclusion}]
}'
echo '=== Current HEAD ==='
git rev-parse HEAD
git status --short
echo '=== Changed-file summary ==='
git diff --stat HEAD^ HEAD
git diff --name-status HEAD^ HEAD
echo '=== Full current-head diff ==='
git diff --find-renames --find-copies --unified=80 HEAD^ HEADLength of output: 78750 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '=== Mention component outline ==='
ast-grep outline apps/web/src/components/ui/mention-textarea.tsx --items all
ast-grep outline apps/web/src/components/ui/mentionText.logic.ts --items all
ast-grep outline apps/web/src/components/pullRequest/PullRequestMentionProvider.tsx --items all
echo '=== Textarea and PR editor usage ==='
rg -n -C 4 --glob '*.{ts,tsx}' '(?:<Textarea\b|<PullRequestMarkdownEditor\b|<MentionTextarea\b)' apps/web/src
echo '=== Candidate operation and permission definitions/usages ==='
rg -n -C 6 --glob '*.{ts,tsx}' '(?:reviewerCandidates|listCandidates|requestReviewers|reviewThreads)' . \
-g '!apps/web/src/components/pullRequest/PullRequestMentionProvider.tsx'
echo '=== Provider contracts ==='
rg -n -C 5 --glob '*.{ts,tsx}' '(?:reviewerCandidates\s*[:(]|listCandidates\s*[:=]|requestReviewers\s*[:=])' \
packages apps server 2>/dev/null || true
echo '=== Textarea component props ==='
ast-grep outline apps/web/src/components/ui/textarea.tsx --items all
sed -n '1,240p' apps/web/src/components/ui/textarea.tsxLength of output: 201595 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '=== All uses of PR editor components ==='
rg -n -C 8 --glob '*.{ts,tsx}' '<(?:MentionTextarea|PullRequestMarkdownEditor|Textarea)\b' \
apps/web/src/components/pullRequest \
apps/web/src/components/diffs
echo '=== Parent placement of changed editors ==='
for file in \
apps/web/src/components/pullRequest/PullRequestDetailPanel.tsx \
apps/web/src/components/pullRequest/PullRequestReviewAnnotation.tsx \
apps/web/src/components/pullRequest/PullRequestSummaryTab.tsx \
apps/web/src/components/diffs/DiffCommentAnnotation.tsx; do
echo "--- $file ---"
rg -n -C 12 '(?:<PullRequest(?:SummaryTab|ReviewBar|CodeTab)|<DiffCommentAnnotation|<ReviewThreadCard|<PullRequestMarkdownEditor)' "$file" || true
done
echo '=== Mention candidate actor types ==='
rg -n -A 35 -B 5 --glob '*.ts' '(?:PullRequestActor\s*=|PullRequestActor =|export const PullRequestActor|PullRequestReviewer\s*=|export const PullRequestReviewer)' packages/contracts/src apps/server/src
echo '=== Failed check details ==='
gh api repos/RTVision/t3code/commits/3f2eba650245afc20c8663a2ee96b9a04c19ee69/check-runs \
--jq '.check_runs[] | select(.name == "Release Smoke") | {name, status, conclusion, details_url, output}'
echo '=== Current check state ==='
gh pr view 52 --repo RTVision/t3code --json statusCheckRollup --jq \
'[.statusCheckRollup[] | {name: .name, status: .status, conclusion: .conclusion}]'Length of output: 41543 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '=== Release Smoke annotations ==='
gh api repos/RTVision/t3code/check-runs/103584647229/annotations \
--jq '.[] | {path, start_line, end_line, annotation_level, message, title}'
echo '=== Release Smoke job steps ==='
gh api repos/RTVision/t3code/actions/jobs/103584647229 \
--jq '{name, status, conclusion, started_at, completed_at, steps: [.steps[] | {name, status, conclusion, number}]}'
echo '=== Direct parent chain of all PR editor entry points ==='
rg -n -C 6 --glob '*.{ts,tsx}' '<(?:PullRequestTimelineTab|PullRequestReviewBar|PullRequestCodeTab|PullRequestSummaryTab)\b' \
apps/web/src/components/pullRequest
echo '=== Current head and checks ==='
git rev-parse HEAD
gh pr view 52 --repo RTVision/t3code --json headRefOid,statusCheckRollup --jq \
'{headRefOid, checks: [.statusCheckRollup[] | select(.name != null) | {name: .name, status: .status, conclusion: .conclusion}]}'Length of output: 9256
I verified mention insertion, keyboard handling, permission gating, and the pull-request editor surfaces. The provider covers the summary, timeline, and code tabs. Enter, Tab, arrow keys, and Escape preserve the existing submission shortcuts. I cannot approve yet. CI is not complete. You are interacting with an AI system. |
3f2eba6 to
8df5486
Compare
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
Release Smoke started failing on unrelated PRs when fresh resolution selected an `expo-audio` version that does not match the repository's version-specific patch. The smoke test deleted its copied lockfile before installing; the release workflow keeps that lockfile. Keep the copied lockfile when checking the release version bump, so the smoke test uses the same locked dependency versions as a release. This unblocks CI for #52 and #53 without changing application dependencies. Validation: the complete release-smoke script passes locally with `CI=true`; targeted lint and formatting checks pass. The failing hosted jobs report `ERR_PNPM_UNUSED_PATCH` for `expo-audio@57.0.4` before this change. Implemented with GPT-6 through Codex.
|
@coderabbitai approve All checks now pass on current head You found no blocking issue in the mention implementation at |
🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="RTVision/t3code"
pr="52"
previous_head="3f2eba650245afc20c8663a2ee96b9a04c19ee69"
expected_head="8df548605e3197f1288335b103479a5962e3653e"
echo '=== Pull request head, target, and review state ==='
gh pr view "$pr" --repo "$repo" \
--json headRefOid,baseRefName,baseRefOid,reviewDecision \
--jq '{headRefOid, baseRefName, baseRefOid, reviewDecision}'
echo '=== Required check results for expected head ==='
gh api "repos/$repo/commits/$expected_head/check-runs?per_page=100" \
--jq '[.check_runs[] | {name, status, conclusion}] | sort_by(.name)'
echo '=== Feature changes relative to the previously reviewed head ==='
git diff --stat "$previous_head" "$expected_head"
git diff --name-status "$previous_head" "$expected_head"
echo '=== Current checkout ==='
git rev-parse HEAD
git status --shortLength of output: 2870
✅ Action performedComments resolved and changes approved. |
Typing a username in a PR review currently requires knowing the exact login. This adds
@usernamesuggestions to review comments, replies, inline drafts, and comment editors on GitHub, Gitea, and GitLab, using PR participants and repository candidates loaded on demand.Arrow keys select a person, Enter or Tab inserts the mention, and Escape closes the suggestions. Comments keep their existing submission shortcuts. Web and desktop share the implementation; mobile has no equivalent PR review editor.
Validation: 9 focused tests, web typecheck, targeted lint, and formatting checks pass. Fable approved the implementation after fixes for stale suggestions and keyboard scrolling. The maintainer explicitly waived browser testing and PR images.
Implemented with GPT-6 through Codex. Independent review by Claude Fable 5.1 through Claude Code.