Summary
When bones doctor runs, the first banner of the output reads === edgesync doctor ===. Confirmed by strings /opt/homebrew/bin/bones | grep edgesync:
The string is hardcoded in EdgeSync's cli/doctor.go and inherited by every consuming binary (bones, possibly others) that runs the EdgeSync doctor as a sub-doctor.
Why this is confusing
Anyone running bones doctor for the first time sees a banner from a tool they've never heard of and assumes they ran the wrong thing. The bones doctor then continues with its own === bones substrate gates (ADR 0034) ===, === bones swarm sessions ===, etc. — making it look like two unrelated tools ran in sequence.
A surface owner doing post-spike triage caught this; their report rated it a P2 cosmetic issue but consistently re-mentions it as the most jarring "first impression" issue across multiple operators.
Proposed fix
Make the banner reflect the invoking binary, not the EdgeSync source. Two viable shapes:
(a) Take the program name from os.Args[0] (or a configurable parameter passed to the doctor entry point):
banner := fmt.Sprintf("=== %s doctor ===", filepath.Base(os.Args[0]))
fmt.Println(banner)
(b) Drop the EdgeSync banner entirely when invoked as a subroutine, and let the consuming binary emit its own banner above its full doctor output.
(b) is cleaner architecturally (subroutines shouldn't emit branding); (a) is a one-line fix.
Acceptance criteria
File in scope
cli/doctor.go in this repo. Probably a 1-3 LOC change.
Summary
When
bones doctorruns, the first banner of the output reads=== edgesync doctor ===. Confirmed bystrings /opt/homebrew/bin/bones | grep edgesync:The string is hardcoded in EdgeSync's
cli/doctor.goand inherited by every consuming binary (bones, possibly others) that runs the EdgeSync doctor as a sub-doctor.Why this is confusing
Anyone running
bones doctorfor the first time sees a banner from a tool they've never heard of and assumes they ran the wrong thing. The bones doctor then continues with its own=== bones substrate gates (ADR 0034) ===,=== bones swarm sessions ===, etc. — making it look like two unrelated tools ran in sequence.A surface owner doing post-spike triage caught this; their report rated it a P2 cosmetic issue but consistently re-mentions it as the most jarring "first impression" issue across multiple operators.
Proposed fix
Make the banner reflect the invoking binary, not the EdgeSync source. Two viable shapes:
(a) Take the program name from
os.Args[0](or a configurable parameter passed to the doctor entry point):(b) Drop the EdgeSync banner entirely when invoked as a subroutine, and let the consuming binary emit its own banner above its full doctor output.
(b) is cleaner architecturally (subroutines shouldn't emit branding); (a) is a one-line fix.
Acceptance criteria
bones doctorno longer emits=== edgesync doctor ===as its first lineedgesync doctor(if such a CLI exists) still produces a sensible bannerFile in scope
cli/doctor.goin this repo. Probably a 1-3 LOC change.