POST-027: post invocation matrix — uncovered test cells

Now:
OPEN

Audit of every /wiki/POST "Summary of invocation patterns" bullet crossed with 5 target states (absent, at-tip, ahead, behind, diverged) against be/test/. 5 parallel workers read every relevant run.sh. Verdicts: 14 cells covered, 30 uncovered, 0 MISMATCH (no test asserts an outcome contradicting the spec). Two spec-code gaps surfaced (bare remote-track post, ssh://host#msg).

Input

Context

Only 4 call sites in all of be/test/ run a truly bare jab post; most states are pinned via explicit ?branch///X/ssh:// slots or not at all. Happy-path FF cells are green, the refusal ladders are mostly unasserted.

Goals

Cover every cell below with a minimal repro-first test in be/test/ (post/, sub/, wire/ house style); the two spec-code gaps need an implementation ruling first.

Constraints

No test edits beyond adding the missing cells; POST-025 owns the wire verdict recode — crosslink, do not duplicate its cells here.

WIP

Design decisions

Cells 1b-i/ii/iii/v and 4-i/ii/iii/v share advanceWorktree — one suite parameterised over bare-track vs explicit //X entry covers both rows.

TODOs

Tests landed 2026-07-16 in test/post/ (26 new suites, CMake glob-registered); [v] = suite exists AND is green; RED = suite exists as a kept repro, bug open. -v 1a-iii branch track ahead (contains cur): post/adv-contains — RED repro, see BUG-1 below -v 1b/4-i //X target absent: post/wt-target-none (NAVNONE fires; post.js:324 WTNONE guard is shadowed dead code) -v 1b/4-ii //X target at cur's tip → POSTNONE: post/wt-target-eq -v 1b/4-iii //X target ahead → POSTNONE "already contains": post/wt-target-ahead -v 1b/4-v //X target diverged/unrelated → POSTNOFF: post/wt-target-nonff -v 1c bare post on a detached wt refuses: post/bare-detached (message is still the commit-shaped "no changes since base") -v 1c patch exception bare/post '#' msg reuse: post/bare-patch-reuse — RED repro, see BUG-2 - 1d bare post on a remote track → FF-push, all 5 states: UNIMPLEMENTED (needs ruling + advanceTrack arm) -v 2a-i selective first-ever commit: post/commit-selective-first — RED repro, see BUG-4 -v 2b-iii commit-all #msg on an already-ahead wt: post/commit-ahead -v 2-v #msg commit on a diverged wt SUCCEEDS, no ref gate: post/commit-diverged -v 2x recursed sub commit message [dog] spice: post/sub-msg-spice — RED repro (verbatim today), see BUG-5 -v 3-ii explicit named ?name at-tip → POSTNONE: post/adv-named-attip -v 3 ?.. parent FF + POSTQRY-on-trunk: post/adv-parent -v 3 literal ?. own-branch FF + at-tip POSTNONE: post/adv-dot -v 3 ? trunk at-tip/ahead/diverged: post/adv-trunk-states — ahead leg RED, same BUG-1 -v 4 dirty //X target 3-way merged, not clobbered: post/wt-target-dirty -v 4 conflict refuses BEFORE the target base moves (GETCONF): post/wt-target-conflict -v 4 explicit post //self → POSTNONE: post/wt-target-self — RED repro, see BUG-3 -v 4 detached target stays detached (#tip row shape): post/wt-target-detached -v 5-i create-on-push to an absent remote branch (ssh): post/push-create -v 5-ii remote at cur's tip → POSTNONE: post/push-eq - 5-iii remote ahead → BEHIND-class refusal: POST-025's recode owns it -v 5-v unrelated push → POSTNOFF: post/push-unrelated; diverged over http: post/push-nonff-http - 5 https and be:// push transports: still zero tests -v 5 POSTNOREF ?-less host URI: post/push-noref -v 5 POSTNONE push from a fresh never-committed wt: post/push-fresh - 5 ssh://host#msg commit-then-push: UNIMPLEMENTED (needs ruling + parseSlots host fragment) -v 5 e2e push saves the remote-tracking row: post/push-saveref

Blockers and bummers

2026-07-16 fix round (uncommitted, this worktree): BUG-1/2/5 fixed in verbs/post/post.js, BUG-4 in core/discover.js; their repros are green. Open: BUG-3 (design law), BUG-6/8 + MISMATCH-1 (pre-existing test edits need permission), DIS-072 fork (ruling).

Outcome

2026-07-16: full suite 238/238 green (10.6s; was 12 red of 236 at 96s). All work UNCOMMITTED in work/POST-026, awaiting gritzko's review + land.