Result: done
Files: crates/nikaia-std/src/tools/describe.nika crates/nikaia-std/src/tools/lowered/describe.rs crates/nikaia-std/src/tools/lowered.rs crates/nikaia/src/describe.rs
Commit: describe: crate_root (describe.rs into describe.nika)
Body: describe_crate_root finds a dependency’s path in the read manifest (manifest.dependencies[key]?.path) and gives the directory if it is one; the Rust crate_root reads the manifest and forwards, signature unchanged. lowered.rs’s describe export line names it. Self-hosting share 86.7 % (104352 before, 104361 after; 104309 before the brief).
Fixes: #1193
Part: #125
Tests: commits 78f2d7d3 (fs::path::same part by part, fs_path_same failed on unfixed std), eae691c6 (Path.parts, fs_parts+fs_canonical pass both settings), 6a40652f, 08238c4c, this; it describ|shipped|digest|adopt|manifest 85 passed; –lib describe:: manifest:: 3 passed; lower-std fixpoint, fmt, clippy -D warnings clean
Gate: not run (driver)
Deviation: own commit 78f2d7d3: Path == compared bytes, against ADR-319 D9/D10 (a//b != a/b); fixed in std with tests/compiler/tests/fs_path_same.nika
Found: lowering defect: in tools code m.get(key)?.path ?? return null (m a BTreeMap of structs, by ref) lowers to .and_then(|it| it.path), rustc E0507 move out of a reference; m[key]?.path lowers right; suspect roots_in_a_binding (check_shapes.nika) not taking a get(..) call as a place for a_safe_reach (check_fields.nika). Minor: a literal passed to an owned fs::Path parameter fails rustc (mismatched types)
Needs: file the two findings as issues (ready)
Changelog: std: fs::Path.parts() (ADR-319 D10), and == on paths compares whole parts as D9 says; describe.rs’s without_dots, crate_sources and crate_root now in tools/describe.nika
Owner: none
Disk freed: copy and scratch binaries 1.1 GB; target/nikaia-project-tests absent; / 5.1G free (87 %)
Attribution:
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01GFeMqxRbtUMiGVyDMxsvEq
Pushed: local 80c8a10b457c37ee279e7c80ef8f73e292e1915e