Repository navigation
feat(pull-requests): support native Gitea lifecycle actions - #8
Conversation
|
@coderabbitai review Please evaluate correctness, regressions, security boundaries, and test coverage against the existing source-control and pull-request integrations. For this fork, |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Repository and branches =='
git remote -v
git status --short
git branch --show-current
git branch -a --no-color | sed -n '1,160p'
echo '== Pull request metadata =='
gh pr view 8 --repo RTVision/t3code --json number,title,baseRefName,baseRefOid,headRefName,headRefOid,changedFiles,additions,deletions,mergeable,state,url
echo '== Merge bases and commit ranges =='
for base in rtvision main; do
if git rev-parse --verify --quiet "origin/$base" >/dev/null; then
printf '%s: ' "$base"
git merge-base HEAD "origin/$base"
fi
done
git log --oneline --decorate --no-merges "$(git merge-base HEAD origin/rtvision)..HEAD" 2>/dev/null || true
echo '== Changed files against integration base =='
git diff --name-status "$(git merge-base HEAD origin/rtvision)"...HEAD
echo '== Diff stat =='
git diff --stat "$(git merge-base HEAD origin/rtvision)"...HEAD
echo '== Changed source/test outlines =='
git diff --name-only "$(git merge-base HEAD origin/rtvision)"...HEAD \
| grep -E '\.(ts|tsx|js|jsx|py|go|rs)$' \
| while IFS= read -r file; do
[ -f "$file" ] || continue
echo "--- $file"
ast-grep outline "$file" --items all 2>/dev/null || true
doneLength of output: 2558 🏁 Script executed: #!/bin/bash
set -euo pipefail
base='20841bcbd84e2e1348124e25385a9c25b3059fde'
head='582011ec14da9ea9d08e224889bc9870b0fdafbf'
echo '== Verify base and merge base =='
git cat-file -t "$base" || true
git merge-base "$base" "$head" || true
echo '== Changed files =='
git diff --name-status "$base...$head"
git diff --stat "$base...$head"
echo '== Complete pull request patch =='
git diff --find-renames --find-copies --unified=80 "$base...$head"
echo '== Nearby integration modules =='
fd . . --type f \
| grep -Ei '(gitea|github|gitlab|pull.?request|source.?control)' \
| sed -n '1,260p'
echo '== Structural map of changed TypeScript files =='
git diff --name-only "$base...$head" \
| grep -E '\.tsx?$' \
| while IFS= read -r file; do
echo "--- $file"
ast-grep outline "$file" --items all 2>/dev/null || true
doneLength of output: 84524 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Gitea HTTP request boundary and URL construction =='
ast-grep outline apps/server/src/sourceControl/GiteaApi.ts --items all
sed -n '1,300p' apps/server/src/sourceControl/GiteaApi.ts
echo '== Gitea API focused implementations =='
sed -n '193,352p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
sed -n '565,760p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
sed -n '1100,1300p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
sed -n '1,300p' apps/server/src/pullRequest/GiteaPullRequestProvider.ts
echo '== Contract action and detail semantics =='
rg -n -C 8 'PullRequestAction|autoMergeEnabled|baseComparison|PullRequestViewerPermissions' packages/contracts/src/pullRequest.ts
echo '== Comparable auto-merge and permissions implementations =='
rg -n -C 12 'autoMergeEnabled|getAutoMerge|enable-auto-merge|disable-auto-merge|viewerPermissions|baseComparison' \
apps/server/src/pullRequest/GitHubPullRequestProvider.ts \
apps/server/src/pullRequest/GitLabPullRequestProvider.ts \
apps/server/src/pullRequest/BitbucketPullRequestProvider.ts \
apps/server/src/pullRequest/AzureDevOpsPullRequestProvider.ts \
apps/server/src/pullRequest/GitHubPullRequestCli.ts \
apps/server/src/pullRequest/GitLabPullRequestCli.ts || true
echo '== Existing Gitea pagination call sites =='
rg -n -C 8 'nextPagePath|readUnknownSlice|Link|x-total-count' \
apps/server/src/pullRequest/GiteaPullRequestApi.ts \
apps/server/src/pullRequest/GiteaPullRequestApi.test.tsLength of output: 110756 🤖 web_search executed:
Length of output: 11158
Findings
Security boundaryThe timeline You are interacting with an AI system. |
582011e to
39a28c3
Compare
|
@coderabbitai review Please review this PR at its exact current head in stack pingdotgg#6. Verify correctness, regressions, security boundaries, and focused coverage against its current base, and report any actionable findings with file references. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
echo '== Current pull request metadata =='
gh pr view "$pr" --repo "$repo" \
--json number,title,state,url,baseRefName,baseRefOid,headRefName,headRefOid,changedFiles,additions,deletions
echo '== Local HEAD and branch =='
git status --short
git branch --show-current
git rev-parse HEAD
echo '== Current base and merge base =='
base_ref="$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)"
head_ref="$(gh pr view "$pr" --repo "$repo" --json headRefName --jq .headRefName)"
git fetch --quiet origin "$base_ref" "$head_ref" || true
base_oid="$(git rev-parse "origin/$base_ref")"
head_oid="$(git rev-parse HEAD)"
merge_base="$(git merge-base "$base_oid" "$head_oid")"
printf 'base_ref=%s\nbase_oid=%s\nhead_ref=%s\nhead_oid=%s\nmerge_base=%s\n' \
"$base_ref" "$base_oid" "$head_ref" "$head_oid" "$merge_base"
echo '== Commits in current PR range =='
git log --oneline --decorate --no-merges "$merge_base..$head_oid"
echo '== Files in current PR range =='
git diff --name-status --find-renames "$merge_base...$head_oid"
git diff --stat "$merge_base...$head_oid"
echo '== Changed TypeScript file structure =='
git diff --name-only "$merge_base...$head_oid" \
| grep -E '\.(ts|tsx)$' \
| while IFS= read -r file; do
test -f "$file" || continue
echo "--- $file"
ast-grep outline "$file" --items all 2>/dev/null || true
done
echo '== Patch =='
git diff --find-renames --unified=45 "$merge_base...$head_oid"Length of output: 2539 🏁 Script executed: #!/bin/bash
set -euo pipefail
base='0b6bf7c20edb07f47180fd9385a2ac3375e73a2c'
head='39a28c350b81b130f9bb4eda3e41172fd69f17d3'
echo '== Verify immutable review endpoints =='
git cat-file -t "$base"
git cat-file -t "$head"
printf 'merge_base=%s\n' "$(git merge-base "$base" "$head")"
echo '== Current PR commits =='
git log --oneline --decorate --no-merges "$base..$head"
echo '== Current PR files and stats =='
git diff --name-status --find-renames "$base...$head"
git diff --stat "$base...$head"
echo '== Changed source and test structure =='
git diff --name-only "$base...$head" \
| grep -E '\.(ts|tsx)$' \
| while IFS= read -r file; do
test -f "$file" || continue
echo "--- $file"
ast-grep outline "$file" --items all 2>/dev/null || true
done
echo '== Current PR patch =='
git diff --find-renames --unified=45 "$base...$head"Length of output: 61686 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Pagination and Gitea API request boundary =='
sed -n '300,420p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
ast-grep outline apps/server/src/sourceControl/GiteaApi.ts --items all
sed -n '1,310p' apps/server/src/sourceControl/GiteaApi.ts
echo '== Changed action and detail implementation =='
sed -n '565,710p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
sed -n '1280,1470p' apps/server/src/pullRequest/GiteaPullRequestApi.ts
sed -n '100,205p' apps/server/src/pullRequest/GiteaPullRequestProvider.ts
sed -n '1,180p' apps/server/src/pullRequest/GiteaLifecycle.ts
echo '== Pull-request detail contract and other provider behavior =='
rg -n -C 8 'autoMergeEnabled|baseComparison|PullRequestViewerPermissions|enable-auto-merge|disable-auto-merge' \
packages/contracts apps/server/src/pullRequest \
-g '*.ts' \
-g '!apps/server/src/pullRequest/GiteaPullRequestApi.ts' \
-g '!apps/server/src/pullRequest/GiteaPullRequestProvider.ts' \
-g '!apps/server/src/pullRequest/GiteaPullRequestApi.test.ts' \
-g '!apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts' \
-g '!apps/server/src/pullRequest/GiteaLifecycle.ts' \
-g '!apps/server/src/pullRequest/GiteaLifecycle.test.ts' \
| sed -n '1,1000p'
echo '== Gitea test setup and full changed test portions =='
sed -n '1,130p' apps/server/src/pullRequest/GiteaPullRequestApi.test.ts
sed -n '850,1120p' apps/server/src/pullRequest/GiteaPullRequestApi.test.ts
sed -n '1,160p' apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts
echo '== References to the timeline endpoint and pagination helper =='
rg -n -C 5 'issues/.*/timeline|nextPagePath\(' apps/server/src \
-g '*.ts'Length of output: 153682 🤖 web_search executed:
Length of output: 11260 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo '== Remaining Gitea provider methods =='
sed -n '180,300p' apps/server/src/pullRequest/GiteaPullRequestProvider.ts
echo '== Permission refresh in action service =='
sed -n '1180,1285p' apps/server/src/pullRequest/PullRequestService.ts
echo '== Exact changed line ranges =='
nl -ba apps/server/src/pullRequest/GiteaPullRequestApi.ts | sed -n '360,415p;1178,1230p;1285,1455p'
nl -ba apps/server/src/pullRequest/GiteaPullRequestProvider.ts | sed -n '1,115p;145,205p'
nl -ba docs/user/source-control.md | sed -n '65,125p'
echo '== Provider construction test coverage =='
rg -n -C 6 'GiteaPullRequestProvider\.layer|GiteaPullRequestProvider\.make|getChangeRequest\(' \
apps/server/src/pullRequest \
-g '*Gitea*test.ts' \
-g '*.test.ts'Length of output: 10078 🏁 Script executed: #!/bin/bash
set -euo pipefail
numbered() {
awk -v start="$2" -v end="$3" 'NR >= start && NR <= end { printf "%6d %s\n", NR, $0 }' "$1"
}
echo '== Auto-merge pagination implementation =='
numbered apps/server/src/pullRequest/GiteaPullRequestApi.ts 386 405
numbered apps/server/src/pullRequest/GiteaPullRequestApi.ts 1184 1225
echo '== Auto-merge pagination tests =='
numbered apps/server/src/pullRequest/GiteaPullRequestApi.test.ts 990 1045
echo '== Current Gitea capability documentation =='
numbered docs/user/source-control.md 72 125
echo '== Current provider detail tests that exercise timeline state =='
rg -n -C 4 'getAutoMergeEnabled|autoMergeEnabled|timeline' \
apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts \
apps/server/src/pullRequest/GiteaPullRequestApi.test.tsLength of output: 14030
Findings
Security boundaryI found no additional credential-forwarding issue in timeline pagination. You are interacting with an AI system. |
|
Addressed both findings in
Focused lifecycle/API tests: 35 passed. Targeted lint passed. |
|
@coderabbitai review Please review this PR at its exact current head in stack pingdotgg#6. Verify correctness, regressions, security boundaries, and focused coverage against its current base, and report any actionable findings with file references. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
echo '== Pull request metadata =='
gh pr view "$pr" --repo "$repo" \
--json number,title,state,url,baseRefName,baseRefOid,headRefName,headRefOid,changedFiles,additions,deletions
base_ref="$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)"
head_ref="$(gh pr view "$pr" --repo "$repo" --json headRefName --jq .headRefName)"
git fetch --quiet origin "$base_ref" "$head_ref"
base_oid="$(git rev-parse "origin/$base_ref")"
head_oid="$(git rev-parse HEAD)"
merge_base="$(git merge-base "$base_oid" "$head_oid")"
printf '\n== Exact review range ==\nbase_ref=%s\nbase_oid=%s\nhead_ref=%s\nhead_oid=%s\nmerge_base=%s\n' \
"$base_ref" "$base_oid" "$head_ref" "$head_oid" "$merge_base"
echo '== Commits =='
git log --oneline --decorate --no-merges "$merge_base..$head_oid"
echo '== Changed files =='
git diff --name-status --find-renames "$merge_base...$head_oid"
git diff --stat "$merge_base...$head_oid"
echo '== Changed TypeScript outlines =='
git diff --name-only "$merge_base...$head_oid" \
| grep -E '\.(ts|tsx)$' \
| while IFS= read -r file; do
test -f "$file" || continue
echo "--- $file"
ast-grep outline "$file" --items all 2>/dev/null || true
done
echo '== Patch =='
git diff --find-renames --unified=55 "$merge_base...$head_oid"Length of output: 2262 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
base='0b6bf7c20edb07f47180fd9385a2ac3375e73a2c'
head='3c866b6f6b26ebfc9f044ab8ba31c634dc4b516b'
ensure_commit() {
local oid="$1"
if ! git cat-file -e "${oid}^{commit}" 2>/dev/null; then
git fetch --quiet "https://github.com/${repo}.git" "$oid"
fi
}
ensure_commit "$base"
ensure_commit "$head"
echo '== Immutable review range =='
printf 'local_head=%s\n' "$(git rev-parse HEAD)"
printf 'base=%s\nhead=%s\nmerge_base=%s\n' \
"$base" "$head" "$(git merge-base "$base" "$head")"
git show -s --format='base: %H %s%nhead: %H %s' "$base" "$head"
echo '== Files and patch =='
git diff --name-status --find-renames "$base...$head"
git diff --stat "$base...$head"
git diff --find-renames --unified=45 "$base...$head"
echo '== Changed TypeScript outlines =='
git diff --name-only "$base...$head" | grep -E '\.tsx?$' | while IFS= read -r file; do
echo "--- $file"
git show "$head:$file" > "/tmp/$(basename "$file")"
ast-grep outline "/tmp/$(basename "$file")" --items all 2>/dev/null || true
done
echo '== Relevant current source with line numbers =='
git show "$head:apps/server/src/pullRequest/GiteaPullRequestApi.ts" \
| nl -ba | sed -n '350,435p;555,725p;1140,1260p;1260,1500p'
git show "$head:apps/server/src/pullRequest/GiteaPullRequestProvider.ts" \
| nl -ba | sed -n '1,280p'
git show "$head:apps/server/src/pullRequest/GiteaLifecycle.ts" \
| nl -ba | sed -n '1,260p'Length of output: 63756 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='3c866b6f6b26ebfc9f044ab8ba31c634dc4b516b'
show_range() {
local file="$1" start="$2" end="$3"
echo "--- $file:$start-$end"
git show "$head:$file" | sed -n "${start},${end}p" | awk -v n="$start" '{printf "%6d %s\n", n++, $0}'
}
echo '== Gitea pagination and request boundary =='
show_range apps/server/src/pullRequest/GiteaPullRequestApi.ts 300 410
show_range apps/server/src/pullRequest/GiteaPullRequestApi.ts 565 660
show_range apps/server/src/pullRequest/GiteaPullRequestApi.ts 1170 1290
show_range apps/server/src/pullRequest/GiteaPullRequestApi.ts 1390 1465
show_range apps/server/src/sourceControl/GiteaApi.ts 1 330
echo '== Provider and lifecycle code =='
show_range apps/server/src/pullRequest/GiteaLifecycle.ts 1 140
show_range apps/server/src/pullRequest/GiteaPullRequestProvider.ts 1 260
echo '== Contract and action authorization paths =='
git show "$head:packages/contracts/src/pullRequest.ts" \
| grep -n -E -C 8 'PullRequestAction|autoMergeEnabled|baseComparison|PullRequestViewerPermissions'
git show "$head:apps/server/src/pullRequest/PullRequestService.ts" \
| grep -n -E -C 12 'viewerPermissions|enable-auto-merge|disable-auto-merge|runAction'
echo '== Comparable provider detail loading and permissions =='
for file in \
apps/server/src/pullRequest/GitHubPullRequestProvider.ts \
apps/server/src/pullRequest/GitLabPullRequestProvider.ts \
apps/server/src/pullRequest/BitbucketPullRequestProvider.ts \
apps/server/src/pullRequest/AzureDevOpsPullRequestProvider.ts; do
git cat-file -e "$head:$file" 2>/dev/null || continue
echo "--- $file"
git show "$head:$file" | grep -n -E -C 8 'getAutoMergeEnabled|autoMergeEnabled|baseComparison|viewerPermissions|enable-auto-merge|disable-auto-merge'
done
echo '== Gitea provider/API test references and test setup =='
git show "$head:apps/server/src/pullRequest/GiteaPullRequestApi.test.ts" \
| grep -n -E -C 10 'getAutoMergeEnabled|timeline|draft|ready|enable-auto-merge|disable-auto-merge|layer'
git show "$head:apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts" \
| sed -n '1,220p' | awk '{printf "%6d %s\n", NR, $0}'Length of output: 101167 🤖 web_search executed:
Length of output: 20739 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='3c866b6f6b26ebfc9f044ab8ba31c634dc4b516b'
echo '== Optional auto-merge field consumers =='
git grep -n -E 'autoMergeEnabled|autoMergeMethod' "$head" -- \
'apps/**' 'packages/**' | sed -n '1,320p'
echo '== Detail and provider test construction =='
git grep -n -E -C 10 'getChangeRequest:|getAutoMergeEnabled|autoMergeEnabled|GiteaPullRequestProvider\.layer|GiteaPullRequestProvider\.make' \
"$head" -- 'apps/server/src/pullRequest' \
| sed -n '1,900p'
echo '== Optional enrichment patterns in all providers =='
git grep -n -E -C 8 'Effect\.orElseSucceed|autoMergeEnabled|Effect\.all' \
"$head" -- 'apps/server/src/pullRequest/*Provider.ts' \
| sed -n '1,1000p'Length of output: 179626 🤖 web_search executed:
Length of output: 20126
Finding
Verified
You are interacting with an AI system. |
|
Fixed the latest review finding in 9276180. Pull-request detail now treats the Gitea timeline lookup as optional enrichment: a failed timeline read omits |
|
Merge verdict: NO-GO (review gates incomplete). Head:
No merge performed. Resume the independent code reviews when Fable is available, obtain the missing/current CodeRabbit approval where applicable, and recheck the exact head and base before merging. |
|
@coderabbitai approve The maintainer requests formal approval for the remaining PRs. Please assess the exact current head If branch configuration prevents formal approval, please state that explicitly. Independent Codex/Fable code verdicts are being refreshed separately; this request does not authorize merging or bypassing their findings. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
requested_head='92761803ad9ee6d548af49b2965323ae28806018'
echo '== Pull request metadata =='
gh pr view "$pr" --repo "$repo" \
--json number,state,url,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,reviewDecision,statusCheckRollup
base_ref="$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)"
base_oid="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"
head_oid="$(gh pr view "$pr" --repo "$repo" --json headRefOid --jq .headRefOid)"
printf '\n== Requested and current endpoints ==\nrequested_head=%s\nbase_ref=%s\nbase_oid=%s\nhead_oid=%s\n' \
"$requested_head" "$base_ref" "$base_oid" "$head_oid"
for oid in "$base_oid" "$requested_head"; do
if ! git cat-file -e "${oid}^{commit}" 2>/dev/null; then
git fetch --quiet "https://github.com/${repo}.git" "$oid"
fi
done
test "$head_oid" = "$requested_head"
merge_base="$(git merge-base "$base_oid" "$requested_head")"
printf 'merge_base=%s\n' "$merge_base"
git show -s --format='base: %H%n %s%nhead: %H%n %s' "$base_oid" "$requested_head"
echo '== Commits and changed files =='
git log --oneline --no-merges "$merge_base..$requested_head"
git diff --name-status --find-renames "$merge_base...$requested_head"
git diff --stat "$merge_base...$requested_head"
echo '== Changed code structure =='
git diff --name-only "$merge_base...$requested_head" \
| grep -E '\.(ts|tsx|js|jsx)$' \
| while IFS= read -r file; do
echo "--- $file"
git show "$requested_head:$file" > "/tmp/$(basename "$file")"
ast-grep outline "/tmp/$(basename "$file")" --items all 2>/dev/null || true
done
echo '== Complete final patch =='
git diff --find-renames --unified=55 "$merge_base...$requested_head"
echo '== Key implementation and tests =='
for spec in \
'apps/server/src/pullRequest/GiteaPullRequestApi.ts:350:430' \
'apps/server/src/pullRequest/GiteaPullRequestApi.ts:560:730' \
'apps/server/src/pullRequest/GiteaPullRequestApi.ts:1160:1285' \
'apps/server/src/pullRequest/GiteaPullRequestApi.ts:1285:1485' \
'apps/server/src/pullRequest/GiteaPullRequestProvider.ts:1:280' \
'apps/server/src/pullRequest/GiteaLifecycle.ts:1:260' \
'apps/server/src/sourceControl/GiteaApi.ts:1:340' \
'apps/server/src/pullRequest/GiteaPullRequestApi.test.ts:900:1125' \
'apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts:1:300' \
'packages/contracts/src/pullRequest.ts:1:400' \
'docs/user/source-control.md:60:130'
do
IFS=':' read -r file start end <<< "$spec"
git cat-file -e "$requested_head:$file" 2>/dev/null || continue
echo "--- $file (Lines $start-$end)"
git show "$requested_head:$file" | sed -n "${start},${end}p" \
| awk -v n="$start" '{printf "%6d %s\n", n++, $0}'
done
echo '== Gitea action authorization and detail consumers =='
git grep -n -E -C 10 \
'viewerPermissions|runAction|enable-auto-merge|disable-auto-merge|autoMergeEnabled|baseComparison' \
"$requested_head" -- apps/server/src packages/contracts/src \
| sed -n '1,1400p'Length of output: 203572 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
head='92761803ad9ee6d548af49b2965323ae28806018'
echo '== Exact PR state =='
gh pr view "$pr" --repo "$repo" \
--json state,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,reviewDecision \
--jq '{state, baseRefName, baseRefOid, headRefName, headRefOid, mergeable, reviewDecision}'
base="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"
test "$(gh pr view "$pr" --repo "$repo" --json headRefOid --jq .headRefOid)" = "$head"
echo "merge_base=$(git merge-base "$base" "$head")"
echo '== Commit list and changed files =='
git log --oneline --no-merges "$base..$head"
git diff --name-status "$base...$head"
show () {
local file="$1" start="$2" end="$3"
echo "--- $file (Lines $start-$end)"
git show "$head:$file" | sed -n "${start},${end}p" | nl -ba -v "$start"
}
echo '== Pagination helpers and lifecycle reader =='
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 300 430
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1160 1225
show apps/server/src/pullRequest/GiteaLifecycle.ts 1 120
show apps/server/src/sourceControl/GiteaApi.ts 1 260
echo '== Permissions, actions, and base comparison =='
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 1 205
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 205 305
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1218 1285
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1390 1495
echo '== Focused test cases =='
rg -n -C 18 \
'getAutoMergeEnabled|full.*page|X-Total-Count|rel="next"|timeline|omits.*autoMerge|autoMergeEnabled' \
apps/server/src/pullRequest/GiteaPullRequestApi.test.ts \
apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts \
apps/server/src/pullRequest/GiteaLifecycle.test.ts
echo '== Diff for final fix commit =='
git diff --find-renames --unified=45 '3c866b6f6b26ebfc9f044ab8ba31c634dc4b516b..92761803ad9ee6d548af49b2965323ae28806018'
echo '== API request-boundary tests =='
rg -n -C 12 'api root|outside|external|redirect|Link|nextLink|pagination' \
apps/server/src/sourceControl/GiteaApi.test.ts \
apps/server/src/pullRequest/GiteaPullRequestApi.test.tsLength of output: 3678 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='92761803ad9ee6d548af49b2965323ae28806018'
show () {
local file="$1" start="$2" end="$3"
echo "--- $file (Lines $start-$end)"
git show "$head:$file" | sed -n "${start},${end}p" \
| awk -v n="$start" '{printf "%6d %s\n", n++, $0}'
}
echo '== Pagination helpers and lifecycle reader =='
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 300 430
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1160 1225
show apps/server/src/pullRequest/GiteaLifecycle.ts 1 120
show apps/server/src/sourceControl/GiteaApi.ts 1 260
echo '== Permissions, actions, and base comparison =='
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 1 205
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 205 305
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1218 1285
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1390 1495
echo '== Focused test cases =='
rg -n -C 18 \
'getAutoMergeEnabled|full.*page|X-Total-Count|rel="next"|timeline|omits.*autoMerge|autoMergeEnabled' \
apps/server/src/pullRequest/GiteaPullRequestApi.test.ts \
apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts \
apps/server/src/pullRequest/GiteaLifecycle.test.ts
echo '== Diff for final fix commit =='
git diff --find-renames --unified=45 \
'3c866b6f6b26ebfc9f044ab8ba31c634dc4b516b..92761803ad9ee6d548af49b2965323ae28806018'
echo '== API request-boundary tests =='
rg -n -C 12 'api root|outside|external|redirect|Link|nextLink|pagination' \
apps/server/src/sourceControl/GiteaApi.test.ts \
apps/server/src/pullRequest/GiteaPullRequestApi.test.tsLength of output: 95087 🤖 web_search executed:
Length of output: 12469
I reviewed exact head I found no remaining blocker. The timeline reader now handles Gitea’s page-length [approve] You are interacting with an AI system. |
|
Merge verdict: NO-GO. This supersedes the earlier quota-only readiness comment. Reviewed head:
Validation: 339 focused integrated PR tests plus 502 cross-provider tests passed at integration head No merge is authorized while any blocker or required approval is outstanding. Recheck the resulting head and current base after corrections or stack merges. This PR also belongs to the native Gitea stack: merging it would merge lower open members, including blocked #4/#5. Those predecessor gates must pass too. |
|
GO on the individual change — merge blocked by stack Reviewed commit: Codex and Claude Fable 5.1 both approve the reviewed lifecycle head, including its timeline paging and tolerated timeline failure. Later branches were cut before some of these fixes, so preserve them when reconciling the stack. GitHub native-stack merging includes preceding PRs, including blocked #5. Hold the merge until the required predecessor fixes are cleared. Validation by Codex: the exact #36 integration head Reviewers: Codex and Claude Fable 5.1 (Claude CLI). |
|
@coderabbitai review Please independently review the newly pushed fixes at |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
requested_head='c169fc23f476c5263045cff486985890d49e5860'
echo '== Pull request metadata =='
gh pr view "$pr" --repo "$repo" \
--json number,state,url,baseRefName,baseRefOid,headRefName,headRefOid,mergeable,reviewDecision,statusCheckRollup
base_ref="$(gh pr view "$pr" --repo "$repo" --json baseRefName --jq .baseRefName)"
base_oid="$(gh pr view "$pr" --repo "$repo" --json baseRefOid --jq .baseRefOid)"
current_head="$(gh pr view "$pr" --repo "$repo" --json headRefOid --jq .headRefOid)"
for oid in "$base_oid" "$requested_head"; do
if ! git cat-file -e "${oid}^{commit}" 2>/dev/null; then
git fetch --quiet "https://github.com/${repo}.git" "$oid"
fi
done
printf '\n== Exact review range ==\nrequested_head=%s\ncurrent_head=%s\nbase_ref=%s\nbase_oid=%s\n' \
"$requested_head" "$current_head" "$base_ref" "$base_oid"
test "$current_head" = "$requested_head"
merge_base="$(git merge-base "$base_oid" "$requested_head")"
printf 'merge_base=%s\n' "$merge_base"
git show -s --format='base: %H%n %s%nhead: %H%n %s' "$base_oid" "$requested_head"
echo '== Commits and changed files =='
git log --oneline --no-merges "$merge_base..$requested_head"
git diff --name-status --find-renames "$merge_base...$requested_head"
git diff --stat "$merge_base...$requested_head"
echo '== Changed code structure =='
git diff --name-only "$merge_base...$requested_head" \
| grep -E '\.(ts|tsx|js|jsx)$' \
| while IFS= read -r file; do
echo "--- $file"
git show "$requested_head:$file" > "/tmp/$(basename "$file")"
ast-grep outline "/tmp/$(basename "$file")" --items all 2>/dev/null || true
done
echo '== Complete patch =='
git diff --find-renames --unified=45 "$merge_base...$requested_head"Length of output: 68431 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='c169fc23f476c5263045cff486985890d49e5860'
show() {
local file="$1" start="$2" end="$3"
echo "--- $file (Lines $start-$end)"
git show "$head:$file" | sed -n "${start},${end}p" | nl -ba -v "$start"
}
echo '== Lifecycle and pagination implementation =='
show apps/server/src/pullRequest/GiteaLifecycle.ts 1 140
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 300 430
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 565 700
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1160 1280
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1320 1465
echo '== Gitea request security boundary =='
show apps/server/src/sourceControl/GiteaApi.ts 1 330
echo '== Provider, action authorization, and contracts =='
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 1 300
git show "$head:apps/server/src/pullRequest/PullRequestService.ts" \
| nl -ba \
| grep -E -C 14 'viewerPermissions|runAction|enable-auto-merge|disable-auto-merge|action' \
| sed -n '1,1100p'
git show "$head:packages/contracts/src/pullRequest.ts" \
| nl -ba \
| grep -E -C 10 'PullRequestAction|PullRequestViewerPermissions|ProviderChangeRequestDetail|autoMergeEnabled|baseComparison' \
| sed -n '1,800p'
echo '== Focused current tests =='
show apps/server/src/pullRequest/GiteaLifecycle.test.ts 1 180
show apps/server/src/pullRequest/GiteaPullRequestApi.test.ts 1120 1410
show apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts 1 260
echo '== Test and implementation references for Gitea actions =='
git grep -n -E -C 6 \
'giteaViewerPermissions|setThreadResolution|resolve|titleForDraftAction|getAutoMergeEnabled|enable-auto-merge' \
"$head" -- apps/server/src/pullRequest packages/contracts/src \
| sed -n '1,1400p'Length of output: 2242 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='c169fc23f476c5263045cff486985890d49e5860'
show() {
local file="$1" start="$2" end="$3"
echo "--- $file (Lines $start-$end)"
git show "$head:$file" | sed -n "${start},${end}p" \
| awk -v n="$start" '{printf "%6d %s\n", n++, $0}'
}
echo '== Lifecycle and pagination implementation =='
show apps/server/src/pullRequest/GiteaLifecycle.ts 1 140
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 300 430
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 565 700
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1160 1280
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1320 1465
echo '== Gitea request security boundary =='
show apps/server/src/sourceControl/GiteaApi.ts 1 330
echo '== Provider and contracts =='
show apps/server/src/pullRequest/GiteaPullRequestProvider.ts 1 300
git show "$head:apps/server/src/pullRequest/PullRequestService.ts" \
| awk '{printf "%6d %s\n", NR, $0}' \
| grep -E -C 14 'viewerPermissions|runAction|enable-auto-merge|disable-auto-merge' \
| sed -n '1,1100p'
git show "$head:packages/contracts/src/pullRequest.ts" \
| awk '{printf "%6d %s\n", NR, $0}' \
| grep -E -C 10 'PullRequestAction|PullRequestViewerPermissions|autoMergeEnabled|baseComparison' \
| sed -n '1,800p'
echo '== Focused current tests =='
show apps/server/src/pullRequest/GiteaLifecycle.test.ts 1 180
show apps/server/src/pullRequest/GiteaPullRequestApi.test.ts 1120 1410
show apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts 1 260
echo '== Existing Gitea resolution and action call paths =='
git grep -n -E -C 6 \
'setThreadResolution|giteaViewerPermissions|titleForDraftAction|getAutoMergeEnabled|enable-auto-merge' \
"$head" -- apps/server/src/pullRequest packages/contracts/src \
| sed -n '1,1400p'Length of output: 241768 🏁 Script executed: #!/bin/bash
set -euo pipefail
head='c169fc23f476c5263045cff486985890d49e5860'
previous='92761803ad9ee6d548af49b2965323ae28806018'
show() {
local file="$1" start="$2" end="$3"
echo "--- $file (Lines $start-$end)"
git show "$head:$file" | sed -n "${start},${end}p" \
| awk -v n="$start" '{printf "%6d %s\n", n++, $0}'
}
echo '== Final commit =='
git show --find-renames --stat --oneline "$head"
git diff --find-renames --unified=60 "$previous..$head"
echo '== Repository access and pull request mapping =='
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 240 310
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 700 800
show apps/server/src/pullRequest/GiteaPullRequestApi.ts 1640 1690
echo '== Request-boundary tests =='
fd -a '^GiteaApi\.test\.ts$' apps/server/src
git show "$head:apps/server/src/sourceControl/GiteaApi.test.ts" \
| awk '{printf "%6d %s\n", NR, $0}' \
| grep -E -C 14 'API root|external|redirect|pagination|Link|baseUrl|Authorization' \
| sed -n '1,1200p'
echo '== Changed code test locations and coverage names =='
git diff --name-only "$previous..$head"
git grep -n -E 'setThreadResolution|draft prefix|draft state|scheduled merge|merge_when_checks_succeed|timeline' \
"$head" -- apps/server/src/pullRequest/GiteaPullRequestApi.test.ts \
apps/server/src/pullRequest/GiteaPullRequestProvider.test.ts \
apps/server/src/pullRequest/GiteaLifecycle.test.tsLength of output: 78282 🤖 web_search executed:
Length of output: 15556 🏁 Script executed: #!/bin/bash
set -euo pipefail
repo='RTVision/t3code'
pr='8'
head='c169fc23f476c5263045cff486985890d49e5860'
echo '== Current formal review state =='
gh pr view "$pr" --repo "$repo" --json headRefOid,reviewDecision,reviews \
--jq '{headRefOid, reviewDecision, reviews: [.reviews[] | {author: .author.login, state, submittedAt, commit: .commit.oid}]}'
echo '== Current CodeRabbit approval configuration =='
git show "$head:.coderabbit.yaml" 2>/dev/null || true
echo '== Gitea v1.27 source: draft title implementation candidates =='
for url in \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/modules/setting/repository.go' \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/services/pull/pull.go' \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/services/pull/merge.go' \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/routers/web/repo/pull.go' \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/routers/api/v1/repo/pull.go'
do
echo "--- $url"
curl --fail --silent --show-error --location "$url" \
| grep -n -E -C 8 'WORK_IN_PROGRESS_PREFIXES|WorkInProgress|IsWorkInProgress|ResolveConversation|resolve.*conversation|Can.*Conversation|Unresolve' \
| sed -n '1,400p' || true
done
echo '== Gitea v1.27 source: route registration candidates =='
for url in \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/routers/api/v1/api.go' \
'https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/routers/api/v1/repo/pull.go'
do
echo "--- $url"
curl --fail --silent --show-error --location "$url" \
| grep -n -E -C 5 'resolve|unresolve|/merge|Cancel.*Auto|AutoMerge' \
| sed -n '1,300p' || true
doneLength of output: 15291 🏁 Script executed: #!/bin/bash
set -euo pipefail
tree_url='https://api.github.com/repos/go-gitea/gitea/git/trees/v1.27.3?recursive=1'
tree_file='/tmp/gitea-v1.27.3-tree.json'
curl --fail --silent --show-error --location "$tree_url" > "$tree_file"
echo '== Candidate Gitea v1.27.3 files =='
grep -Eo '"path":"[^"]+"' "$tree_file" \
| grep -E '(^|/)(issue|pull).*\.go$|issues.*\.go$' \
| grep -E 'model|service|router' \
| sed -n '1,500p'
echo '== Source definitions for draft prefix and conversation authority =='
grep -Eo '"path":"[^"]+"' "$tree_file" \
| sed -E 's/"path":"([^"]+)"/\1/' \
| grep -E '(^|/)(issue|pull).*\.go$|issues.*\.go$' \
| grep -E 'model|service|router' \
| while IFS= read -r path; do
content="$(curl --fail --silent --show-error --location \
"https://raw.githubusercontent.com/go-gitea/gitea/v1.27.3/$path" || true)"
if printf '%s' "$content" | grep -Eq 'func (CanMarkConversation|IsWorkInProgress|GetWorkInProgressPrefix|ResolvePullReviewComment|UnresolvePullReviewComment)'; then
echo "--- $path"
printf '%s\n' "$content" \
| grep -n -E -C 16 'func (CanMarkConversation|IsWorkInProgress|GetWorkInProgressPrefix|ResolvePullReviewComment|UnresolvePullReviewComment)' \
| sed -n '1,700p'
fi
doneLength of output: 1626 🤖 web_search executed:
Length of output: 776 🤖 web_search executed:
Length of output: 993
I reviewed pull request I found no remaining actionable blocker. The lifecycle actions use Gitea’s native merge and cancellation routes. The draft prefix logic matches Gitea’s case-insensitive prefix behavior. The timeline reader handles both page-length The service refreshes viewer permissions before actions. The author resolution permission matches Gitea 1.27 behavior. The API request boundary keeps pagination requests under the configured API root and prevents redirect-based credential forwarding. Focused regression coverage includes the final provider detail path. [approve] You are interacting with an AI system. |
|
@coderabbitai approve Your completed source review reports no remaining blockers at |
Rate Limit Exceeded
|
|
Re-review: GO on the change; NO-GO for merging the current stack Reviewed head: Timeline pagination and tolerant auto-merge-state reads are present, including the provider-path regression. Codex, Fable, and CodeRabbit approve the lifecycle change. Fable 5.1: GO on the individual change. The native-stack prefix through this PR conflicts with rtvision in GiteaPullRequestApi.ts, its tests, and GiteaPullRequestProvider.test.ts. Resolve and re-review the integration before merging. Validation by Codex: 308 focused tests across 9 files passed on integration head The remaining native-stack merges must clear their predecessors and the actual target branch. CodeRabbit’s commit-specific comments are distinguished from formal GitHub review records; rate-limited requests are not approvals. |
|
GO — merged after Codex, Fable 5.1, and CodeRabbit review. Reviewed head: Lifecycle behavior is retained. The only net change from its current predecessor corrects a test workspace path. CodeRabbit reviewed every exact head and cleared the combined integration. Its commit-specific approval is recorded in that comment; this is not a claim of a new formal GitHub APPROVED review on each PR. All three reviewers require #26 to land with #27 or later; they merged together in the dependency batch. Validation by Codex: 490 focused tests across 13 files passed on integration head Merged: |
Gitea pull requests need reversible draft/ready actions and visible auto-merge state. Map drafts to the configured native title prefixes, verify each transition, and read Gitea’s durable timeline for scheduled/cancelled auto-merges. Enable native scheduling/cancellation, author permissions, and base comparison.
Validation: 41 focused tests passed. Live Gitea 1.27.3 tests verified draft/ready, scheduling with a pending required check, cancellation, and cleanup without merging the PR. The stock API does not expose the armed merge method; a separate Gitea API PR will add it. The final integrated server typecheck passes.
Final stack validation at
256fd6fe5: 228 focused tests passed, followed by 61 API/workflow cases and the final team-recovery regression; server typecheck and targeted lint passed. The live settle-on-merge E2E previously passed with fixture cleanup. Companion Gitea backend and focused integration tests passed, including native revert across all five merge styles.Model: GPT-5.6 Sol (high), integration review GPT-6 Astra. Harness: Codex.