uri binding flattens absent vs present-empty components
The JABC uri binding (beagle/js/uri.cpp) mapped all 8 parsed components through JABCSliceStr, which returns "" for any zero-length slice — collapsing an ABSENT slot and a PRESENT-BUT-EMPTY slot to the same JS "". So ?b and ?b# both parse to {query:"b",fragment:""}, and JS can't tell /p (no query) from /p? (empty query), making POST.mkd's #/?-presence rows unhonorable. Native URIPattern (abc/URI.c:533) already tracks presence (slot data-ptr non-NULL = sigil seen), so the fix maps ABSENT→undefined, PRESENT-EMPTY→"", PRESENT→string. Unblocks DIS-054, whose isBareTrunkQuery/isSlotArg reparse the raw CLI arg only because bare ? was indistinguishable from absent. Scope: the JABC binding (beagle/js/) — the be/ JS that runs on jab inherits it. Method Issues.
js/uri.cpp JABCuriParse set every component via JABCSliceStr → "" whether the slot is absent or present-empty; the distinction native code keeps was dropped at the JS boundary.be/ compensated with forbidden raw-string hacks: isBareTrunkQuery(arg,u)=arg==="?", isSlotArg(a)=a==="?" (verbs/post/post.js:140,178) (CLAUDE no manual parsing).URIPattern bitmask); only the binding flattened it.URI parse: ABSENT → undefined, PRESENT-EMPTY → "", PRESENT → decoded string. new URI("/p").query===undefined, new URI("/p?").query==="".URI.make(...) keeps its || "" guards so undefined args still serialize omitted — no make regression.URIPattern, no new C path (CLAUDE reuse). Repro in js/test/uri.js.JABCSetComp(obj,name,slice,present) → present ? string : undefined, driven by URIPattern(&u) bits, replacing the 8 unconditional JABCSliceStr sets.js/test/uri.js: /p query undefined, /p? query "", /p# fragment "", beagle-shape host undefined.JABCSetComp via URIPattern; rebuild jab; JABCuri ctest + be/ post suite green.c436efa "URI js binding to differentiate absent vs empty".u.x || "" guards make undefined behave as the old "" (verified: be-js-post-* green on the rebuilt jab).c436efa "URI js binding to differentiate absent vs empty": uri.cpp JABCSetComp+URIPattern (all 8 slots), make passes undefined through; test test/uri.js (ctest JABCuri). Unblocks DIS-054 (drop the raw-arg ? hacks) and the bare-. detection in URI-010.beagle/js/uri.cpp → the jab repo root uri.cpp (~/src/jab) in the DOG-007/JAB-005 submodule split; verified in-tree 2026-07-07 (audit).