Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
52ad910
refactor: UX improvements — reduce prompts and simplify doctor command
tonythethompson Aug 1, 2026
5dc3e08
fix: 2 findings — Remove stale DeactivateArgs yes fields; Remove stale A
qodo-code-review[bot] Aug 1, 2026
b95ab9f
fix: Remove obsolete activate yes hints
qodo-code-review[bot] Aug 1, 2026
a6c9fd8
fix: Update doctor documentation and hints
qodo-code-review[bot] Aug 1, 2026
3bc34fd
fix: 2 findings — Remove redundant prompting comments; Clarify concurren
qodo-code-review[bot] Aug 1, 2026
f8bea34
refactor: update command descriptions to reflect plugins+modules support
tonythethompson Aug 1, 2026
180eac8
fix: remove stale yes field from activate_test
tonythethompson Aug 1, 2026
f04c4e7
style: apply formatting
tonythethompson Aug 1, 2026
5c83980
fix: address PR review — remove stale --yes from test support, fix no…
tonythethompson Aug 1, 2026
59f4f92
Merge branch 'master' into refactor/ux-improvements
tonythethompson Aug 2, 2026
0f775bc
Merge branch 'master' into refactor/ux-improvements
tonythethompson Aug 2, 2026
15e6848
refactor: UX improvements — reduce prompts and simplify doctor command
tonythethompson Aug 1, 2026
09cf2a0
fix: 2 findings — Remove stale DeactivateArgs yes fields; Remove stale A
qodo-code-review[bot] Aug 1, 2026
e7cfa16
fix: Remove obsolete activate yes hints
qodo-code-review[bot] Aug 1, 2026
89f3b28
fix: Update doctor documentation and hints
qodo-code-review[bot] Aug 1, 2026
ae50dd1
fix: 2 findings — Remove redundant prompting comments; Clarify concurren
qodo-code-review[bot] Aug 1, 2026
f8716d0
refactor: update command descriptions to reflect plugins+modules support
tonythethompson Aug 1, 2026
a4b4930
fix: remove stale yes field from activate_test
tonythethompson Aug 1, 2026
8623a74
style: apply formatting
tonythethompson Aug 1, 2026
37e3884
fix: address PR review — remove stale --yes from test support, fix no…
tonythethompson Aug 1, 2026
c26f509
fix: apply CodeRabbit auto-fixes
coderabbitai[bot] Aug 2, 2026
e648e7f
fix: unbreak doctor tests after TTY confirm gating
cursoragent Aug 2, 2026
6af9a80
fix: address Copilot PR 68 review findings
cursoragent Aug 2, 2026
6d231f2
fix: keep doctor --json stdout as a single JSON object
cursoragent Aug 3, 2026
708b24e
Merge branch 'refactor/ux-improvements' of https://github.com/tonythe…
tonythethompson Aug 3, 2026
c5ef084
fix: import IsTerminal and rustfmt TryArgs
cursoragent Aug 3, 2026
2d81487
fix: address CodeRabbit doctor UX and test feedback
cursoragent Aug 3, 2026
32f4944
fix: harden doctor off-path skip test and snapshot refresh/repairs
cursoragent Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ src/
registry.rs — Registry management subcommands
activate.rs — Plugin + module activation (Phase 3 & 4); public entry: execute_with_candidate_runner
init.rs — `numan init [--refresh]`: Nu probe, paths cache, auto-configures official registry
doctor.rs — `numan doctor [--fix] [--yes]`: health checks + safe repairs (Phase 7.2; spec: docs/numan-doctor.md)
doctor.rs — `numan doctor [--scan]`: health checks + safe repairs by default (or report-only with `--scan`) (Phase 7.2; spec: docs/numan-doctor.md)
snapshot.rs — `numan snapshot list|inspect|delete|rollback` (Phase 5.3)
deactivate.rs — Plugin + module deactivation: journaled plugin unregister (`execute_with_unregistrar`); module full/partial (Phase 4 / Issue #22 PR2)
plugin_lifecycle.rs — Activate/deactivate-owned lifecycle boundary exposed to opt-in update orchestration (Issue #22 PR3)
Expand All @@ -64,7 +64,7 @@ src/
nupm.rs — `numan nupm status|inspect|import|diff`: nupm discovery + import + drift (Phase 6.1–6.3)
completions.rs — `numan completions <shell>`: bash/fish/zsh/powershell/nushell scripts (Phase 7.3)
setup.rs — `numan setup nu [VERSION]|remove|path|use <path>` + `setup loader`: Nushell bootstrap + nushell-loader install
try_cmd.rs — `numan try [--yes] [--no-activate]`: curated starter install + activate for current Nu
try_cmd.rs — `numan try [--no-activate]`: curated starter install + activate for current Nu
use_cmd.rs — `numan use <version>|latest|list`: activates a previously installed managed Nu version (no auto-download); writes the active-version marker after a PreMutation snapshot under the root mutation lock
nu_pin_offer.rs — Shared TTY offer to `setup nu <version>` + `init --refresh` on Nu mismatch
install/
Expand Down Expand Up @@ -109,7 +109,7 @@ tests/
fixtures/nupm/ — supported/rejected fixture corpus for parser/classifier tests
init_test.rs — `numan init` / `init --refresh` (vendor drift, managed-file revalidation)
completions_test.rs — shell completion script generation (Phase 7.3)
doctor_test.rs — `numan doctor` report-only, --fix auto tier, journal checks (Phase 7.2)
doctor_test.rs — `numan doctor` report-only (`--scan`), default auto/confirm tiers, journal checks (Phase 7.2)
nupm_compat_test.rs — Phase 6 integration tests (T13–T25, import/drift/manifest/activation/platform)
nupm_real_nu_test.rs — Phase 6.4 real-Nu #[ignore] acceptance tests (run with `cargo test -- --ignored`)
plugin_lifecycle_real_nu.rs — Issue #22 smoke marker (points at Stage 1 + active-update suite)
Expand Down Expand Up @@ -152,7 +152,7 @@ tests/
4. **Lockfile pins immutable paths** — cached artifacts retained while referenced
5. **Registry trust** — Ed25519 signatures over exact `index.json` bytes; bypass requires `NUMAN_ALLOW_UNSIGNED=1` (dev only)
6. **Artifact SHA256 is mandatory for plugins** — the install transaction bails if `sha256` is missing from a binary artifact
7. **State snapshots before mutation** — `create_snapshot()` before `install`/`update`/`remove`/`activate`/`deactivate`/nupm-import mutations; `numan gc` treats every snapshot's referenced payloads as live roots
7. **State snapshots before mutation** — `create_snapshot()` before `install`/`update`/`remove`/`activate`/`deactivate`/`init --refresh`/nupm-import/doctor repair mutations; `numan gc` treats every snapshot's referenced payloads as live roots
8. **Platform triple** — comes from `#[cfg(target_env)]` at compile time, not `std::env::consts` (see `core/platform.rs`; `LIBC` is a compile-time const)

## Development Workflow
Expand Down
4 changes: 4 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ uuid = { version = "1", features = ["v7", "v4"] }
# Git (for source builds and registry sync)
git2 = "0.21"

# stdio redirect for doctor --json repair passes (Unix only)
[target.'cfg(unix)'.dependencies]
libc = "0.2"

[dev-dependencies]
tempfile = "3"
rand_core = { version = "0.6", features = ["getrandom"] }
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -269,8 +269,8 @@ See [docs/snapshots-and-rollback.md](docs/snapshots-and-rollback.md) for scope,
#### 6. Verify health

```bash
numan doctor # report-only diagnosis
numan doctor --fix --yes # apply safe automated repairs
numan doctor # diagnose and apply safe automated repairs
numan doctor --scan # report-only diagnosis
```

---
Expand Down Expand Up @@ -308,7 +308,7 @@ Global flag: `--root <path>` — override the Numan root directory (all commands
| Command | Description |
|---------|-------------|
| `numan init [--refresh]` | Probe Nu and cache paths for activation |
| `numan try [--yes] [--no-activate]` | Install and activate a curated starter package for your Nu + platform (prefers Nu 0.114 starters; suggests managed Nu pin or search if no compatible starter) |
| `numan try [--no-activate]` | Install and activate a curated starter package for your Nu + platform (prefers Nu 0.114 starters; suggests managed Nu pin or search if no compatible starter) |
| `numan search <query>` | Search registry by name, description, or tags |
| `numan info <owner/name>` | Show package metadata and available versions |
| `numan install <owner/name[@version]>` | Download, verify, extract, and lock |
Expand Down Expand Up @@ -336,23 +336,23 @@ Global flag: `--root <path>` — override the Numan root directory (all commands
| `numan nupm import --manifest file.toml` | Batch import from manifest |
| `numan nupm diff <owner/name>` | Compare imported payload vs nupm source |
| `numan completions <shell>` | Generate bash, fish, zsh, powershell, or nushell completions |
| `numan doctor [--fix] [--yes] [--json]` | Diagnose root health; optional safe repairs |
| `numan doctor [--scan] [--json]` | Diagnose root health and repair (use `--scan` for report-only) |

### Common flags (by command)

| Command | Flags |
|---------|-------|
| `install` | `--force` reinstall; `-v` / `--verbose` |
| `activate` | `--yes` skip prompt; `--verbose`; `--list` status only; `--check` integrity only |
| `deactivate` | `--yes` skip prompt; `--verbose` |
| `activate` | `--verbose`; `--list` status only; `--check` integrity only |
| `deactivate` | `--verbose` |
| `update` | `--check` report only; `-v` / `--verbose` |
| `remove` | `--force` remove despite active activation |
| `gc` | `--dry-run` preview only |
| `registry add` | `--key <base64-public-key>` (required for custom registries; official is auto-configured on `init`) |
| `nupm status` | `--nupm-home <path>` |
| `nupm inspect` | `--all` scan home; `--nupm-home <path>`; `--exit-on-ineligible` fail on ineligible |
| `nupm import` | `--as owner/name` (single import); `--manifest <file>` (batch); `--nupm-home <path>`; `--yes` skip consent |
| `doctor` | `--fix` apply safe repairs; `--yes` skip confirm tier; `--json` machine output; `--nupm-home <path>` |
| `doctor` | `--scan` report-only; `--json` machine output; `--nupm-home <path>` |
| `setup nu` | `--force` re-download; `--skip-path` don't update PATH; `--yes` skip prompt |

Run `numan <command> --help` for full flag documentation.
Expand Down
Loading
Loading