Problem
basectl ci is easy to misread as "run the CI pipeline" or "create a local CI/Ubuntu runner." In the current implementation, it is narrower: it delegates to setup, check, and doctor with CI-safe defaults such as non-interactive behavior, BASE_CI=true, CI=true, notification suppression, and JSON-capable output.
That behavior is useful, but the subcommand name can confuse users who expect it to run tests, launch GitHub Actions locally, or spin up an Ubuntu/Multipass instance.
Desired outcome
Make the command model self-explanatory so users understand that CI is a mode for Base setup/readiness/diagnostics, not a separate CI runner.
Scope
- Decide whether the long-term surface should remain
basectl ci setup|check|doctor, move toward flags such as basectl check --ci --format json, or add clearer aliases while preserving compatibility.
- Update CLI help and docs to state plainly that
basectl ci does not run project tests, create runners, launch Ubuntu, or execute GitHub Actions locally.
- Clarify the relationship among:
basectl ci check
basectl ci doctor
basectl ci setup
basectl test
bin/base-test
- the optional
linux-lab profile
- If a new alias or flag is introduced, update completions, command reference docs, and focused tests.
- Keep the existing behavior backward-compatible unless there is an explicit deprecation plan.
Non-goals
- Do not implement a local GitHub Actions runner.
- Do not make
basectl ci create or mutate Ubuntu/Multipass VM instances.
- Do not make
basectl ci replace basectl test or bin/base-test.
- Do not change manifest command trust behavior.
Acceptance criteria
- The CLI help text makes the CI-safe delegation model clear.
docs/basectl-ci.md, docs/command-reference.md, and README references describe the difference between basectl ci and basectl test.
- The docs explicitly say that Ubuntu instances are created manually and that
linux-lab only prepares/checks local VM tooling.
- Tests cover any changed help text, aliases, flags, or completion behavior.
- Existing
basectl ci setup|check|doctor callers continue to work, or a deliberate deprecation path is documented.
Demo impact
New users should not come away thinking Base has a local CI runner. The intended story should be: Base exposes CI-safe readiness/setup/diagnostic commands that CI systems can compose with their own runners and test commands.
Problem
basectl ciis easy to misread as "run the CI pipeline" or "create a local CI/Ubuntu runner." In the current implementation, it is narrower: it delegates tosetup,check, anddoctorwith CI-safe defaults such as non-interactive behavior,BASE_CI=true,CI=true, notification suppression, and JSON-capable output.That behavior is useful, but the subcommand name can confuse users who expect it to run tests, launch GitHub Actions locally, or spin up an Ubuntu/Multipass instance.
Desired outcome
Make the command model self-explanatory so users understand that CI is a mode for Base setup/readiness/diagnostics, not a separate CI runner.
Scope
basectl ci setup|check|doctor, move toward flags such asbasectl check --ci --format json, or add clearer aliases while preserving compatibility.basectl cidoes not run project tests, create runners, launch Ubuntu, or execute GitHub Actions locally.basectl ci checkbasectl ci doctorbasectl ci setupbasectl testbin/base-testlinux-labprofileNon-goals
basectl cicreate or mutate Ubuntu/Multipass VM instances.basectl cireplacebasectl testorbin/base-test.Acceptance criteria
docs/basectl-ci.md,docs/command-reference.md, and README references describe the difference betweenbasectl ciandbasectl test.linux-labonly prepares/checks local VM tooling.basectl ci setup|check|doctorcallers continue to work, or a deliberate deprecation path is documented.Demo impact
New users should not come away thinking Base has a local CI runner. The intended story should be: Base exposes CI-safe readiness/setup/diagnostic commands that CI systems can compose with their own runners and test commands.