spike(ssh): evaluate AGit flow for token-less PR creation over SSH - written keep/drop decision #298
Labels
No labels
breaking
bug
documentation
enhancement
epic
good first issue
help wanted
refactoring
resolution/duplicate
resolution/invalid
resolution/wontfix
security
severity/critical
severity/high
severity/low
severity/medium
status/abandoned
status/blocked
status/needs-decision
status/needs-info
status/needs-verification
testing
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sixfold-space/madtea#298
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Part of #187 (SSH-only mode epic). Evaluation, not a build - its output is a decision.
Forgejo supports the AGit flow:
git push origin HEAD:refs/for/<branch> -o topic=<t> -o title=<title>creates a PR entirely over SSH, no API call. If it holds up, it becomes the PR-creation path for true token-less operation in ssh-only mode (merge stays API/web and keeps the typed degradation).Evaluate against a live Forgejo instance: does the PR land with usable title/topic/description; how do updates to the same topic behave; how do errors surface; does it work on Codeberg's version; what would finish's UX look like when push-creates-the-PR (no PR URL in the push output?); interaction with branch-name issue auto-close.
Acceptance:
Decision: keep, scoped - AGit becomes the ssh-only PR-creation path, as bare create/update only. Follow-up implementation filed as #327; this spike lands no production code, closing.
Ran the evaluation against a disposable local Forgejo 15.0.2 (rootless container, sqlite; Codeberg reports 16.0.0-dev on the same gitea-1.22.0 compat base - AGit is long-stable across majors, and nothing probed is version-specific, though I did not create test PRs on Codeberg itself). Verbatim transcripts are in my notes; the findings:
git push origin HEAD:refs/for/main -o topic=probe-1 -o title="Probe one" -o description="body text"created PR #1 with title and body from the options, rc=0. The PR URL (with number) prints on the push's stderrremote:lines.-o force-push=true, and succeeds with it - same PR.-ooption is silently ignored - a typo gives rc=0 and no feedback.refs/pull/N/headwith an empty label, and the contributor has no local topic branch. Branch-name issue auto-close cannot apply on this path; linkage must becloses #Nin the body.So "token-less PR creation" honestly means token-less bare create/update; a full finish still wants the API. That partial capability is still exactly what ssh-only mode needs - PR creation was the one write with no SSH story - hence keep, with the metadata legs degrading per #295's model rather than pretending.
One environment note for the record: the probe ran under heavy host load (a merge attempt hit Forgejo's load-shedding 405) - that is noise from my box, not an AGit behavior.
Spike complete: written keep decision with the live-probe evidence in the comment above; follow-up implementation filed as #327; no production code changed, per this issue's own acceptance.