A be post that reaches a DETACHED submodule worktree refuses POSTDET ("re-attach to a branch first") and aborts the whole commit with BEDOGEXIT — seen live: be post! from beagle → post abc → POSTDET; be post --nosub from be → POSTDET. Per the corrected Submodules §"Committing detached subs" two clauses must hold: (1) a detached sub still COMMITS, leaving its wt detached at the new commit ?newhash; (2) a parent commit puts the sub onto its synthetic dot-branch ?/<sub>/.<parent>/<pbranch> by bumping the 160000 gitlink. POSTDET-refuse is correct ONLY for a top-level wt (DIS-009 / GET-024); a submodule is the exception. Blocks landing DIS-052, DIS-042, COMMIT-003 (all sit on detached subs). Live 2026-06-26. Method /meta/work.
be post! from ~/journal/beagle → post abc / sniff: post: refusing on
detached wt — re-attach to a branch first / POSTDET / BEDOGEXIT. Same from
~/journal/be (be post --nosub → POSTDET).beagle, abc, be) read detached ?<sha> because the journal post
recursion recorded detached cur-tips and never attached them to the dot-branch.post_is_detached_wt (sniff/POST.c:945, DIS-009) flags empty-fragment +
40-hex-query as detached → POST refuses; GET-024 confirms the refusal is
CORRECT for a top-level wt. The submodule case is the unhandled exception.be get ?<branch> resets the wt (losing uncommitted work);
re-attach-by-NAME is SUBS-023 (closed WON'T-FIX: re-attach is by PIN, i.e.
clause (2) here, not a named get) — so there is NO recovery route today.be post on a detached SUB (parent-driven OR standalone) COMMITS, leaving
the wt detached at the new commit ?newhash — never POSTDET.be post that bumps the sub's 160000 gitlink (re)attaches the
sub onto ?/<sub>/.<parent>/<pbranch> at the new tip (create if absent, FF if
present) — the post-order R4→R2→R1 drive (Submodules §four-records).POSTDET refusal stays intact (DIS-009/GET-024);
ONLY the submodule context changes.SUBSDirty / SNIFFSubReadTip / the SUBS-027b R2 emit;
ragel/REFS only, no branch-string hand-rolling. Repro-first (CLAUDE §17).test/get/33).be carries the POSTDET bug).sniff/GET.c, sniff/test/*) and DIS-042 (test/post/40, test/post/53,
test/post/INDEX.md). Keep SUBS-035's files DISJOINT (sniff/POST.c,
beagle/SUBS.c, beagle/BE.cli.c, sniff/PUT.c + a FRESH test dir); do not
touch those files, and append to a shared INDEX without disturbing their lines.<wt>/.be as a FILE; a top-level wt has it as a DIRECTORY. New
post_wt_is_secondary() mirrors PATCH.c's wt_is_secondary (POST-004) — one
consistent discriminator across PATCH and POST. The detached-wt POSTDET refusal
now gates !detached_sub; top-level keeps refusing (DIS-009/GET-024).?<newhash> shape (sha in query, empty fragment — same writer GET uses)
and advances NO branch REFS (no phantom trunk, DIS-053); the commit is ref-less
until the next parent post re-attaches it.bepost_recurse_cb → bepost_synth_child_uri → child POST-onto-synth +
bepost_bump_sub + SUBS-027b R2 emit already creates/FFs
?/<sub>/.<parent>/<pbranch> and bumps the gitlink. Repro confirmed R1/R2/R4 all
land; the only gap was clause 1's standalone-detached refusal.be post COMMITS,
no POSTDET, wt reads ?newhash (still detached). test/post/54.be post bumps the sub gitlink AND the sub lands on
?/<sub>/.<parent>/<pbranch> at the new tip (ref exists, points to the bump).sniff/POST.c post_wt_is_secondary + detached_sub (refuse/REFS/cur-tip arms).get/33); SUBS-006/019/027b green;
ctest 467/467 (WITH_SSH) + 376/376 (build-debug), 0 fail.POSTCommit
(sniff/POST.c:2572) refused POSTDET for ANY bare detached wt with no
target branch. A submodule mount is detached at the pin BY DESIGN, so a
standalone be post inside it (and be post --nosub from a sub) hit the
refusal — there was no top-level-vs-sub discriminator (PATCH already had one,
POST-004; POST never got it). Clause 2 was already correct.sniff/POST.c): (a) new post_wt_is_secondary() at wt_is_secondary); (b) bare_detached/detached_sub at
POSTCommit entry !detached_sub; (c) skip the trunk REFS
advance for detached_sub (?<newhash> shape for detached_sub (detached_sub (~2669). Clause 2 unchanged (existing bepost_recurse_cb).test/post/54-sub-detached-standalone-commit (SSH-gated, registered in
test/CMakeLists.txt) — RED on revert (POSTDET), GREEN with fix. Asserts:
clean detached sub no-ops (no POSTDET), dirty commits + stays detached
?<40hex> + ref-less, parent post re-attaches ?/sub/.parent + bumps gitlink.get/33) + SUBS-006/019/027b (post/29/39/49/50/51/52) green.sniff/GET.c, sniff/test/*; DIS-042 test/post/40,
test/post/53, test/post/INDEX.md) NOT touched. STOPPED before committing.build-debug/bin/be is the
bootstrap that can now drive the commit of the detached beagle/abc/be subs
(incl. DIS-052/DIS-042/COMMIT-003) — the prebuilt build/bin/be still
carries the POSTDET bug.