be post commits staged MODIFICATIONS but silently DROPS staged ADDITIONS (new rows) — the added files stay staged, never land in the commitbe post writes a commit containing only the staged mod rows (modified tracked files)
and SILENTLY OMITS the staged new rows (added files). The additions remain staged after
the post — the commit is incomplete and no error is raised. (Terminology: in be status,
new = a STAGED add, unk = unstaged/untracked, mod = staged modification.) Any commit
that introduces new files — a merge that brings them in, or a plain be put <newfile> +
be post — loses them from the recorded tree. Live-hit landing the PATCH-003..009 merge.
Method Issues.
gritzko@spot ~/journal/beagle): a be patch ?62b7c62a!
merge staged 5 mod rows (put beagle/BE.cli.c, beagle/SUBS.c, beagle/SUBS.h,
sniff/PATCH.c, test/CMakeLists.txt) AND 12 new rows (added files under
test/patch/36-cherry-pick-hashlet … 42-diverged-sub-merge).be post! --nosub 'PATCH-003..009: numerous fixes to be patch' → commit a16aa332
whose body lists ONLY the 5 mod rows. No new/add row was committed.be status AFTER the post: ?a16aa332… 1335 ok, 12 new — the 12 additions are STILL
staged, not in the commit. So be post dropped every staged add while committing every
staged mod. No warning, exit 0.a16aa332 committed test/CMakeLists.txt (which references the new test
dirs) WITHOUT the test files themselves — an internally-inconsistent commit.! (force) only overrode the benign POST-006 marker scan; the drop is unrelated
to force — verify it reproduces with plain be post too.be post commits ALL staged rows — both mod (modified tracked) and new (staged
adds). A staged addition lands in the recorded tree; it is NEVER silently left staged.be status shows them committed (0 stray new).BEActPost
/bepost_* in beagle/BE.cli.c or the sniff post commit that enumerates staged rows).
Repro-first (CLAUDE.md §17): a hermetic test that stages BOTH a new file and a mod,
posts, and asserts BOTH are in the commit (and be status is clean after). Don't
regress mod-only posts or empty-put no-ops (BE-008). Beagle-only, C.new/add rows are excluded while mod/put rows are kept (a row-kind filter, a wtlog
range/tail bound, or the tree-writer skipping add entries). Repro plain vs !/--nosub.be post,
assert BOTH commit (test/post/56-selective-post-keeps-absorbed-adds) 100cd237sniff/POST.c:584 && !has_thr exempts absorbed adds) 100cd237+8460c578~/journal/beagle; the fix code
landed (a16aa332) but its repro tests (36-42) were left staged-but-uncommitted by
this bug, leaving a CMakeLists.txt-references-missing-tests commit.100cd237 (2026-06-27). Root cause: post_classify_step's
"Untracked + selective = ignore" guard (!src_base && c->any_pd →
return OK, sniff/POST.c:584) fired BEFORE the POST-005 has_thr
(absorbed-tree) rescue, so a patch-added new file (on disk,
stamped, no put row) was dropped in SELECTIVE mode (any explicit
put present). Implicit/mod-only posts were fine (any_pd NO).
below still validates them. Repro test/post/56-selective-post-keeps
-absorbed-adds (RED→GREEN); full ctest 351/351, ASAN-clean.be put <newfile> add was NEVER dropped (the
has_put branch handles it); only patch/absorb-introduced adds in
selective mode. New ticket KEEP-003 filed: a keeper post self-
deadlock on the libabc .lock (parent holds, its receive-pack child
re-acquires) blocked the clone — abc/ sourced from the pinned tree.8460c578 ("staged-adds dropped fix", same day) rides
this ticket; fix verified in-tree (sniff/POST.c:584/646 has_thr guards,
test/post/56 present). Filed 2026-06-27 from the PATCH-003..009 land, CLOSED.