From 669b66591b3efbb8fc8642d25a67c55d93cfe4e9 Mon Sep 17 00:00:00 2001 From: Agando Date: Tue, 27 Oct 2026 12:32:37 +0100 Subject: fix(newos4): never overwrite a directory node; ls honours a path after its flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MAINT-010 and MAINT-016, the two high items the review left open. Both were re-probed before the change and the new test is red on HEAD (5 passed, 7 FAILED). - virtual-fs.js rename()/copy(): they assigned dst.dir.content[dst.name] with no destination type check, so `mv file /docs` replaced the /docs node and every child vanished while the command printed "Moved: …". Refuse when the destination is a real directory node (the virtual /sys entry is exempt). rename() also erased the file on `mv a a`, because assigning and then deleting the same key removes it; that path is now an explicit no-op. - module-fs.js mv/cp: a refusal used to surface as "No such file or directory", which sent the operator looking for a missing source. The destination is now inspected first and the message says "is a directory — refusing to overwrite it". - module-fs.js ls: the path was only read from argv[0], so `ls -l /work` listed the cwd. The first non-flag argument is now the target; the path-first form is unchanged. Tests: modules/test/test-fs-mv-cp-guard.js (12 asserts) — RED on HEAD (A1-A3, B1, B2, C2, E1), GREEN now; maintain --fix reports "node tests 7/7 pass". Browser on v4.6.104: "mv: /vtest: is a directory — refusing to overwrite it", child and source intact, "ls -l /vtest" lists /vtest (keep.txt), not the cwd. --- main.html | 6 +- modules/core/core-bundle.js | 29 ++++++++-- modules/core/module-fs.js | 21 +++++-- modules/core/module-loader.js | 2 +- modules/core/virtual-fs.js | 8 +++ modules/test/test-fs-mv-cp-guard.js | 109 ++++++++++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 12 deletions(-) create mode 100644 modules/test/test-fs-mv-cp-guard.js diff --git a/main.html b/main.html index 1c64cf1..78f156e 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +