CODE-062: a foreign bring-up failure is said only on a tty

Now
OPEN
Sev
LOW
Rep
///bee
Ask
gritzko
Rev
///bee#8cb69a0
See
BEE-065

Input

Context

index/index.js:1064:Wt foreignFailed reports through progress().note, and index/index.js:410:Wt gates every progress channel on io.isatty(2), so a piped run, the commit hook and bee http swallow a foreign bring-up failure and answer off whatever stale rows the read-only open finds. BEE-065:23:uS rules the opposite: a refused repo names itself on stderr rather than stalling mute. Found in the 2026-09-18 index review.

Goals

Route refusals to an ungated stderr write; keep the progress ticks tty-only.

WIP

TODOs

Design decisions

progress()'s private raw became a module-level sayErr, the one ungated stderr write; tick/note/done keep the isatty(2) gate and go through it, foreignFailed calls it straight. The refusal is still said once per gitdir.

Blockers and bummers

test/coldfan/run.sh C8 CONTRADICTS this ticket: it asserts [ ! -s "$WORK/c8e" ] — "an unwritable be/ degrades to the read-only open, exit 0, no new run", in silence. With the fix that file holds bee: <repo>: index bring-up failed (Error: cannot write to the index) and the check fails. Not amended (the loop forbids it): gritzko rules whether C8 loses its silence half. INDEXES.mkd:277:6K says it in prose too — a refusing repo "falls back to the read-only open and then to silence"; untouched too. BEE-065:22:uS reads "never an error", which BEE-067 "a bring-up that failed says so once" already amended; the tty gate was the bug. coldfan leg 5 lost BOTH processes once in four runs — the suite's own known ~1/3 SIGBUS race, older than this — and the other three runs fail C8 alone.

Outcome