Index of Beagle's open work: one topic per dir of numbered Plan-shaped tickets, cleared by the parallel Issues fix-and-land loop. Each topic lists its OPEN tickets as one-liners; per-topic detail lives in todo/<TOPIC>/README.mkd, landed history in be log. A fully-landed ticket drops from its topic; a closed topic drops from here.
BE/REVIEW.mkd).
- BE-010 CRIT — JS PATCH weaves the COMMIT tree as ours → clobbers dirty wt edits (native PATCH-002/JGET-004 twin) - BE-011 HIGH — wtdir SRC_ROOT confinement is lexical; //../name escapes the root (DOG-009 twin) - BE-012 HIGH — emitPack 256B deflate slack overflows on >4MB incompressible blobs → push aborts - BE-013 HIGH — wire.js child/fd lifecycle: push() finally leaks stdin → reap HANGS; curl leaks - BE-014 HIGH — DELETE ignores the Host slot → be delete //origin?feat tombstones the LOCAL branch - BE-015 HIGH — POST #/#!/#msg! message forms unimplemented (reuse missing, forget-! dropped) - BE-016 HIGH — pager emits file-content control bytes to the tty (ANSI/OSC injection) - BE-017 HIGH — io.mmap-and-never-unmap leak class, 4 sites (ignore/diff/gitmodules/why); gated on JAB-006 - BE-018 MED — hunk-body tok32 end wraps at 16 MiB (log/why) → large-file views corrupt - BE-019 MED — thin-pack buffer sizing: silent object drop + >1GB balloon on corrupt input - BE-020 MED — verb URI-slot gaps: HEAD drops Path, pathless PUT force-pushes, host decoded 3 ways - BE-021 MED — classify: exec bit ignored, dir/merge baseline mismatch, nested .be DIR floods unk - BE-022 MED — be/ helper duplication sweep (~9 sites) - BE-023 MED — view semantics: grep/spot drop args, theme bold sticks, pager escape-split leak - BE-024 MED — robustness/doctrine: unguarded parse aborts walk, non-crash-safe _book, wrong-target rollback +4 - BE-025 LOW — perf/style: repeated full-wtlog scans, double hunk retention, redundant re-encode, whitespace - BE-003 — uniform error line: name+verb+URI+code; needs a ruling - BE-006 — one failed push prints 5 stacked error lines → BE-003 - BE-008 — bare be put sub-recursion still sprays PUTNONE/NONE + banner hunk (post-arm gitlink bump landed quiet)
- DIS-006 — be get file: from a legacy ELIDED store still crashes; elided→shard migrate-vs-materialize ruling open - DIS-007 — magic refs ?null / ?back unimplemented yet spec'd; implement-or-strike ruling - DIS-011 — be put ssh://host/path without ?ref force-pushes instead of logging; BE_PLAN_PUT gates on authority alone (confirm PUT invariant-9 ruling, then fix-or-close) - DIS-024 — flat→sharded store migration, stage 4 (mandatory project) pending - DIS-040 — POSTCFLCT needs per-file conflict provenance (byte-level de-falsing impossible); design ruling - DIS-058 — be/ JS submodule umbrella: core+D10/D17/D18 landed; open: D8 per-sub push (now unblocked), D11 head no-descend, D14 Edited axis inert, D15/D16 spec updates - DIS-059 — be post detached-wt fix landed 0a8c42f3; residual: add the be/test detached-POST case, then close
MEM/MEM.mkd).- MEM-010 — CURL unchecked alloc null-deref + handle/slist leaks - MEM-019 — graf call() early-return skips mmap/handle cleanup - MEM-021 — abc latent bounds/overflow hardening (utf8, MMAP…) - MEM-024 — push-side walk holds 1MB mmap/frame; errors swallowed (tree arm fixed; commit arms + wpush_collect_commits open) - MEM-025 — first_name slice dangles into compacted advert buffer - MEM-027 — patch_walk unbounded BASS carving (~29MB/level) - MEM-031 — WOOFApiOpen leaks dogs/buffers on a later open failure
- GIT-001 — umbrella: OFS pack log; only PackLog wiki reconcile left - GIT-011 — ZINFInflate wraps full-slice output vs NOROOM (corruption) - GIT-012 — JS smart-fetch transports: core landed 4370d67e; residue: git:// still misroutes to ssh (split or refuse) - GIT-015 — jab post ref-target resolution: fixes landed 234b0f54; residue: an end-to-end POSTNOREF repro test - GIT-020 JS — JS keeper serve side: upload-pack landed 261680bf; open: jab receive-pack serve, get/be+cached test flips, ssh-remote form - GIT-017 — remote-tracking refs must record remote host + FULL ABSOLUTE branch (?/project/branch); saveRemoteRef/clone/add strip query to ? → branches collapse onto trunk key (split from GIT-016 T3)
- PACK-001 — PIDXScan from_off: C core landed 8df1e213; open: jab binding fromOff arg (pack.hpp hardcodes 0) + a JS tail-scan test - PACK-002 — JS pack writer emits OFS_DELTA (offset-only); jab post feeds RAW today → non-native/bloated packs (follow-up to PACK-001)
- SUBS-013 — git submodule add parity - SUBS-025 — sub GET leaks raw fetch progress to stderr, not hunks - SUBS-027b — R1 emission, Edited + coord-mismatch axes, loud force/diverged refusal, get reapply, test matrix (be head axis landed b9c6b647) - SUBS-032 MED — nested abc sub resolves to WRONG source: be head → no-refs HOMENOPROJ; be patch fetches official github, not the local shard - SUBS-038 LOW — sub re-get with changed .gitmodules url basename fetches the wrong shard → child object-not-found (latent) - SUBS-039 — submodule-path delegation: PUT arm landed 1c4a97c8; open: DELETE arm (delStage has no sub-crossing split) + shared splitter - SUBS-040 HIGH — submodule branch tracking: I1-I3 fixed live (untagged); open: dot-branch-advance repro assert + native I4/I5 - SUBS-041 — sub nesting depth cap landed 6388c34e (MAX_SUBMODULE_DEPTH=8); open: a bounded-chain repro test - SUBS-045 MED — descended read views: core landed 36b1aec0; open: blob:/size: still sub-blind + status/diff/ls nav-target audit
100cd237).- POST-006 — POSTCFLCT false-fires on marker strings → DIS-040
- GET-041 HIGH — be/ worktree bring-up broken end-to-end (self-locator resolution loop, jab self-hosts from partial checkout, native sniff ASan overflow); umbrella over GET-036/037/038/039, fix FIRST - GET-009 — be:// sync umbrella (reachability-based serving) - GET-017 — --nosub won't advance a store-backed switch-worktree - GET-018 — make be get's wt update atomic on mid-write failure - GET-022 — be get <path>?<rev> drops the path (no per-file checkout) - GET-032 — be get offline sub mount: ok yet no files written - GET-034 — graf/GET.c id maps sized 4096 « GET_MAX_VERS=200000 → silent id drop - GET-036 — be/ self-locator mis-creation: checkout+mount-classify arms landed b24446c0/f0269b27; open: repro tests, runtime basename-link recheck, jab local-script resolution - GET-037 — be self-gitlink crash class fixed dbb828e6/064c15f5; open: legacy-160000 repro test; e2e beagle-ext clone still fails (GET-041) - GET-038 — wt-source store-anchor redirect in-tree (resolveLocalStore) but NO ticket-coded commit; close pending hashlet + GET-041 ruling - GET-039 — symlinks-as-blobs core landed 3026a5fb/d31b52ea (isSelfLocator gone); open: formal close under the GET-041 ruling
- URI-015 MED — scp-form remote intake: JS landed 082b172c; remainder: file the C twin (keeper/WIRECLI.c wcli_spawn has no scp handling) - URI-010 HIGH — relative URI paths resolve against cwd then re-anchor to the wt root (implemented in wt //URI-010, pending merge; MERGE-RISK: URI-015 touched the same intake files)
jab get divergences from native (differential-probe batch).
- JGET-001 UMBRELLA 13 jab-get defects vs native (severity table + evidence) - JGET-002 CRIT no FF/ancestry gate → silently clobbers committed local commits (27/28/58) - JGET-003 CRIT be get ? trunk-switch records WRONG branch → next post rewrites that branch's history - JGET-004 CRIT dirty cross-branch switch writes conflict markers into the uncommitted file (case 09) - JGET-005 HIGH ?<branch> fetches TRUNK for non-main/master — pickWant refs/ vs refs/heads/ (case 24) - JGET-006 HIGH pre-existing empty .be/ dir crashes jab get (hermetic-shield shape; masks many cases) - JGET-007 HIGH sub fetch by exact pin: LOCAL sources fixed d80bdb5c (SUBS-046); WIRE sources still exact-pin-only, no branch-fetch fallback - JGET-010 MED bareword path-vs-branch misroute: no branch-switch / bare-sha detach / ?.. (DIS-017) - JGET-011 MED parseRemote misderives store root for bare file:<store> (case 29; the .be-FILE-mount half landed as GET-038) - JGET-012 MED relative submodule url ../sub not resolved against parent source (case 50, SUBS-020) - JGET-013 MED --force leaves a tracked orphan on disk (no orphan sweep; case 49, GET-016) - JGET-014 LOW same-line weave: jab cnf/rc=1 vs native mrg/rc=0, ours/theirs swapped (case 66)
- BLAME-001 — core plan subsumed by BLAME-002 1a5acce8; residue: unindexed-commit fallback still byte-dedups + close-as-subsumed ruling - BLAME-003 — parallelize residual blob inflates; needs a ruling (premise stale: UNPK.c fork workers now exist as a pattern)
- PTR-001 — abc/ BSDDiff, URIMergePath, TLV casts (GATED; the "done, awaits review" diff is LOST — redo against trunk) - PTR-007 — woof/ + bro/ raw pool ptr + manual parse (woof gates) - PTR-008 — mark/+js/+beagle/ ptr discipline: MKDT prefix fix landed 9bfb0157; rest discarded, needs fresh rework if pursued
diff: view.
- DIFF-005 — single-file whole-file context; needs a UX ruling - DIFF-007 — diff:<largefile> silently empty (outtoks overflow) - DIFF-009 — tree diff silently drops unreadable files (exit 0); to-set guard landed untagged; open: CI verify, deletion-loop soft-skip, signature B
- DOG-001 — umbrella: WEAVE → dog/ columnar rewrite; only the DOG-005 cut-over + retire remain - DOG-005 — graf cut-over: fix WEAVEApply replay glue; be-patch-15 (gates cleared: DOG-003/004 landed) - DOG-007 — libdog split done; open: publish (libdog abc pin 11 ahead of libabc origin → fresh clone can't init; beagle push target ambiguous) - DOG-008 CRIT — WEAVE codec trusts wire inserter/remover indices + token offsets → OOB write/read; validate + one decoder - DOG-009 HIGH — HOME adopts untrusted .be anchors (CVE-2022-24765 class): store-root redirect, .. escape, symlink-follow, TOML injection - DOG-010 HIGH — ULOG row injection via unescaped URI bytes + one-bad-line permanent rebuild DoS - DOG-011 HIGH — HUNK BASS use-after-rewind in relay; unified-diff 4096-cap drops lines / inconsistent @@ headers - DOG-012 HIGH — BRAM fallback double-counts region (silent wrong diff); unseeded-hash equality; align/recursion hardening - DOG-013 MED — dog/ reuse: dup WEAVE decoders, hand-rolled u64map vs HASHx, dup ULOG walks + HUNK render blocks - DOG-014 MED — git/PACKResolveOfs ping-pong sizing invariant (half<=baselen) undocumented → latent heap overflow - DOG-015 MED — git/IGNOGlob catastrophic backtracking ReDoS from an untrusted .gitignore - DOG-016 LOW — correctness/API grab-bag: signed-overflow ts, sha1 aliasing, unchecked FILE_WANT_BUFSfd, NEILShift bound - DOG-017 MED — WEAVEMerge global qsort ≈ half the merge → anchor bucketing + probe-free DFS (retroactive; implemented, awaiting landing)
- KEEP-003 HIGH — keeper post self-deadlocks on the per-shard .lock (its receive-pack child)
- ABC-005 CRIT — S/Sx/BUF slice-edit primitives: s_purge skips tail (LIVE), $rm wrong memmove, u8sPop head/tail, sDrain contract - ABC-006 HIGH — Bx.h bSplice byte/element mix, bReMap shrink OOB, bAcquire align/overflow - ABC-007 HIGH — LSM/Y merge: LSMMore unchecked memcpy, LSMSort silent data loss, Yx qsort b8-comparator UB - ABC-008 HIGH — HEX low nibble unchecked, OKscan matches "KO" not "OK", RON/ZINT feed-contract breaks - ABC-009 HIGH — TLV drain misparses own huge records (stream desync); probe shift UB; unaligned leftovers - ABC-010 MED — overlong UTF-8 accepted, JSON surrogate pairs → CESU-8, decimal drains wrap u64 silently - ABC-011 HIGH — HTTP serializer emits zero headers (same-pointer slice); empty reason-phrase rejected - ABC-012 HIGH — NETInfo returns OK w/o copying result, aNETAddress stack OOB, bind walk aborts, CURL OK-on-OOM - ABC-013 HIGH — FILEFlushThreshold loses data on short write, FILE_BOOK uninit sentinel, FSW watches unremovable - ABC-014 HIGH — PACK crafted-trailer wild pointer, PACKClose leak, SLOG 64-vs-127 skip mismatch, NESTFeed self-corrupt - ABC-015 MED — templates: SSTx.h bit-rot (ruling), HASHx stale-hash converge, MSET wrong-comparator seek, X-clobber traps - ABC-016 MED — bedrock: popc64 32-bit builtin, sha256empty unaligned reads, MAIN exit truncation, SAN.h gaps, OK.h statics - ABC-017 MED — build/CI: no -Wall, WITH_INET+fuzz never in CI, LEX generator drift (fbreak vs goto) blocks regens - ABC-018 GATED — style sweep: DNS/NFA manual parsers, slice-from-arith cluster, naming/error-code drift
- RON-001 — clamp landed ffc0624b (dog/abc/RON.c); open: generators must not emit ms≥1000 (keeper keep_next_pup_key, jab _ulog_now)
be status view.
- STATUS-004 — classifier reports del for an untracked-path delete (status 1 del vs post POSTNONE); classify.js must gate del on baseline presence
log: view.
- LOG-004 — TTY jab log EMFILEs on a ~130-pack store; probable fd/mmap leak in be/ JS store reads (piped log + status fine)
jab JS runtime (src/jab bindings).- JAB-006 MED — buf.cpp breaks API.md: Buf.feedStr silently truncates on full IDLE; io.book/close/trim documented but unimplemented (blocks BE-017) — from the 2026-07-07 be/ review
- JS-026 — richer extension exit codes (no process.exit; jab main.cpp maps return→0/throw→1 only) - JS-037 — pack feed base offset|hash, REF_DELTA (JS-036 gate cleared 742c06ff) - JS-096 port 10 beagle/test/get store-internals cases to jab get (be/test/get) - JS-097 MED jab get aborts the whole checkout on a committed .be/.git tree entry (should skip silently, like native POST-015) - JS-099 HIGH pack-run naming collides same-tick (ingest.js ron.now) → unindexed/clobbered runs; per-site buildIndex pairing verified done - jab runtime code-review batch (JS-101..115, 2026-07-07, proposed) — see JS README; HIGHs: - JS-101 HIGH heap/hash/sort leaves read args[] past argc — OOB read from plain JS - JS-102 HIGH ulog handle = raw pointer in a JS number — double free / UAF / forgeable - JS-103 HIGH ULOG writers drop URILexer ok64 + bypass DOGCanonURI — silent log corruption - JS-104 HIGH Socket.write FIFO linear growth — O(n^2) memcpy under backpressure - JS-105 HIGH abc.index re-sorts the memtable on every read - be/ code-review batch (JS-065..090, 2026-06-25) — see JS README; by severity: - JS-066 HIGH .gitignore glob ReDoS (REGRESSED: the 06-25 fix never reached be/) - JS-072 HIGH patchscope.lca stale merge base + unbounded - JS-085 HIGH log.js test-only _packs() + dup resolveHexAny - JS-067 MED wire.js ssh host argv injection + unquoted PATH - JS-070 MED untrusted regex per-line ReDoS - JS-074 MED registry.build masks module load errors - JS-076 MED wire.fetch leaks child stdin fd - JS-077 MED orphan keeper pack on lost CAS - JS-080 MED put rewrites wtlog per arg O(N^2) (proposed ulog.appendInPlace API died with job.js — needs a new streaming helper) - JS-081 MED bro fd-1 monkey-patch re-entry (JAB-029) - JS-086 MED store.js god module split + reader.shard - JS-087 MED core/shared depend upward on view/ (shQuote) - JS-088 MED require-path resolution dup 5x - JS-089 MED loop→bro→loop require cycle - JS-083 MED checkout.apply empty file on missing obj (elevated: submount.js now calls apply — path is LIVE) - JS-084 LOW confirmed-minor cleanup batch - JS-090 LOW modularity cleanup batch - JS-091 LOW rev-anchored path descent #<sha>./path broken in size/blob/type (← JS-082)
- CODE-020 — be/ JS duplication: wtblob+wire groups landed 57ff502a/69e56b20; open: resolveHashlet/isMeta reconcile + uriarg/hunkbuild/fs/tok32 extracts - CODE-021 — be/ JS dedup net ≥1000 LoC reduction target + accounting (quantifies CODE-020); adds verb-entry factory + beCtx shim + spot/bro/store/argline twins
- MARK-001 MED — same-depth list continuation rendered as nested <p>; FIXED in-tree (uncommitted), pending land + re-render + ~/bin/mark redeploy - MARK-002 HIGH — output cap len*8+16384 under-sizes dense-todo pages → wholesale BNOROOM, fails whole dir builds - MARK-003 HIGH — unknown CLI flags silently ignored; a --strict typo disarms the CI gate (needs MARKARG) - MARK-004 MED — EOF inside an open fence misnests </li></ul> into <pre><code> - MARK-005 MED — quote-marker continuations render per-line: wrapped reflinks break, quotes skip budgets - MARK-006 MED — .md handled inconsistently (walk/dropext/refdef vs implicit links) → dead links; needs a ruling - MARK-007 MED — >512 refdefs silently dropped → links misresolve to implicit targets, no warning - MARK-008 LOW — CRLF input leaks r into HTML + budget counts - MARK-009 LOW — mark_refdef hand-rolled byte scanner (ragel doctrine), scanned twice per line - MARK-010 LOW — raw stack arrays/indexing vs a_pad/carve/u8csAt idioms (with MARK-007)