Skip to content

feat: scaffold doctor diagnostics command - #57

Merged
dDevAhmed merged 14 commits into
mainfrom
feat/cli-016-doctor-scaffold
Sep 8, 2026
Merged

dDevAhmed merged 14 commits into
mainfrom
feat/cli-016-doctor-scaffold

Conversation

@dDevAhmed

Copy link
Copy Markdown
Contributor

Summary

Implements CLI-016 by adding the stellarforge doctor command shell and an internal diagnostic aggregation model without implementing the individual environment checks yet.

Included

  • typed diagnostic status/result/check/report model
  • modular internal diagnostic aggregation
  • safe conversion of unexpected check exceptions into generic failed diagnostics
  • deterministic pass/warn/fail rendering through the existing terminal output layer
  • stellarforge doctor registration in the root command
  • stable diagnostic exit code 5 for completed health checks with failed required diagnostics
  • exit-code reference update
  • tests for empty diagnostics, mixed pass/warn/fail aggregation, remediation rendering, safe exception handling, and exit behavior

Scope boundaries

This PR does not implement Node/npm, Git, Rust/Cargo, Stellar CLI, or Docker checks. Those remain CLI-017 through CLI-021.

It also does not introduce a public plugin system; checks are modular only as an internal implementation boundary.

Security

  • no shell execution
  • no environment or secret dumping
  • unexpected diagnostic exceptions do not expose original error messages
  • output continues through the existing terminal sanitizer
  • no new dependencies

Exit semantics

  • no failed diagnostics: exit 0
  • one or more failed diagnostics: exit 5
  • warnings alone remain non-fatal

Closes #19

@dDevAhmed
dDevAhmed merged commit 53a41b6 into main Sep 8, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

CLI-016 — Scaffold stellarforge doctor command

1 participant