fix(prs): correct merged-PR, conflict and readiness semantics #39
No reviewers
Labels
No labels
area/dsh
area/forgejo
experiment
priority/later
priority/next
priority/now
type/bug
type/task
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
dsh-plugins/dsh-gitea!39
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/qa-pr-semantics"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What
Four PR-domain defects from the tester sweep.
#23 —
gitea_pr_geton a merged PRThe formatter's
data.mergedclause hijacked every merged PR. Restricted the merge wording togitea_pr_merge/gitea_auto_mergeand added agitea_pr_getformatter:#18 "title" [merged] by @dsh, head → base, URL, merge date and body (2 000-char cap).#24 —
pr_conflict_resolvesays “Applied” withoutconfirmThe clean early-return had no
dryRun/applied; the formatter assumed applied. It now returns{clean:true, applied:false, dryRun: !confirm}and printsConflict Resolution (dry-run): no conflicts to resolve; nothing to apply.“Applied” only follows a realconfirm: trueresolution.#37 —
conflict_analyzereports 0 conflicts for a missing refresolveRef()returned the ref name even whenrev-parsefailed. Unresolved base/head now returnbase branch not found: …/head branch not found: …; amerge-treefailure without conflict files is an error too. The formatter treatsconflictsCount === 0as clean, so a genuine clean pair saysConflict Analysis: Clean.#38 —
merge_readinesssays “NOT ready” for a merged PRcheckMergeReadinessnow short-circuits onpr.merged/merged_atand returns{merged:true, alreadyMerged:true, mergedAt, url}with no checks.autoMergeIfReadyreturns the same without callingmergePull. The formatter printsPR #18 is already merged at …; no merge needed.Verification
test/pr-semantics.test.mjs: merged/openpr_get, merged readiness, auto-merge no-op, clean conflict-resolve dry run, missing base ref, clean analyze.npm test88/88, leak scan clean,node --checkclean.gitea_pr_get 18→ full merged PR;gitea_merge_readiness 18→ “already merged”;conflict_analyzewithno-such-base-branch→ clear error;master/master→ Clean;pr_conflict_resolvewithout confirm → dry-run no-op.Closes #23, #24, #37, #38.