* 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>
566 B
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)