Live incident (gritzko, 2026-07-18, maintree ///be/, cwd be/test): be post '?' → `JS exception: ? can not be fast-forwarded` (the post.js:327 FF-gate refusal in advanceBranch). Probes say the refusal is WRONG — the trunk tip is on cur's own line:
jab 'sha1:?' → 00101ce103ac... ("correct post URI mishap", Fri17) — the trunk tip.jab log (cur) → 0d47c8ec → 226c6228 → 00101ce1 → ... — trunk tip is cur's 3rd entry; jab 'log:?' shows the same line from 00101ce1 down.type:?#00101ce1 and type:#226c6228 both → commit — objects present and readable in the store.dag.isAncestor(reader, expectedOld=00101ce1, parent=cur tip) returned false on ancestry the log view itself renders — trunk should FF to cur.Incident 2, SAME class (gritzko, 2026-07-18, journal root, :post in bro): "err: broken tree: track and base share no common ancestor" (shared/quad.js:146, the BRO-030 quad merge-base). Wtlog+reflog forensics:
post ?#08e9fdb2 HALF-landed: wtlog row 26717I7028 written, but the store refs row is stamped 26718Cf30e (today) — the refs advance died with the post (post was being fixed that day, "correct post URI mishap"). One-invocation rows share one be.now stamp — the split stamp proves the half-write.:post repaired the advance (trunk → 08e9fdb2 = base; commit:#08e9fdb2 confirms parent 7e68484e = old trunk), THEN quad threw "no common ancestor" on track == base — the walk fails even on identical-sha lines.~/.be/journal/*.graf.idx is Jun 29; every trunk commit since (db7d2bd8, 7e68484e, 08e9fdb2) is UNINDEXED, and the walk resolves ids via the index (idOf, shared/dag.js:261-263) — unindexed commits dead-end it. Incident 1's be store presumably same staleness.be#0d47c8ec, html#3f0d1736) are still UNCOMMITTED — the :post aborted at the quad throw before committing.Repro first, then make post ? FF the trunk in exactly this shape.
parent/ref-key resolution divergence between post's reader and the views.log/log: twin walk succeeds on the same line — explain the difference.? refusal): postSubs fans ctx.args into
every mounted sub, so the sub's postOne re-ran the ? bare-
advance on the SUB's OWN shard. be/test's shard (beagle-ext-
tests) trunk 57b4996a vs pin 30b12f5b genuinely diverged, and
that sub-shard refusal bubbled up spelled as the parent's ?.
POST-030 already rules a recursed sub must not self-advance;
it was enforced only for the no-Query form. Fix: postOne
returns early on ctx._sub for the Query bare-advance arm too
(verbs/post/post.js:863 arm). The parent then FFs fine.status (and the :post that renders one).
degrades to the no-track rule (track:=base), per the wiki
Status.mkd degenerate-roots family. The genuine two-real-
tips broken-tree refusal STAYS (test/quad/model.js leg 3).on pre-fix code, exact incident exceptions)
fan-out (1) + dangling re-clone pin (2), evidence above
runs were complete; heal-on-open verified on copies)
? advance)status renders all sub hunks; be post ? FFs trunk
00101ce1 -> 0d47c8ec; journal commit lands staged
be/html gitlinks. Live maintrees left untouched — the
real :post / post ? re-runs are gritzko's call.
? typed INSIDE
be/test still refuses, now correctly about that shard.Fixed in worktree work/POST-031, commit 611f5851 (+ test-sub 019ad68b): postOne skips the Query bare-advance for a recursed sub (post.js), quadModel degrades a dangling track pin to no-track instead of throwing (quad.js), new repro test test/post/sub-diverged. Suite 294/294. NOT merged.