PR #544 follow-ups: publish.sh's header names a caller that no longer calls it nf-tk2m ← Beads

closed priority 2 task unassigned session:publish-header

Twinned from https://github.com/cfsh/ninefold/issues/545 by tools/beads/import_github.py's reconcile pass.

Suggestions from ninefold-reviewer's review of #544. All three are one-line comment accuracy, all in the same family the PR already fixed nine of — none is worth another review cycle, and #544 is CONVERGED with these outstanding.

1. tools/playtest/publish.sh:13 names a caller that no longer calls it

``` # f5.py also calls it, and both callers read the EXIT CODE (#373 item 5): ```

Neither clause is true at 6691a96:

The prior text (f5.sh:85 also calls it) was true when written; the blanket .sh.py pass turned it into a live false claim. This is the file a future session reads before deciding whether the one non-optional shim can go, so its header should be exact. Suggested: say the game is now the only caller, that f5.py calls publish.py directly, and keep exec justified on its own terms (it preserves the exit code for the day something reads it).

2. presubmit.py:305-317 justifies a REQUIRED doctor check with call sites that no longer exist

The block requiring the bare python name reads:

> five live call sites still shell out to the BARE name — probe_all.sh:31 and probe_gate.sh:127,135,226,294 — and they do not migrate until pieces 5 and 9

Pieces 5 and 9 landed (#472, #520) and those call sites went with the original shell; #544 then deleted both files outright. So a required=True machine-setup check now rests on a premise that is doubly dead, and --doctor goes red on a box with python3 and no python — the Debian/Ubuntu default, i.e. exactly what the WSL 2 move in #458 would produce. Flagged as "not this PR" in the second #544 verdict and it stayed that way, correctly; the decision (demote python to optional, or restate the reason) belongs to whoever owns --doctor.

3. tools/tests/test_probe_gate.py:97-98 — doubled words from the edit

``` which is what makes the migration safe for an older an older probe_all or a caller reading a captured log. ```

Introduced by the F5 fix. Cosmetic.

---

Related, and the reason this class keeps recurring: nothing gates a doc pointer against the filesystem. #544 needed three review rounds for exactly one failure mode — durable text naming a file that no longer exists — and the sweep that was supposed to catch it was keyed on removed basenames, so it could not see CLAUDE.md's "the .sh is an exec shim" (named by extension only) or item 1 above (named by the *caller*, not the callee). A presubmit check over runnable-command shapes (./x.sh, bash x.sh, res://…/x.sh) that resolves each against the tree would have caught the runnable half mechanically, and the provenance carve-out survives it because provenance never appears in command position. That is #542's shape with a concrete, cheap mechanism attached — worth folding into #542 rather than filing separately.

Dependencies

None.

Comments

No comments.

Add a comment