Summary
Closes the user-feedback gaps from v11.4.1. Two genuine EISDIR crashes (set_plan, engram) and two UX gaps (outline silent-fail, search "no results" asymmetry) reproduced empirically against the installed v11.4.1 binary and fixed.
Why
User reported four limitations after using v11.4.1 in production:
compresson a directory crashes with EISDIR- Pre-existing TS1259/TS2802 errors block unrelated edits
outlinereturns misleading "no symbols found" message on a directorysearchfalls through to native grep when it returns no results
Empirical investigation against the installed binary classified each:
- (1) and (2) → already fixed in v11.4.0/v11.4.1, the user's reports were retrospective.
- (3) → UX silent-fail bug (the EISDIR was being absorbed by
getFileSymbols's internal try/catch, producing an unhelpful message). - Two new bugs surfaced during the audit that the user hadn't named yet:
set_planandengramwith a directory path genuinely crash in v11.4.1.
See docs/user-feedback-v11.4.1-investigation.md for the per-claim empirical write-up.
What's fixed
Genuine bugs in v11.4.1
nreki_guard action:"set_plan" text:"<dir>"no longer throws EISDIR. Returns structured error pointing to "pass the path to your plan file, e.g.set_plan text:\"PLAN.md\"".nreki_guard action:"engram" path:"<dir>"same fix.
UX in v11.4.1
nreki_navigate action:"outline" path:"<dir>"returns "outline operates on a single file. For directory-wide discovery, usesearch/fast_grep/hybrid_search" instead of the misleading "no symbols found".nreki_navigate action:"search""No semantic results found" response now lists fallbacks (fast_grep,hybrid_searchwith the user's query pre-filled, broaden-query, Bash grep as last resort). Symmetric with the existing "Index pending" branch.
Internals
- New helper
src/utils/path-guard.ts—validatePath()returns{ok, kind, error, hint}for six failure modes (missing, directory, fifo, device, symlink loop, other). Hint text branches ontoolNameso each handler suggests the right alternative tool. handleReadandhandleCompressrefactored to use the helper (DRY win, no behavior change vs v11.4.0).handleSetPlan,handleEngram,handleOutlinenow call the helper at handler entry.
Honest process disclosure
v11.4.0's EISDIR fix should have audited every readSource callsite. It audited only the two it touched. v11.4.2 audited all of them and applies the guard via the new DRY helper. The v11.4.0 sprint Furia review (docs/furia-v11.4.0-review.md §Q5) had already logged FIFO/device-file handling as a residual gap; v11.4.2 closes it too.
Tests
1 441 passed / 4 skipped (3 pre-existing + 1 POSIX FIFO) / 0 failed. +14 vs v11.4.1.
New test files:
tests/path-guard.test.ts— 6 unit tests + 1 POSIX-only FIFO test.tests/handlers-eisdir-coverage.test.ts— 5 router-level regression tests.tests/search-no-results-hint.test.ts— 2 search UX tests.
Migration
No API change, no behavioral change vs v11.4.1 on valid file paths. Users who pass directory paths to set_plan, engram, or outline now see a clean error instead of a crash / misleading message.
🤖 Generated with Claude Code