TMPDIR=/mnt/storage/scratch/tmp/YAGfKJ nice=19 ✔ the library install writes the business file, personas and slot dir, makes the copy and starts nothing (386.113555ms) ✔ a library re-run passes and leaves every file as it was (496.225906ms) ✔ a re-run refuses business-file-differs and leaves the file unchanged (376.395513ms) ✔ a re-run refuses persona-differs when an installed persona isn't the staged one, and writes nothing (398.216221ms) ✔ the factory install writes no library mapping, persona or slot dir (247.905208ms) ✔ the factory install refuses a library project and bus.tester off, before anything is written (105.176208ms) ✔ the library install refuses bus.tester on and a persona var in the input (104.503599ms) ✔ the install refuses root, a business id mismatch, another --home and a config dir with group bits (80.144703ms) ✔ the library install needs --personas (7.831929ms) ✔ a validate refusal removes the business file this run wrote (311.701322ms) ✔ N4: a validate refusal on a re-run leaves the matching business file in place, byte for byte (537.848604ms) ✔ a clean library host passes the precheck with no mirror yet (509.009214ms) ✔ the library precheck refuses a persona file at 0644 (506.697677ms) ✔ the library precheck refuses a persona whose digest isn't persona.sha256 (495.113108ms) ✔ the library precheck refuses a persona dir with group bits (481.900638ms) ✔ the library precheck refuses a business file at 0644 (462.626038ms) ✔ the library precheck refuses a changes.jsonl at 0644 (687.490332ms) ✔ the library precheck refuses a Discord binding (499.568905ms) ✔ --library-status refuses library-mirror-missing before the bus has made the mirror (377.717622ms) ✔ --library-status refuses library-never-synced on a fresh mirror (410.956236ms) ✔ --library-status names a recorded lastError before the null lastFetch it leaves (N3) (417.888767ms) ✔ --library-status prints each R-problem's path as an escaped JSON string, then the count, and passes (481.141014ms) ✔ --library-status takes no --profile (6.246241ms) ✔ Vikunja 614: install preserves the explicit notifier decision bytes and mode and creates none when absent (560.431267ms) ✔ row 322 F8: library personas install from the copy with no clone node_modules (183.399079ms) ✔ row 322 F9: importer refusal keeps the error line rather than the Node banner (118.731885ms) ✔ C2-21: library install supplies chief identity and books publish for its real read grant (330.48101ms) ✖ row334 install Next tells root to select proxy only when configured (302.965779ms) ℹ tests 28 ℹ suites 0 ℹ pass 27 ℹ fail 1 ℹ cancelled 0 ℹ skipped 0 ℹ todo 0 ℹ duration_ms 10016.247032 ✖ failing tests: test at packages/cli/tests/case2-install.test.mjs:495:1 ✖ row334 install Next tells root to select proxy only when configured (302.965779ms) AssertionError [ERR_ASSERTION]: The input did not match the regular expression /Next: root runs case2-unit.sh[^\n]+add --proxy when the config has a proxy section/. Input: 'case2-install: config /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/config.json\n' + 'case2-install: copy /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.local/share/mosaic-stack/copies/cccccccccccccccccccccccccccccccccccccccc\n' + 'case2-install: personas installed under /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/personas/acme\n' + 'case2-install: business file /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/businesses/acme.json written\n' + 'case2-install: slot dir /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/secrets/acme\n' + 'case2-install: business acme validates\n' + 'case2-install: done. Next: root runs case2-unit.sh --copy cccccccccccccccccccccccccccccccccccccccc --business acme (design 10 step 2c), then 2d and 3.\n' + 'case2-install: Then Jason places the library token in /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/secrets/acme (step 4), and runs case2-precheck.sh --business acme --library-status (step 4a).\n' at TestContext. (file:///home/jwoltje/.t3/worktrees/mosaic-stack/rockerduck-row334/packages/cli/tests/case2-install.test.mjs:498:10) at Test.runInAsyncScope (node:async_hooks:226:14) at Test.run (node:internal/test_runner/test:1402:25) at Test.processPendingSubtests (node:internal/test_runner/test:974:18) at Test.postRun (node:internal/test_runner/test:1542:19) at Test.run (node:internal/test_runner/test:1467:12) at process.processTicksAndRejections (node:internal/process/task_queues:104:5) at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) { generatedMessage: true, code: 'ERR_ASSERTION', actual: 'case2-install: config /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/config.json\ncase2-install: copy /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.local/share/mosaic-stack/copies/cccccccccccccccccccccccccccccccccccccccc\ncase2-install: personas installed under /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/personas/acme\ncase2-install: business file /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/businesses/acme.json written\ncase2-install: slot dir /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/secrets/acme\ncase2-install: business acme validates\ncase2-install: done. Next: root runs case2-unit.sh --copy cccccccccccccccccccccccccccccccccccccccc --business acme (design 10 step 2c), then 2d and 3.\ncase2-install: Then Jason places the library token in /mnt/storage/scratch/tmp/YAGfKJ/case2-install-lXA9Qd/home/.config/mosaic-dev/secrets/acme (step 4), and runs case2-precheck.sh --business acme --library-status (step 4a).\n', expected: /Next: root runs case2-unit.sh[^\n]+add --proxy when the config has a proxy section/, operator: 'match', diff: 'simple' }