be put/be post leak a sub's empty-put PUTNONE cascade
A 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.
already success (0) — this is output hygiene, do not change the status.
an empty sub as an error at all.
PUTNONE as abenign 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.
(:4266): e.g. capture/blackhole the child's stderr in 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.