Files
msd-core/.changeset/lively-birds-click.md
Tom Boucher 77dcdda534 enhance(#4014): an unreadable directory must not report as an empty one (#4163)
* test(#4014): add failing-first coverage for unreadable-vs-empty directory scope (epic #3473 B4)

* fix(#4014): an unreadable directory must not report as an empty one (epic #3473 B4)

* test(#4014): update hardcoded generateSlugInternal closing-brace line after import shift

src/core-utils.cts's new #4014 import block shifted every subsequent line by
6, moving generateSlugInternal's real closing brace from line 193 to 199.
tests/slug-derivation-drift-guard.test.cjs's MAJOR-1 fixture hardcodes that
line number to plant a synthetic violation immediately after the function's
real body; the guard script itself locates the boundary dynamically via
brace-matching and needed no change.

* docs(#4014): document the unreadable-directory scope signal and add changeset

* docs(#4014): backfill changeset PR number to #4163

* test(#4014): kill pre-existing core-utils.cjs mutation-score gap, unrelated to this issue's diff

---------

Co-authored-by: sim <sim@local>
2026-09-02 08:12:57 -04:00

566 B

type, pr
type pr
Changed 4163

roadmap analyze, gap-checker, and init's JSON output now distinguish an unreadable phase directory from a genuinely empty one — a new context_scope/phase_dir_scope field ('complete' or 'unreadable') sits alongside the existing has_context/context_read_error fields, so a permission or I/O failure reading a phase directory is no longer indistinguishable from a phase that simply has no context file yet. init manager's previously-silent read failure (a bare empty catch) now surfaces the same signal. (#4014)