A recursive be post at the parent stages a 160000 gitlink bump INSIDE a sub's shard for a grand-sub that never changed, then leaves it uncommitted — the sub shard is left dirty with an orphaned no-op put. Live capture (glitch): posting beagle-journal left beagle reading 1 put (put abc) while abc stayed clean at the SAME pin 6e3b93f8, no commit. This is the inverse of SUBS-026 (a real bump DROPPED) and violates SUBS-027's POSTNONE→no-bump contract. See Submodules.
Two-level mount beagle-journal → beagle → abc; abc clean and pinned at 6e3b93f8 throughout. Full transcript in glitch.
status:beagle/abc ?6e3b93f8… 237 ok — clean, pinned, nothing staged.be post 'JS-015..JS-024…' recursed post-order: printed post beagle/abc then put beagle#5b11dad9 (the legit parent gitlink bump), committed parent ?7a97cec1.status:beagle shows 17:16 put beagle/abc / 1280 ok, 1 put; cd beagle confirms 17:16 put abc; cd abc shows ?6e3b93f8… 237 ok — same sha, NO commit.abc in beagle's shard though abc is unchanged (no Advanced bit) AND beagle made no commit (POSTNONE) — the row is a phantom, left dangling.be put beagle/ (no recursion) earlier did NOT do this; only the recursive post did.be post stages a sub gitlink bump ONLY when the sub's pinned tip differs from the parent gitlink (Advanced); an unchanged pin yields PUTNONE, never a put-row.SUBSDirty Advanced axis (R4.base DESCENDS R1) to gate the bump; do not re-parse the tree per verb.abc/.—
test/post/50-sub-unchanged-no-orphan — clean tree + clean pinned sub, plain be post; asserts no orphaned put vendor/sub / N put after. Depth-1 clean post models the depth-2 intermediate (a level that makes no commit). Reproduced the 1 put orphan, then went green.sniff/POST.c — the be put <sub> sub-mount short-circuit (sniff/PUT.c) staged the gitlink row UNCONDITIONALLY; the -q on recursive children masks the child POSTNONE so bepost_bump_sub runs for every sub. Fix: gate the row on tip ≠ baseline pin (KEEPTreeDescend), so an unchanged sub returns PUTNONE.bepost_bump_sub (beagle/BE.cli.c) now swallows the child be put PUTNONE low-byte as a no-op (was BEDOGEXIT) — a POSTNONE sub leaves no staged child gitlink put.test/post/49-sub-advanced-autobump.3fd64016 ("stage sub gitlink put only when tip!=pin"): the sniff/PUT.c tip-vs-pin gate + beagle/BE.cli.c PUTNONE tolerance.test/post/50-sub-unchanged-no-orphan (was the 1 put orphan, now green); test-guard hardened in c2e1b0d9 (asserts the post doesn't hard-error on the now-PUTNONE sub — verified it fails if the BE.cli.c arm is reverted). Full suite 413/413 (only the 2 network tests CURLtest/POLtest skipped — no outbound net in the sandbox).