iter cli-diag-human: route WorkspaceLoadError through diagnostic in non-JSON path
Closes P2 todo "CLI human-mode diagnostic surface for
WorkspaceLoadError" surfaced by ct.1.8 tester (2026-05-11).
Pre-iter, non-JSON `ail check` (+8 sibling subcommands) propagated
loader errors via anyhow's Display, producing
`Error: <message>` without the bracketed `[code]` prefix the JSON
path emits.
Fix: new private helper `load_workspace_human(path)` in
crates/ail/src/main.rs that wraps ailang_surface::load_workspace,
threads any WorkspaceLoadError through workspace_error_to_diagnostic,
formats the resulting Diagnostic into a single stderr line
`error: [<code>] <def>: <message>`, and exits non-zero. Pure I/O
errors still propagate as anyhow errors.
Nine call sites swapped to the helper (check non-JSON arm, build,
run, emit-ir, prose, describe, deps, diff, manifest). The JSON arm
of `ail check` keeps its explicit `match` — different output
contract (structured stdout array).
The BareCrossModuleTypeRef Diagnostic message gained the existing
migration-command hint ("Run `ail migrate-canonical-types` to fix
legacy fixtures.") so the ct.1.8 actionable-hint test stays green.
The hint previously rode on WorkspaceLoadError's thiserror Display;
making workspace_error_to_diagnostic the single source for both
JSON and human paths required moving it into the Diagnostic body.
RED test crates/ail/tests/cli_diag_human_workspace_load_error.rs
pins the bracketed-code surface on a missing-import workspace
(tempdir-based fixture; no committed corpus addition).
cargo test --workspace: 565/0/3. clippy + doc: zero warnings.
Roadmap entry struck.
This commit is contained in:
+8
-7
@@ -214,13 +214,14 @@ context. Pick the next milestone from P1.)_
|
||||
into one overlay, or stay split. Surfaced during the
|
||||
env-construction unify audit.
|
||||
- context: JOURNAL 2026-05-10 ("Audit close: env-construction unify"); closed by iter ctt.1 — DESIGN.md §"Env construction" anchors the split decision.
|
||||
- [ ] **\[todo\]** CLI human-mode diagnostic surface for `WorkspaceLoadError` —
|
||||
non-JSON `ail check` routes ct.1 errors via `anyhow`/`thiserror`
|
||||
Display (`Error: <message>`) instead of going through
|
||||
`workspace_error_to_diagnostic`, so the bracketed `[code]` prefix
|
||||
the JSON path carries is missing. Plausibly applies to every CLI
|
||||
subcommand that calls `load_workspace(&path)?` directly.
|
||||
- context: JOURNAL 2026-05-11 ("Iteration ct.1") — surfaced by ct.1.8 tester.
|
||||
- [x] **\[todo\]** CLI human-mode diagnostic surface for `WorkspaceLoadError`.
|
||||
Shipped 2026-05-14 as iter cli-diag-human — a new `load_workspace_human`
|
||||
helper in `crates/ail/src/main.rs` routes 9 non-JSON
|
||||
`ailang_surface::load_workspace(&path)?` call sites through
|
||||
`workspace_error_to_diagnostic`, so the bracketed `[code]` prefix is
|
||||
preserved across `ail check`, `build`, `run`, `emit-ir`, `prose`,
|
||||
`describe`, `deps`, `diff`, `manifest`.
|
||||
- context: per-iter journal `docs/journals/2026-05-14-iter-cli-diag-human.md`.
|
||||
- [x] **\[todo\]** Retire dead `KindMismatch` arm — `validate_classdefs`'s
|
||||
`walk_kind_mismatch` path is structurally unreachable through
|
||||
well-formed schema post-ct.1 (the canonical-form validator catches
|
||||
|
||||
Reference in New Issue
Block a user