remotes: SSH is read-write — drop the credential helper and the origin rewrite #100
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Meta/Campaign
Meta/Epic
Meta/Session
Priority/Critical
Priority/High
Priority/Low
Priority/Medium
Reviewed/Confirmed
Reviewed/Curated
Reviewed/Duplicate
Reviewed/Invalid
Reviewed/Won't Fix
Scope/Campaign
Status/Abandoned
Status/Blocked
Status/Conflicted
Status/In Progress
Status/In Review
Status/Need Grooming
Status/Need More Info
Status/Ready
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Ting/Jostoph!100
Loading…
Reference in a new issue
No description provided.
Delete branch "tango/99-ssh-is-rw"
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?
Owner ruling, 2026-08-28: SSH for read-write, HTTPS for shallow clone. Two things in this file contradict it, and #97/#98 made one of them worse.
Design
The credential row was not lost — it was removed on purpose
#97 read the absence of
credential.https://jo.et0.pw.helperfromcheck's settings table as an accident, on the evidence thatconfig-get/config-setstill carried a dead"git"scope, and #98 restored it. That reasoning was wrong. Under the transport split, a push authenticates with the machine's forge key; HTTPS is for taking a cheap read. Wiring a credential helper into every repo's local git config serves neither.Removing it also deletes a failure mode this file had been spending effort on: a helper answering with an empty password when the token is unexported, which the forge reports as "credentials expired" rather than "credentials missing".
ting:tokenexisted only to explain that symptom, so it goes with the row. The"git"scope goes too — it has no rows again, and standing open as a capability nothing uses is exactly the dead code #97 complained about.remotesmust stop rewriting origin to HTTPSThe rewrite's own comment gave its reason as "the same host the credential helper above already trusts, so HTTPS with that helper is enough; no ssh key negotiation needed for a plain clone/push." With the helper gone, that premise is void — and the rewrite was actively harmful: it took repos that could push with the machine's forge key and left them unable to push without an exported token.
Measured 2026-08-28:
lar.ad/flake-ops, whose origin this task had rewritten to HTTPS, failedjj git pushwithAuthentication failed, whilelar.ad/dendrite,swarm/hydramemandTing/Jostoph— still on ssh — pushed fine.The URL becomes a report, in the same family as
governanceanddefault-branch: a repo on HTTPS is told it cannot be pushed to without a token, and the operator decides. Rewriting someone's remote is not a doctor's business when the transport is a deliberate choice.srremoval is untouched — sr.ht is retired and a leftover mirror remote is real drift.default-branchkeeps the stderr fix from #98; that part stands on its own, and over ssh it now resolves with no token at all.Specification Delta
[git, 'credential.https://...']row, the"git"scope inconfig-get/config-set, andting:tokenting:remotes: origin URL reported, never rewritten; chain returns toconfig -> remotessrremoval, anddefault-branch's stderr fixVerification
lar.ad/flake-ops, origin still HTTPS from the old rewrite:After
jj git remote set-url origin ssh://[email protected]/lar.ad/flake-ops.git, with no token in the environment:A clean run needing no token at all is the point of the ruling, and it is what the file now produces.
Closes #99