GIT-012 gave the JS a FETCH client and GIT-013 a FF-only POST push; both ride git's receive-pack. PUT is the UNCONSTRAINED ref-writer — any ref to any sha, force/non-FF allowed — so be put //host (force-push cur to origin's counterpart) and put ssh://host?br#sha / put https://host?br (set a remote ref) need the same receive-pack wire but WITHOUT POST's FF gate. This ticket adds the jab put wire-push forms on top of GIT-013's shared wire.push(): compute the <old> <new> <ref> update (force = old is the advertised value, no ancestor check), reuse the pack build + report-status, over ssh: and http:. Ref-DELETE over the wire stays DELETE's verb, not here. Method: Issues.
wire.push() receive-pack core (advert → updates+pack → report-status) for POST; PUT reuses it unchanged.be put //origin (force-push cur to origin's counterpart) and put ssh://host?br#sha (set a remote ref) are unimplemented in jab — the GIT-012 push gap.be put ssh://host/path with NO ?ref should be log-only (record the URL), not a push — a related ref-write edge to honour.jab put wire-push forms over ssh: + http: on top of GIT-013's wire.push(): set or force a remote ref to a sha.be put //host behaviour.pkt, classify); add only the verb-level update computation.must()-free force write.pol; curl https (no TLS binding); no git:// push — all as GIT-012/GIT-013.verbs/put/put.js wire forms build a single <old> <new> <ref> update (old = advertised, new = target sha) and call wire.push(); force means skip the ancestor check, not a special cap.be put ssh://host/path (no ?ref) stays log-only per DIS-011 — a wire push happens only when a ?ref (or a //host push form) is present.be put //origin resolves origin's counterpart ref from the reflog (reverse-grep, see Store) and force-writes it to cur's tip.verbs/put/put.js: detect the wire-push forms (//host, ssh://host?br, https://host?br[#sha]) and route to wire.push() (GIT-013). — landed cb3881f8 (put.js §GIT-014 wire PUT, pushWire).cb3881f8 (pushWire; #sha hashlet resolve at put.js ~340).be put ssh://host/path (no ?ref) log-only (DIS-011), not a push. — test/wire/put-dis011.test/wire/put-force-ssh, put-force-http.wire.push() core (pack builder + report-status) — sequence after it. RESOLVED: landed together (cb3881f8).cb3881f8 ("git protocol push", be/ trunk) with GIT-013: verbs/put/put.js pushWire — force/set a remote ref over ssh:/http: on wire.push(), no FF gate; POST→PUT message map (test/put/wire-refguard); DIS-011 no-?ref stays log-only.relate.resolveRef (GIT-015 234b0f54 / GIT-016 c12f6d4b); tests test/wire/put-force-ssh/put-force-http/put-dis011.