Beagle SCM
BE-020 MED: verb URI-slot handling gaps — HEAD drops Path, PUT force-pushes pathless, host decoded 3 ways
Three URI-slot handling defects across the verbs, all "a slot is honored differently (or not at all)":
verbs/head/head.js:73 — HEAD silently IGNORES the Path slot: be head ./path?br reports the FULL-tree diff instead of narrowing to the path.
verbs/put/put.js:278 — pushWire: a pathless no-ref remote (be put ssh://host) falls PAST the DIS-011 log-only gate and force-pushes trunk (the gate keys on path presence, which this form lacks).
verbs/put/put.js:329 — the remote authority/host slot is decoded with THREE divergent rules (put vs wire.classify vs get/head), plus a third query-strip variant — same URI, different host/branch across verbs.
From the 2026-07-07 be/ review (BE/REVIEW), CONFIRMED. Method Issues.
Input
Context
- HEAD is GET's dry-run; a Path slot must narrow it identically (GET-022 is the get-side per-file gap; head must agree).
- DIS-011 ruling: a
?ref-less remote is LOG-ONLY, never a force-push — the pathless form must hit that gate too.
- One shared host/branch decoder (wire.classify's) should serve every verb; the divergent copies are a URI-013 straggler class.
Goals
- HEAD honors the Path slot (narrow diff); pathless no-ref PUT is log-only, not a force-push; one shared remote-slot decoder across put/wire/get/head.
Constraints
- Repro-first per defect; URI slots via the URI class; reuse wire.classify's decode, don't add a fourth.
WIP
Design decisions
- (pending — promote wire.classify's remote decode to the shared entry)
TODOs
Blockers and bummers
- Overlaps URI-010 (relative-path resolution) and DIS-011 (log-only ruling) — sequence after those land.
Outcome