JAB-020 JS: narrow the pack bindings to one repack call the per-object surface exists so JS can drive the record loop, and KEEP-006 moves that loop into libdog

jab/pack.hpp exposes fourteen per-object primitives (_pack_next, _pack_type, _pack_size, _pack_baseoff, _pack_ref, _pack_inflate, _pack_resolve, _pack_scan, _pack_feed, _pack_feed_emit, _delt_apply, _delt_encode, plus _pack_header/_pack_count) for one reason: the ingest record loop runs in JS. KEEP-006 rules that loop into libdog as "repack a git pack", with JS keeping only routing (URL classify, capability/want-have negotiation, pkt-line preamble, refs, shard resolution, rotate policy). So the clone path stops calling any of them and the binding surface becomes roughly one call. This is a NARROWING, not a deletion _pack_scan still backs the PACK-003 salvage-index rebuild over existing logs, and the primitives remain the test/diagnostic surface. Prototype and measurements are in KEEP-006; method Issues.

Input

Context

Goals

The clone path crosses the JS/C boundary once per fetch instead of ~11.7M times, and no pack bytes are ever materialised in the JS heap.

Constraints

WIP

Design decisions

Both open questions are RULED 2026-07-27; the signature above is settled.

TODOs

Blockers and bummers

Outcome

Library entry + binding landed in the main tree (uncommitted), 2026-07-27; the JS ingest still runs the old path, so nothing is switched over yet.