be put/be post leak a sub's empty-put PUTNONE cascadeA be put/be post whose parent SUCCEEDS still leaks a spurious error cascade
from its recursion into an UNCHANGED submodule: the sub's internal put step fails
with sniff: put: no changes (or no eligible paths), an empty put put:
banner, then Error: PUTNONE and Error: NONE — all printed even though the
command succeeded and exits 0. An unchanged submodule must be a silent no-op on
recursion, not an error spray. Evidence: garbage.txt (landing JS-036 742c06ff
in a store-backed worktree with abc unchanged). Method: Issues.
be put (bare) staged js/cont.cpp/js/pack.hpp in the parent, then
recursed put put:abc → sniff: put: no changes + Error: PUTNONE +
Error: NONE, all on a successful put. See garbage.txt.be post 'JS-036…' recursed post abc → sniff: put: no eligible paths +
empty put put: + Error: PUTNONE + Error: NONE, THEN the real
post ?742c06ff. The garbage interleaves before the success row.Error: lines → one uniform line), POST-022/BE-007 (sub-push wrecked
output, landed). This is the unchanged-sub no-op case, none of the above.put/post recursion emits NOTHING — no
PUTNONE/NONE, no empty put put: banner; the parent output stays clean.be put with nothing to stage still reports PUTNONE
(user asked to put nothing) — only the internal sub-recursion path is silenced.PUTNONE as a
benign skip (silent no-op), not a propagated error — mirrors POST-019's
"suppress the standalone put banner for the internal path".be put -q <sub> with stdout
captured (BE.cli.c::bepost_bump_sub :3028-3098) and -q opens an
EMPTY-state HUNK table (sniff/PUT.c:1174-1193) — no banner, no PUTNONE;
becli folds *NONE→OK under -q (BE.cli.c:5255-5262). Landed untagged
(SUBS-029 3fd64016/c2e1b0d9 + 25/26Jun batch), verified at tip b0fb0ce4.be put sub recursion (BEActSubsRelay,
BE.cli.c:4254) deliberately passes NO -q (comment :4266) and
BERelaySub/be_recurse_capture capture stdout ONLY — the clean sub child
still prints sniff: put: no changes (sniff/PUT.c:729) + sniff MAIN
Error: PUTNONE + be MAIN Error: NONE (abc/PRO.h:384) on inherited stderr.be_recurse_capture
(SUBS.c:314-341) for the recursion path, or pass -q and detect no-op by
empty captured stdout as bepost_bump_sub already does (BE.cli.c:3085).put:<sub> relay hunk for a wholly no-op sub (the
PUT-003 residual): the non-quiet child still flushes its put: banner with
zero rows; needs the defer-banner/HUNKTableAbort change or the -q route.test/put/): parent dirty + unchanged mounted sub, bare
be put → assert stderr has no no changes/Error: PUTNONE/Error: NONE
and stdout no empty put:<sub> hunk; top-level truly-empty put keeps
PUTNONE (guard: test/put/09-sub-only-dirty-exit tail case).ctest verb-output tests stay green.be post arm landed (quiet captured gitlink bump
+ -q sub shards — no cascade); bare be put sub-recursion arm still emits
the sniff: put: no changes + Error: PUTNONE + Error: NONE stderr spray
for an unchanged sub. Kin POST-019 closed; the put arm stays this ticket.