docs: add Dewey row 131 r2 packet (plug-in loader and setter fixes)
Round 2 for #1626 per sage-0314: F1a setter refuses a non-plain prototype, F1b organization writer validates and logs JSON.parse(bytes), F2 loader refuses unreadable paths, README top-level-code limit, control run. Gate 591/0, 0 skipped; controls pass; mutants 47/47 killed (slot sage-0316). Candidate manifest sha256 466c835f7dce79d20c7ab74c197a52b70e7fdeb0efae0456222dc6d0a633f219, 14 paths on base 0bdd573ff; no commit in base..1376caab9 touches them. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
# Row 131 / #1626: the plug-in layer, kind registry and loader (round 2)
|
||||
|
||||
Builder: Dewey. Brief: `docs/plans/2026-10-14_prd-1.2-build.md`, step 6b.
|
||||
Requirements: REQ-PLUG-1 (the plug-in layer), REQ-LIMIT-4 (the first two kinds,
|
||||
usage-source and limit-check). The `plugins` write goes through step 5's write
|
||||
path (REQ-ROLE-3). Base: see `base.txt`. Source is in a detached worktree; nothing
|
||||
here is pushed, wired into a host process or written to Jason's organization file.
|
||||
|
||||
Governing rulings: lead decision 143 (in-repo modules only until Jason rules on
|
||||
Vikunja #286; no path from config) and sage-0301 (choices 1, 3, 4 and 5 as
|
||||
proposed; choice 2 changed).
|
||||
|
||||
## Round 2 (sage-0314)
|
||||
|
||||
Round 1: Darkwing approved (28561, N1 and N2); Filbert asked for changes
|
||||
(28560, F1 and F2). Sage ruled on both in sage-0314. Each item below is a change
|
||||
on top of round 1 (`agents/dewey/work/queue-131/r1/`, committed 09447eb67).
|
||||
|
||||
| Item | Change | Test | Mutant |
|
||||
| --- | --- | --- | --- |
|
||||
| F1a | `plugin-settings.mjs` `set()` refuses with `invalid-plugins` unless `plugins` has prototype `Object.prototype` or `null`. A `Date` or a `Map` has no own keys and passed `checkPlugins`. | refusal list gains `new Date(0)` and a `Map`, still checking unchanged bytes and an empty log; the success test writes a null-prototype object | 46 |
|
||||
| F1b | `organization.mjs` `write()` (row 122's writer, extended for this one change by sage-0314): after building the bytes it runs `validateBusinessDocument` on `JSON.parse(bytes)`, and `changes()` logs that parsed value. | "the writer checks the bytes it writes": a `Date` in `plugins` sent straight to `writer.write`, past the setter, throws `BusinessError`; bytes unchanged, log empty | 47 |
|
||||
| F2 (Darkwing N1) | `loader.mjs`: one helper, `fsCall`, wraps the `lstat` in `component()` and both `realpath` calls. ENOENT and ENOTDIR stay `missing`; any other error refuses as `unreadable`, so `load()` logs it and keeps the kind's old modules instead of rejecting. | chmod 000 on the module directory (lstat of `index.mjs`); after the `checked` barrier, chmod 000 on the module directory (realpath of `index.mjs`) and on `<root>/packages` (realpath of `packages/plugins`). Skipped as root. | 43, 44, 45 |
|
||||
| N2 (doc-only) | `packages/plugins/README.md`, limits: a module's top-level code runs at import, before the export and interface-version checks; a refused module has still run and Node's cache keeps it. The check list names `unreadable`. | none (doc) | none |
|
||||
| Control | `mutants.py` first runs each distinct test set on the unmutated source and stops if any fails. | `MUTANTS.md`, control table | |
|
||||
|
||||
Two choices, recorded:
|
||||
|
||||
- **The in-memory validate stays.** `write()` still runs `validateBusinessDocument(document)`
|
||||
before `JSON.stringify`, then validates the parsed bytes. Without the first,
|
||||
a `BigInt` or a circular value would throw a raw `TypeError` from
|
||||
`JSON.stringify` instead of a coded refusal. Sage's wording was "build bytes
|
||||
first, then validate the parse"; this does that and keeps the earlier check.
|
||||
- **`changes(old, written)` has no mutant of its own.** For any document that
|
||||
passes both validations, `written` and `document` give the same
|
||||
`changes()` result, so no test can tell `changes(old, document)` apart. Mutant
|
||||
47 covers the validation, which is what refuses.
|
||||
|
||||
The `<root>/packages` case loads usage-source only: a locked `packages`
|
||||
directory would refuse limit-check too, so the test names one kind and checks
|
||||
limit-check switched off by its absent key.
|
||||
|
||||
`organization.mjs` is now in the candidate (14 paths). Rows 121 and 123 don't
|
||||
list it. `packages/business/README.md` gains one sentence on the writer
|
||||
checking its bytes (row 123 also edits that file).
|
||||
|
||||
## What ships
|
||||
|
||||
| Path | Change |
|
||||
| --- | --- |
|
||||
| `packages/plugins/package.json` | new package `@mosaic/plugins` |
|
||||
| `packages/plugins/src/kinds.mjs` | kind registry: usage-source and limit-check, interface version 1, each switched on by a list; `checkPlugins` for the organization file's `plugins` key |
|
||||
| `packages/plugins/src/loader.mjs` | `createLoader({log})` → `{load, loaded, modules}` |
|
||||
| `packages/plugins/README.md` | kinds, export contract, adding a module, the key, the loader and its limits |
|
||||
| `packages/plugins/tests/{helpers,kinds.test,loader.test}.mjs` | 21 tests |
|
||||
| `packages/business/src/business.mjs` | `plugins` in TOP_KEYS; checked with `checkPlugins`; returned frozen (`{}` when absent) |
|
||||
| `packages/business/src/plugin-settings.mjs` | the host setter: the only writer of `plugins`, through `organizationWriter` |
|
||||
| `packages/business/tests/plugin-settings.test.mjs` | 4 tests: schema, setter success and log, setter refusals, writer refuses what JSON can't carry |
|
||||
| `packages/business/README.md` | the `plugins` key and its writer; the writer checks the bytes it writes |
|
||||
| `packages/business/src/organization.mjs` | `write()` validates and logs `JSON.parse(bytes)` (F1b) |
|
||||
| `scripts/stack-copy.sh` | whole `packages/plugins` in COPY_PATHS (approved, sage-0301) |
|
||||
| `packages/cli/tests/stack-copy.test.mjs` | the copied-path list includes the plug-in sources |
|
||||
|
||||
No module of either kind ships. No core module imports a plug-in module by
|
||||
name: `business.mjs` and `plugin-settings.mjs` import only `kinds.mjs`, and
|
||||
nothing imports `loader.mjs` outside its tests.
|
||||
No limit ceiling is in code (Q150).
|
||||
|
||||
## sage-0301 rulings, as built
|
||||
|
||||
1. **One writer.** `pluginSettings({dir, rolesDir}).set(id, {revision, plugins}, actor)`
|
||||
is the only writer. No broker verb, mosaic command, Settings form or
|
||||
chief-of-staff write was added.
|
||||
2. **A refused write throws a code and logs nothing.** `set` checks the request
|
||||
shape (`invalid-request`: anything but `revision` and `plugins`, or a revision
|
||||
that isn't 64 hex) and the value (`invalid-plugins`, from `checkPlugins`)
|
||||
before the writer runs. The writer validates the whole document before its
|
||||
`prepared` entry, so nothing reaches `changes.jsonl`. The test checks the
|
||||
file bytes are unchanged and the log is empty after thirteen refusals (a `Date` and a `Map` added in round 2). A
|
||||
committed write logs actor, transaction and old and new names per kind, the
|
||||
same way a limit change does (`plugins` with old null when the key was
|
||||
absent; `plugins.<kind>` with whole old and new lists after that).
|
||||
Load-time refusals go through the loader's `log` callback.
|
||||
3. **Last good modules per kind.** A loader instance holds, per kind, the
|
||||
modules from its last good load. Any refusal for a kind keeps them. A kind
|
||||
refused on its first load has nothing on. The test loads `["meter","absent"]`
|
||||
so a half-loaded list would show. `load()` and `loaded()` report what each
|
||||
kind actually has on. Every refusal calls `log` once with
|
||||
`{event: "plugin-refused", kind, name, code, message, kept}`; the first-load
|
||||
test checks kind and name. The loader is not wired into any host process.
|
||||
4. **Export contract.** Every module exports `interfaceVersion`; usage-source
|
||||
exports `readTurn`; limit-check exports `mayLaunch` and `mustStop`; both kinds
|
||||
switch on a list. The README carries the contract. These names bind row 124.
|
||||
Argument and return shapes are left to the calling rows.
|
||||
5. **What is checked.** `packages/plugins`, `<kind>`, `<name>` (each an lstat:
|
||||
exists, a directory, not a symlink) and `index.mjs` (exists, a regular file,
|
||||
not a symlink); not the ancestors of `packages/plugins`. Just before
|
||||
`import`, `realpath(index.mjs)` must equal
|
||||
`realpath(packages/plugins)/<kind>/<name>/index.mjs`, and the import uses that
|
||||
expected path. An error other than ENOENT or ENOTDIR from those reads (EACCES, ELOOP) refuses as
|
||||
`unreadable` (round 2, F2).
|
||||
|
||||
## The check-then-import gap
|
||||
|
||||
For Darkwing, in those words: there is a check-then-import gap. The lstat
|
||||
checks and the realpath comparison run, then `import()` opens the file by path.
|
||||
Someone who can write `packages/plugins` as the host's user can swap
|
||||
`index.mjs` (or a directory above it) between the realpath check and the open
|
||||
inside `import()`. Node has no import-from-descriptor, so the loader cannot
|
||||
close the gap. The checks catch mistakes, stale links and a link planted
|
||||
before load; they do not stop a writer racing the host as the same user, and
|
||||
such a writer could edit any core file anyway. The test with the `checked`
|
||||
barrier swaps `index.mjs` for a symlink after the lstat checks and shows the
|
||||
realpath check refusing it; it cannot show the narrower window after realpath.
|
||||
The README states the same limit. Two related limits: a module runs with the
|
||||
host's authority once imported (the loader does not sandbox it), and Node
|
||||
caches modules by URL, so a changed `index.mjs` is not re-read until restart.
|
||||
|
||||
The `packages/plugins` symlink case is only reachable when Node keeps symlinked
|
||||
paths (`--preserve-symlinks`); otherwise `import.meta.url` is already the real
|
||||
path. The test runs that case in a child `node --preserve-symlinks`.
|
||||
|
||||
## Acceptance, mapped
|
||||
|
||||
| Acceptance item | Where |
|
||||
| --- | --- |
|
||||
| a test for each refusal, old setting kept | `loader.test.mjs`: bad name, missing (absent dir, empty dir, dir as index), symlink (name dir, index, kind dir, packages/plugins, realpath swap), load-failed (syntax error, top-level throw), missing export (absent, non-function, half of limit-check, no interfaceVersion), interface version (2, string "1"), unreadable (lstat, realpath of index.mjs, realpath of packages/plugins); each through `refusesKeepingOld`, which checks the kept setting, the one refusal entry and the one log call |
|
||||
| fixture module of each kind switched on from a test organization file, no core file changed | `loader.test.mjs` first test: a business document built with business test helpers, validated by `validateBusinessDocument`, its `plugins` passed to the loader; fixture modules written into a temp copy of the package |
|
||||
| one mutant per check, each failing a test | `MUTANTS.md`, `mutants.py`, `mutants/results.json` |
|
||||
| `plugins` key in the schema, written through step 5's write path and logged like a limit change | `plugin-settings.test.mjs` |
|
||||
|
||||
REQ ids are in each test name.
|
||||
|
||||
## Gate (decision 136, targeted)
|
||||
|
||||
Approved list (sage-0301): plugins, business, bus, webui, cli, each
|
||||
`node --test tests/*.test.mjs` (the command land-work.sh runs), via `gate.sh`.
|
||||
Round 2 run 2026-10-15T16:41:04Z to 16:42:25Z in the slot Sage gave in sage-0316,
|
||||
on the candidate as shipped in `build.patch`. Logs: `gate/`, summary `gate-run.log`.
|
||||
|
||||
| Package | Tests | Pass | Fail | Skipped |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| plugins | 21 | 21 | 0 | 0 |
|
||||
| business | 92 | 92 | 0 | 0 |
|
||||
| bus | 171 | 171 | 0 | 0 |
|
||||
| webui (includes pinned-copy.test.mjs) | 112 | 112 | 0 | 0 |
|
||||
| cli (includes stack-copy.test.mjs) | 195 | 195 | 0 | 0 |
|
||||
|
||||
591 tests, 0 failed, 0 skipped: the chmod tests ran (not as root).
|
||||
|
||||
Not run: the other packages and the shell suites; Sage's full gate at the
|
||||
landing target covers them (decision 136). BASE..refactor HEAD touches none of
|
||||
the candidate's 14 paths (checked at packet time; see the commit message).
|
||||
|
||||
Mutants: control runs all pass; 47 of 47 killed (`MUTANTS.md`).
|
||||
|
||||
## Overlap
|
||||
|
||||
Row 123 (Researcher) also edits `packages/business/README.md`. Sage orders the
|
||||
landings; the second row rebases.
|
||||
@@ -0,0 +1,88 @@
|
||||
# Row 131 mutants (round 2)
|
||||
|
||||
One fault per check. `mutants.py` makes each edit to the candidate, runs only the
|
||||
listed test files with `node --test` in its own process group (whole-group kill at
|
||||
300 s), records the result and restores the file. `mutants.py --dry` checks that each
|
||||
mutation site matches. Per-mutant output is in `mutants/<id>.log`;
|
||||
`mutants/results.json` holds every result. Run: 2026-10-15T16:42:28Z to 16:42:52Z, in
|
||||
the slot Sage gave in sage-0316.
|
||||
|
||||
## Control
|
||||
|
||||
Before any mutant, each distinct test set runs on the unmutated candidate; one
|
||||
failure stops the run (round 2, sage-0314). Logs: `mutants/control-*.log`,
|
||||
`mutants/control.json`.
|
||||
|
||||
| Control | Test files | Exit | Tests | Pass | Fail | Skipped |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| control-01 | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | 0 | 21 | 21 | 0 | 0 |
|
||||
| control-02 | plugins/tests/kinds.test.mjs | 0 | 5 | 5 | 0 | 0 |
|
||||
| control-03 | plugins/tests/loader.test.mjs | 0 | 16 | 16 | 0 | 0 |
|
||||
| control-04 | business/tests/plugin-settings.test.mjs, plugins/tests/loader.test.mjs | 0 | 20 | 20 | 0 | 0 |
|
||||
| control-05 | business/tests/plugin-settings.test.mjs | 0 | 4 | 4 | 0 | 0 |
|
||||
| control-06 | cli/tests/stack-copy.test.mjs | 0 | 12 | 12 | 0 | 0 |
|
||||
|
||||
All pass with 0 skipped, so the chmod tests (run as a normal user) ran.
|
||||
|
||||
## Mutants
|
||||
|
||||
Result: 47 of 47 cases run; 47 KILLED, 0 SURVIVED, 0 TIMEOUT.
|
||||
|
||||
| Mutant | Check | Result | Test files | First failing test |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| 01-name-pattern | kinds: names must match ^[a-z][a-z0-9-]*$ | KILLED (exit 1) | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates |
|
||||
| 02-list-cardinality | kinds: a list kind refuses a non-list | KILLED (exit 1) | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything |
|
||||
| 03-one-cardinality | kinds: a one-module kind refuses a non-string | KILLED (exit 1) | plugins/tests/kinds.test.mjs | REQ-PLUG-1 a kind that switches on one module takes one name, not a list |
|
||||
| 04-no-duplicates | kinds: a name twice refuses | KILLED (exit 1) | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates |
|
||||
| 05-known-kind | kinds: an unknown kind refuses | KILLED (exit 1) | plugins/tests/kinds.test.mjs | REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates |
|
||||
| 06-plugins-object | kinds: plugins must be a non-array object | KILLED (exit 1) | plugins/tests/kinds.test.mjs | REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates |
|
||||
| 07-registry-exports | registry: limit-check exports mayLaunch and mustStop | KILLED (exit 1) | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list |
|
||||
| 08-registry-version | registry: usage-source is interface version 1 | KILLED (exit 1) | plugins/tests/kinds.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list |
|
||||
| 09-missing-directory | loader: an absent path refuses as missing | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting |
|
||||
| 10-component-type | loader: a component of the wrong type refuses | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting |
|
||||
| 11-symlink-test | loader: a symlinked component refuses | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting |
|
||||
| 12-plugins-dir-checked | loader: packages/plugins is checked | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) |
|
||||
| 13-kind-dir-checked | loader: <kind> is checked | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting |
|
||||
| 14-name-dir-checked | loader: <name> is checked | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting |
|
||||
| 15-index-checked | loader: index.mjs is checked | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting |
|
||||
| 16-realpath-before-import | loader: realpath(index.mjs) equals the expected path just before import | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check |
|
||||
| 17-load-failure | loader: a module that fails to load refuses | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a module that fails to load refuses and keeps the old setting |
|
||||
| 18-export-present | loader: every export is present | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing export refuses and keeps the old setting |
|
||||
| 19-export-function | loader: the kind's exports are functions | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing export refuses and keeps the old setting |
|
||||
| 20-interface-version | loader: interfaceVersion must equal the kind's | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a different interface version refuses and keeps the old setting |
|
||||
| 21-version-strict | loader: the version comparison is strict (string "1" refuses) | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a different interface version refuses and keeps the old setting |
|
||||
| 22-keep-old-setting | loader: a refusal keeps the last good modules | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting |
|
||||
| 23-first-load-nothing-on | loader: a kind refused on first load has nothing on | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name |
|
||||
| 24-refusal-logged | loader: every refusal calls log | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting |
|
||||
| 25-log-names-module | loader: the log names the refused module | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting |
|
||||
| 26-log-kept | loader: the log says what stays on | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting |
|
||||
| 27-whole-setting-object | loader: an array setting refuses every kind | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything |
|
||||
| 28-unknown-kind-logged | loader: an unknown kind refuses and is logged | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything |
|
||||
| 29-absent-key-off | loader: an absent key switches the kind off | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath |
|
||||
| 30-loads-serialized | loader: loads run one at a time | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 loads run one at a time, so the last requested setting wins |
|
||||
| 31-log-required | loader: createLoader needs a log callback | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 the loader needs a log callback |
|
||||
| 32-schema-key | schema: plugins is an allowed top-level key | KILLED (exit 1) | business/tests/plugin-settings.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names |
|
||||
| 33-schema-check | schema: plugins is checked with checkPlugins | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names |
|
||||
| 34-schema-returned | schema: plugins is returned | KILLED (exit 1) | business/tests/plugin-settings.test.mjs, plugins/tests/loader.test.mjs | REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names |
|
||||
| 35-schema-copy | schema: the returned value is a frozen copy, the document stays mutable | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names |
|
||||
| 36-setter-strict-keys | setter: only revision and plugins are accepted | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing |
|
||||
| 37-setter-revision-format | setter: revision must be 64 hex | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing |
|
||||
| 38-setter-checks-names | setter: plugins is checked before the writer runs | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing |
|
||||
| 39-setter-actor-logged | setter: the actor is logged | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names |
|
||||
| 40-setter-writes-plugins | setter: plugins is written | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names |
|
||||
| 41-copy-ships-plugins | stack-copy: packages/plugins ships in the pinned copy | KILLED (exit 1) | cli/tests/stack-copy.test.mjs | shared copy: npm ci, pushed reachability, readonly/existing copy, webui delegation |
|
||||
| 42-modules-known-kind | loader: modules() refuses an unknown kind | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything |
|
||||
| 43-unreadable-refused | loader: a read error other than ENOENT/ENOTDIR refuses as unreadable | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting |
|
||||
| 44-realpath-index-mapped | loader: realpath(index.mjs) errors become refusals | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath |
|
||||
| 45-realpath-root-mapped | loader: realpath(packages/plugins) errors become refusals | KILLED (exit 1) | plugins/tests/loader.test.mjs | REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath |
|
||||
| 46-setter-plain-prototype | setter: plugins must have prototype Object.prototype or null | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing |
|
||||
| 47-writer-checks-bytes | writer: validates JSON.parse of the bytes it writes | KILLED (exit 1) | business/tests/plugin-settings.test.mjs | REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too |
|
||||
|
||||
New in round 2: 43, 44 and 45 (F2), 46 (F1a), 47 (F1b). 43 to 45 fail because
|
||||
`load()` rejects on the raw EACCES instead of logging a refusal; 46 lets a `Date`
|
||||
through the setter, written as a date string; 47 lets the writer take a `Date`
|
||||
without a `BusinessError`. Mutant 09 now sits in the shared `fsCall` helper:
|
||||
without the ENOENT mapping a missing path refuses as `unreadable`, not
|
||||
`missing`. Mutant 17's log shows a SyntaxError: it is the fixture module's
|
||||
deliberate syntax error, which the mutant rethrows instead of refusing.
|
||||
`changes(old, written)` has no mutant; see BUILD.md, round 2.
|
||||
@@ -0,0 +1 @@
|
||||
0bdd573ffff11bd563113f0077e88e9075b5de58
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
8f808be570152b19d7628f0d4cde663f43f7b9edce88eac98ff20e8343bc6f95 packages/business/README.md
|
||||
46f0e977d78e579362b57415996041670e36c04017136359ec11b69ecd18e112 packages/business/src/business.mjs
|
||||
1bb824b5def474074cc657e85f4a0efc086cdc4b2ccceb58c56725dcd4104958 packages/business/src/organization.mjs
|
||||
638f208603e2b90467bef05b2a781cf04b3f80ce8cd9797b809fef15f880dc46 packages/business/src/plugin-settings.mjs
|
||||
30ae39241217d29bbaf8f2eb9218c6f4fa515a7a8173f70f1aeb641322def7bb packages/business/tests/plugin-settings.test.mjs
|
||||
924df6c3844708306f379bc88c47387a3ed648ef176b56fa38f9f2ae73c0f46a packages/cli/tests/stack-copy.test.mjs
|
||||
ee1e75a16b349654fd98185c7407a9784e56d2dd7977ce10e067834bf233eb04 packages/plugins/README.md
|
||||
90a9ac59a9ea2287e9a3d4b2f4286d025e727f2a6ce149464f8d0420fd9a8ef1 packages/plugins/package.json
|
||||
ed9cba47f892554b78f4ae9803552e38005c2e11b608efebf9b9cf252b38e408 packages/plugins/src/kinds.mjs
|
||||
a8491556216eea9b51f2d56a04183f01fdddeacf724f2bba84d69e544cc28378 packages/plugins/src/loader.mjs
|
||||
af18df7dacc775b28cc2c67c5755017e4850f5200b9b4eace6f23f8638109a7a packages/plugins/tests/helpers.mjs
|
||||
da606e8948ad26238084605c8d77042a64cf8f8ea1ca88247aa3931894c69bce packages/plugins/tests/kinds.test.mjs
|
||||
be3e8f9c4cc2a765b0a74dbd7f74f2c54173281fbdccccc3a2c5aa909cb90bf3 packages/plugins/tests/loader.test.mjs
|
||||
0b6becaa237500d69a4977cb79a2c0da67f728be4cd0b930dd506d445698f43a scripts/stack-copy.sh
|
||||
@@ -0,0 +1,7 @@
|
||||
gate start 2026-10-15T16:41:04Z
|
||||
pkg-plugins start=2026-10-15T16:41:04Z end=2026-10-15T16:41:05Z rc=0 tests=21 pass=21 fail=0 skipped=0
|
||||
pkg-business start=2026-10-15T16:41:05Z end=2026-10-15T16:41:07Z rc=0 tests=92 pass=92 fail=0 skipped=0
|
||||
pkg-bus start=2026-10-15T16:41:07Z end=2026-10-15T16:41:11Z rc=0 tests=171 pass=171 fail=0 skipped=0
|
||||
pkg-webui start=2026-10-15T16:41:11Z end=2026-10-15T16:42:06Z rc=0 tests=112 pass=112 fail=0 skipped=0
|
||||
pkg-cli start=2026-10-15T16:42:06Z end=2026-10-15T16:42:25Z rc=0 tests=195 pass=195 fail=0 skipped=0
|
||||
gate end 2026-10-15T16:42:25Z rc=0
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
# Row 131 targeted builder gate (decision 136; list approved in sage-0301).
|
||||
# Same command land-work.sh runs per package. One log per package under gate/.
|
||||
set -uo pipefail
|
||||
WT=${1:-$HOME/dewey-scratch/r131/wt}
|
||||
OUT=$(cd "$(dirname "$0")" && pwd)/gate
|
||||
mkdir -p "$OUT"
|
||||
export TMPDIR=$HOME/dewey-scratch/tmp
|
||||
status=0
|
||||
for p in plugins business bus webui cli; do
|
||||
start=$(date -u +%FT%TZ)
|
||||
(cd "$WT/packages/$p" && node --test tests/*.test.mjs) >"$OUT/pkg-$p.log" 2>&1
|
||||
rc=$?
|
||||
counts=$(grep -E '^ℹ (tests|pass|fail|skipped) ' "$OUT/pkg-$p.log" | awk '{printf "%s=%s ", $2, $3}')
|
||||
echo "pkg-$p start=$start end=$(date -u +%FT%TZ) rc=$rc $counts"
|
||||
[ "$rc" -eq 0 ] || status=1
|
||||
done
|
||||
exit $status
|
||||
@@ -0,0 +1,179 @@
|
||||
✔ agents: a held role with nothing on the bus is idle; a role session gets the claim rows unchanged (150.890306ms)
|
||||
✔ agents: working counts what the holder received and has not read; routed alone is not working (199.350773ms)
|
||||
✔ agents: input needed is the role's open decisions routed to the human, gated first, then oldest (335.868521ms)
|
||||
✔ agents: working wins over waiting, and Input needed still shows (158.368518ms)
|
||||
✔ agents: a new holder doesn't inherit what the last one left unread; decisions stay with the role (206.929609ms)
|
||||
✔ agents: state reads only its own business, even for a run name both use (186.357302ms)
|
||||
✔ agents: a message the holder released unread is stranded; the next holder gets nothing and cannot read it (234.522298ms)
|
||||
✔ agents: a message the holder read is not stranded; one the current holder has not read is not listed (213.56268ms)
|
||||
✔ agents: stranded is oldest first and capped at 50 for a role (903.373985ms)
|
||||
✔ agents: stranded is per role and per business (310.073427ms)
|
||||
✔ agents: a message routed to a held role and not yet received is not stranded (118.590516ms)
|
||||
✔ launch identity is stamped, payload identity is refused and stale holder cannot send (166.06202ms)
|
||||
✔ decision classes route from policy; gated resolution is human-only, choice and target must match (249.015609ms)
|
||||
✔ claim exclusion, holder release, gated revoke and rerouting to a new holder are atomic (279.298037ms)
|
||||
✔ launch events require a human CLI capability; generic emit cannot forge authority events (177.154788ms)
|
||||
✔ within-role decisions close atomically and invalid options or blocking omissions refuse (185.635754ms)
|
||||
✔ a recommendation that is not exactly one option key refuses invalid-recommendation after the options (282.826811ms)
|
||||
✔ observer capabilities read human inbox but cannot mutate or forge launch identity (191.502299ms)
|
||||
✔ task action subjects and linked decision trail are complete and ordered (208.68307ms)
|
||||
✔ launch binding is durable and reconnecting requires the identical trusted record (130.310089ms)
|
||||
✔ business isolation includes inherited object names and cross-business message references (204.436747ms)
|
||||
✔ authority never transfers between action, run, target, unresolved or replaced role holder (267.80783ms)
|
||||
✔ task projection uses schema current view, skipping earlier and equal-start polls (174.459332ms)
|
||||
✔ revocation permanently bars the old run from reclaiming first, including after broker restart (208.010738ms)
|
||||
✔ empty message references refuse before storage; refusal-evidence failure stays a typed error (137.136622ms)
|
||||
✔ both arbiters require human resolution when their cross-role route is themselves (218.59623ms)
|
||||
✔ the shipped coder role raises task.reassign as gated to the human; task.scope.change stays cross-role (143.477456ms)
|
||||
✔ S1 adapter takes resolved limits and refs, rejects mismatched instance, never mutates input (3.651253ms)
|
||||
✔ credentials gives human and reader sessions service, account, role, date and state, and nothing else (94.500249ms)
|
||||
✔ credentials refuses a role session and any argument (172.62452ms)
|
||||
✔ credentials reads the status on each request, and a broker without one lists none (222.412115ms)
|
||||
✔ the broker process answers credentials without a token, path or variable in its output, log or store (182.874762ms)
|
||||
✔ only validated broker references load; returned data and exceptions cannot expose a known token (3.999869ms)
|
||||
✔ bad file modes, symlinks, repository/data paths, malformed tokens and missing dates refuse (4.511286ms)
|
||||
✔ expiry refuses use and env references never become client data (0.867036ms)
|
||||
✔ S1 parsed service refs work, service mismatch refuses, Gitea rotation due is a warning state (1.755848ms)
|
||||
✔ opaque tokens shorter than 16 characters refuse before use (0.403383ms)
|
||||
✔ a human resolve sends the raising role one message from the human, and its request is the answer (236.134124ms)
|
||||
✔ a cross-role decision resolved by its arbiter comes from that role and run, with no request (239.841582ms)
|
||||
✔ a human withdraw sends one message with the note (231.647799ms)
|
||||
✔ a human seen before the close leaves the request on the close's answer, not the seen (289.297444ms)
|
||||
✔ the raising run's withdraw, a supersede, a within-role raise and seen send nothing (295.057823ms)
|
||||
✔ refused closes send nothing: invalid-choice, decision-closed, not-resolver (311.133535ms)
|
||||
✔ a raising role nobody holds at the close gets the message on the next claim (277.161096ms)
|
||||
✔ a human DECISION send keeps its own instruction as the request, not a close's answer (249.548326ms)
|
||||
✔ roles lists open decisions routed to a role, and never the human inbox (210.962475ms)
|
||||
✔ recent lists closed decisions of every route, newest close first, with how each closed (281.008836ms)
|
||||
✔ recent gives the closing event as closed when the decision was seen first (274.654702ms)
|
||||
✔ recent stops at RECENT rows (840.584832ms)
|
||||
✔ every row is what trail already gives the same session for that id (277.019431ms)
|
||||
✔ a role session can't list decisions, so it can't read another role's open decisions (395.005795ms)
|
||||
✔ decisions is a read: one business, strict arguments, nothing written (398.919889ms)
|
||||
✔ endLaunch writes session.ended, releases the run claim and kills its capabilities (139.794073ms)
|
||||
✔ endLaunch refuses an unknown run, a second end and a rebind of the ended run (131.033345ms)
|
||||
✔ a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound (161.199958ms)
|
||||
✔ endLaunch leaves a claim another run took alone (181.486296ms)
|
||||
✔ refuse records action.refused against the caller with the code only (126.237302ms)
|
||||
✔ launches off refuses role.launch with launch-revoked until launches on (189.983039ms)
|
||||
✔ broker process: launch ops authorize role.launch, record refusals and end runs (270.268004ms)
|
||||
✔ human proof binds CLI entry, process start and nonce; agents and incomplete ancestry refuse (2.629338ms)
|
||||
✔ process reader gets own kernel identity without exposing environment values (0.472131ms)
|
||||
✔ EACCES ancestor environments skip only markers; commands and registered launches still refuse (0.736096ms)
|
||||
✔ real pid 1 remains inspectable when its environment is protected (0.348474ms)
|
||||
✔ limits binds actor from human proof and rejects role, reader, tester and forged actor (197.634111ms)
|
||||
✔ runtime wires verified human settings to the actual shared file writer and actor receipt (273.978023ms)
|
||||
✔ uncertain organization receipts leave bus startup and reads alone but refuse writes until reconciled (416.217589ms)
|
||||
✔ within-role sends cite an open gated launch decision without spending it or naming it in grants (182.780519ms)
|
||||
✔ missing and foreign-business citations refuse and roll back message and grant (188.292209ms)
|
||||
✔ cross-role sends still need a matching resolved decision and consume it once (250.559613ms)
|
||||
✔ messages pages all human messages newest first without writes; read state is history (2599.479529ms)
|
||||
✔ messages refuses role callers, invalid paging and cursors outside this human feed (245.593106ms)
|
||||
✔ views messages passes only its paging arguments through (0.257316ms)
|
||||
✔ messages isolates businesses even with a valid foreign cursor (153.734385ms)
|
||||
✔ the assistant sends to the user and to the chief of staff only (283.983721ms)
|
||||
✔ an assistant send to any other role, or to the tester, is refused and logged (343.919038ms)
|
||||
✔ only the user and the chief of staff may send to the assistant; the tester is refused by default (330.560929ms)
|
||||
✔ a sender-side list alone refuses a send to a role that has no list (321.22946ms)
|
||||
✔ a target-side list alone refuses a send from a role that has no list (341.371828ms)
|
||||
✔ the sender list is checked before the target list (283.998629ms)
|
||||
✔ roles without the field behave exactly as before (399.661498ms)
|
||||
✔ a business with no role definitions at all is unlimited (303.760646ms)
|
||||
✔ a malformed messaging field refuses at boot (109.99098ms)
|
||||
✔ the assistant's review.request to a reviewer is refused and logged, even with an approved decision (276.744006ms)
|
||||
✔ a review.verdict to the assistant from a role outside its receiveFrom is refused and logged (303.452841ms)
|
||||
✔ review requests and verdicts between roles without the field are unchanged (221.374285ms)
|
||||
✔ broker process binds trusted launches, offers reader capabilities, refuses human mutation, closes cleanly (197.611624ms)
|
||||
✔ startup token refusal returns safe code without value or partial listening broker (42.387018ms)
|
||||
✔ loaded fixture token is absent from socket replies and SQLite, including refusal evidence (193.511503ms)
|
||||
✔ killed broker leaves an explicit stale lock; another process cannot silently reclaim it (162.185531ms)
|
||||
✔ trusted host registers later launches; socket clients never have a registration verb (192.614352ms)
|
||||
✔ runtime excludes declared project roots even when host supplies no repoRoots (37.937261ms)
|
||||
✔ a refused launch binding leaves the broker and existing capabilities alive; bad protocol stops it (176.034327ms)
|
||||
✔ a reply is listed for human and reader sessions, and its delivery rows are unchanged (222.11192ms)
|
||||
✔ the reply still reaches the human message.receive (mosaic talk) after the Console showed it (196.102393ms)
|
||||
✔ a message with no reply gives an empty list (163.240241ms)
|
||||
✔ replies come oldest first and stop at REPLIES (770.260935ms)
|
||||
✔ an id that names no message in the business refuses message-not-found, and the refusal is recorded (319.063668ms)
|
||||
✔ strict arguments; a role session gets human-required (391.375947ms)
|
||||
✔ views passes replies through as one call with the id (0.244539ms)
|
||||
✔ requirements returns the committed list to a holding role session, and no one else (218.300253ms)
|
||||
✔ the PM's prd.approve with no task, when no id fits, reaches the human's Inbox (149.685628ms)
|
||||
✔ the PM's non-blocking role.revoke with no task reaches the human's Inbox (189.997471ms)
|
||||
✔ a push is recorded as the action.allowed for git.push.working on the task, and only the host records one (252.429621ms)
|
||||
✔ review.request names the latest pushed commit and sends the reviewer a REVIEW-REQUEST (249.22826ms)
|
||||
✔ review.request says which run holds the reviewer role, or null, and a null request waits for a claim (289.683998ms)
|
||||
✔ review.request refuses a commit that isn't the latest push, a non-reviewer and a role without the action (381.422917ms)
|
||||
✔ reviewFetch answers only the addressed reviewer, for the request it cites (267.39716ms)
|
||||
✔ review.verdict answers one request once, to the role that asked (308.590312ms)
|
||||
✔ task.close on a pushed task needs an approve verdict for the latest push (383.096375ms)
|
||||
✔ a refusal the host decided is filed on the task it names, and only a task ref counts (274.82629ms)
|
||||
✔ v3b prototype refusals, views and append-only mutations (1068.880573ms)
|
||||
✔ gated approval authorizes once, survives store reopen, and fresh approval works (246.062459ms)
|
||||
✔ another run cannot consume an approval; a failed check leaves it usable (228.719767ms)
|
||||
✔ two scheduled callers have exactly one grant and one consumed refusal (170.561974ms)
|
||||
✔ failed commit rolls consumption back; cross-role consumes and within-role stays reusable (341.408034ms)
|
||||
✔ class drift gated to cross-role refuses before consumption (234.750422ms)
|
||||
✔ class drift cross-role to gated refuses before consumption (263.028265ms)
|
||||
✔ class drift gated to within-role refuses before consumption (214.426149ms)
|
||||
✔ class drift cross-role to within-role refuses before consumption (250.466151ms)
|
||||
✔ class drift within-role to gated refuses before consumption (192.990811ms)
|
||||
✔ class drift within-role to cross-role refuses before consumption (180.089348ms)
|
||||
✔ message.send consumes approval and prevents a later send or authorize (188.926664ms)
|
||||
✔ role.revoke consumes approval and prevents a later revoke or authorize (219.226923ms)
|
||||
✔ a business that never switched launches reads allowed with no time and no event (127.700116ms)
|
||||
✔ launches revoked and then restored read allowed, with the restore time and event id (157.874498ms)
|
||||
✔ a task closed on the tracker leaves the open list, and total counts the open ones (149.650991ms)
|
||||
✔ a tombstone is not open (151.681582ms)
|
||||
✔ the open list stops at the cap and says so; total still counts every open task (145.685247ms)
|
||||
✔ a role and a reader session read state; arguments, and an unbound cap, refuse (150.721556ms)
|
||||
✔ a human session reads the same state, with the same cap (147.791064ms)
|
||||
✔ reading state writes nothing: every table keeps its row count (176.705427ms)
|
||||
✔ creates private WAL store and excludes a second writer until explicit close (129.919352ms)
|
||||
✔ rollback is atomic and schema metadata is checked against trusted DDL, not just itself (168.796796ms)
|
||||
✔ existing empty database and symlink runtime directory refuse, never initialize over damage (194.121255ms)
|
||||
✔ crash during a transaction recovers no partial event after explicit fixture-only lock removal (182.056651ms)
|
||||
✔ writer refuses mixed at/read_at forms atomically, even through trusted SQL helpers (119.550918ms)
|
||||
✔ async transactions refuse before invoking their function (98.651849ms)
|
||||
✔ the session default fits under the reply cap and pages to the end with next (323.400573ms)
|
||||
✔ the short form: no description, assignees by role, every listed key (272.767493ms)
|
||||
✔ each filter, alone and together, and total counts every match (325.587523ms)
|
||||
✔ task_ref reads one task in full, as the whole board has it (282.085733ms)
|
||||
✔ no arguments is the read the Console and mosaic make, unchanged (279.46167ms)
|
||||
✔ an unknown argument or a bad value refuses invalid-request (869.805341ms)
|
||||
✔ tasks rows carry priority and requirement for every session that reads tasks (312.259177ms)
|
||||
✔ the read model rebuilds from the ledger: a reopened bus and each trail give the same values (361.32517ms)
|
||||
✔ an empty business and one with snapshots but no task.created read cleanly (113.17458ms)
|
||||
✔ recordTask keeps sync reads and a role write apart (178.424057ms)
|
||||
✔ read_at must be one canonical UTC format, so the projection compares strings safely (120.119324ms)
|
||||
✔ a bad entry refuses the whole record (111.866512ms)
|
||||
✔ taskView reads the projection for one business (134.631728ms)
|
||||
✔ requestTask hands only a holder and a task verb to the handler, and records refusals (256.611762ms)
|
||||
✔ the server sends task verbs to the adapter with its own timeout; other verbs stay synchronous (455.033537ms)
|
||||
✔ without an adapter the server refuses every task verb (190.831846ms)
|
||||
✔ the runtime refuses an invalid adapter and closes a valid one (205.331132ms)
|
||||
✔ the process loads the S3 adapter from plain-data trackers (258.959628ms)
|
||||
✔ the tester binds only when the business sets bus.tester to exactly true (803.483144ms)
|
||||
✔ a business may not name a role tester, so the tester address is never a role (255.367266ms)
|
||||
✔ every verb outside the tester list refuses tester-refused and is recorded against the tester (542.091434ms)
|
||||
✔ a tester message is from tester, starts [mos test], and writes no human.input or authority (192.989227ms)
|
||||
✔ a role answers a tester only in reply to a tester message, and the answer never reaches the human (216.091204ms)
|
||||
✔ the tester reads the human views a reader reads (137.580699ms)
|
||||
✔ tester proof binds its own CLI, start time and nonce, refuses a managed run and allows an agent (1.179739ms)
|
||||
✔ neither CLI's nonce proves the other: each proof is bound to its own CLI and nonce variable (0.366462ms)
|
||||
✔ testerNonce reads only the tester's variable and gives null on any read error (0.208682ms)
|
||||
✔ an envelope carries exactly one of cap, human and tester; no tester authenticator refuses (78.341489ms)
|
||||
✔ tester-cli.mjs binds through the runtime when the switch is on, and refuses off or under a run marker (762.128143ms)
|
||||
✔ socket capability stamps launch identity; shared views use wire, no SQL client (153.413917ms)
|
||||
✔ two wire claims serialize; a lost reply never automatically retries (188.01779ms)
|
||||
✔ malformed, oversized and identity-forging envelopes refuse without echoing input (119.131735ms)
|
||||
✔ client preserves UTF-8 when a response divides a multibyte character (10.558342ms)
|
||||
✔ committed mutation followed by dropped reply reports unknown and is never retried (126.485799ms)
|
||||
ℹ tests 171
|
||||
ℹ suites 0
|
||||
ℹ pass 171
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 4322.236069
|
||||
@@ -0,0 +1,100 @@
|
||||
✔ the role file loads and resolves through loadBusiness (7.617066ms)
|
||||
✔ the shipped file is exactly the approved list (0.910397ms)
|
||||
✔ the assistant's authority is message.send within role and nothing else (2.533906ms)
|
||||
✔ the assistant talks to the user and the chief of staff only, and no other shipped role is limited (0.870664ms)
|
||||
✔ a business grant through limits does not widen the role (1.954138ms)
|
||||
✔ a launch block whose by is the assistant is refused (1.663232ms)
|
||||
✔ the instance takes no credential references and no tracker (2.915018ms)
|
||||
✔ the contract passes work to the chief of staff and directs no one (0.687642ms)
|
||||
✔ config directory and file path follow MOSAIC_CONFIG (1.695799ms)
|
||||
✔ the fixture business validates and comes back frozen (5.497001ms)
|
||||
✔ two instances may share a definition (1.936393ms)
|
||||
✔ top-level refusals (11.645505ms)
|
||||
✔ arbiters and projects (4.635666ms)
|
||||
✔ role instances (2.478348ms)
|
||||
✔ Vikunja bots (5.069482ms)
|
||||
✔ a role without Vikunja takes no tracker block (1.839627ms)
|
||||
✔ credential references match the definition's services (2.142816ms)
|
||||
✔ launch (7.272023ms)
|
||||
✔ loadBusiness: file checks (1.605259ms)
|
||||
✔ loadBusiness: not a regular file (37.763448ms)
|
||||
✔ loading writes nothing (1.017299ms)
|
||||
✔ names that are Object.prototype properties don't count as declared (2.637388ms)
|
||||
✔ the shipped example refuses as written and validates once filled in (1.185492ms)
|
||||
✔ the role file loads and resolves through loadBusiness (8.225501ms)
|
||||
✔ the shipped file is exactly the approved list (0.303985ms)
|
||||
✔ the resolved record matches the approved list, so a widened file fails (2.375744ms)
|
||||
✔ the chief of staff holds role.launch and message.send; every other action is gated (1.754834ms)
|
||||
✔ the pm does not hold role.launch (1.725377ms)
|
||||
✔ a business grant of a gated action through limits does not widen the role (2.311423ms)
|
||||
✔ a limit that drops role.launch leaves the chief of staff with no launch block (1.569789ms)
|
||||
✔ a launch block whose by is the pm instance is refused (1.853649ms)
|
||||
✔ the contract names no duty to talk to the human and the pm contract no launch (0.317957ms)
|
||||
✔ the instance takes no credential references and no tracker (9.375289ms)
|
||||
✔ usage errors exit 4 (262.489252ms)
|
||||
✔ validate: a good business exits 0 and prints instance digests (62.22649ms)
|
||||
✔ validate: project files (309.558305ms)
|
||||
✔ validate: missing files and a broken system config (247.144215ms)
|
||||
✔ validate: credential reference problems exit 2 and name each one (64.346125ms)
|
||||
✔ validate: a token file inside the repository is refused (63.930099ms)
|
||||
✔ validate: role definitions come from MOSAIC_ROLES_DIR (188.194923ms)
|
||||
✔ resolve: prints one instance's record (248.440099ms)
|
||||
✔ resolve: refusals (357.900853ms)
|
||||
✔ parse: exactly one of file or env, plus the service's date (2.854173ms)
|
||||
✔ check: a good file has no problems (0.990828ms)
|
||||
✔ check never opens the file: a write-only token passes (0.39899ms)
|
||||
✔ check: file problems (1.032209ms)
|
||||
✔ check: token files can't live in the repository or dataRoot, even through a linked directory (0.938368ms)
|
||||
✔ check: dates and environment references (0.368081ms)
|
||||
✔ REQ-LIMIT-1 schema: every scope unset or zero, adjustable above four, bad values and unknown models refuse (14.820777ms)
|
||||
✔ REQ-LIMIT-1 counts each exact scope at/over limit, unlimited and old tuple after model reassignment (1.073927ms)
|
||||
✔ REQ-ROLE-3 writer: atomic validated revision, immutable previous bytes and authenticated actor/old/new receipt (235.92167ms)
|
||||
✔ REQ-ROLE-3 writer: pre-rename fault leaves old file, post-rename recovery records commit, conflicting recovery refuses (148.744189ms)
|
||||
✔ REQ-LIMIT-1 / decision145 migration prints only, preserves values, rejects ambiguity, and is idempotent (2.885396ms)
|
||||
✔ REQ-LIMIT-1 shared settings validates the complete proposed selection and logs exact actor (110.176329ms)
|
||||
✔ REQ-LIMIT-1 provider is table data: another provider routes separately and aliases share exact counts (1.746015ms)
|
||||
✔ REQ-ROLE-3 refuses live writer locks, symlink targets and uncertain recovery without changing bytes (82.471111ms)
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (11.591901ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (265.039627ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (37.060593ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.456269ms)
|
||||
✔ path and load (2.780539ms)
|
||||
✔ refusals (1.278067ms)
|
||||
✔ systemVars flattens the validated config (1.921552ms)
|
||||
✔ precedence: system, business, project, project role, agent (8.769238ms)
|
||||
✔ limits narrow the definition and never widen it (1.896825ms)
|
||||
✔ role.launch stays within-role only for the instance the launch block names (4.637215ms)
|
||||
✔ limits.authority without role.launch leaves the launcher with no launch block (1.626019ms)
|
||||
✔ limits.authority narrows cross-role actions too (0.907829ms)
|
||||
✔ classify (1.00448ms)
|
||||
✔ the record carries what the broker and launcher need (0.997607ms)
|
||||
✔ digest: key order doesn't matter, any value change does (7.783023ms)
|
||||
✔ refusals (1.800184ms)
|
||||
✔ the four shipped version 2 roles load (3.722796ms)
|
||||
✔ shipped role scopes match addendum B section 2 and the SR runbook (1.277313ms)
|
||||
✔ shipped authority follows the note's table (0.805041ms)
|
||||
✔ every role file in roles/ loads through the validator, and a v2 contract exists (0.911638ms)
|
||||
✔ version 1 files keep loading with no authority (2.698255ms)
|
||||
✔ the conductor policy isn't a role (0.19722ms)
|
||||
✔ a missing role file is exit 4, a symbolic link too (0.31163ms)
|
||||
✔ version 2 refusals (1.201847ms)
|
||||
✔ authority: closed vocabulary, no gated-only action, no overlap (2.095823ms)
|
||||
✔ messaging: optional, role definitions and human, never the tester (1.713243ms)
|
||||
✔ credentials: Gitea scopes (0.932951ms)
|
||||
✔ credentials: Vikunja scopes are a group-to-verbs map from the grantable list (1.261786ms)
|
||||
✔ credentials: services (0.420616ms)
|
||||
✔ contract: a non-empty regular Markdown file beside the role file (0.563621ms)
|
||||
✔ every key names known layers and a merge rule (1.224599ms)
|
||||
✔ unknown keys and wrong layers refuse (1.087174ms)
|
||||
✔ types (2.571371ms)
|
||||
✔ merge: defaults, then the most specific layer wins (0.366522ms)
|
||||
✔ merge: limits only narrow, and provenance lists each source (0.472818ms)
|
||||
✔ merge doesn't change its inputs (0.194075ms)
|
||||
ℹ tests 92
|
||||
ℹ suites 0
|
||||
ℹ pass 92
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 1874.577995
|
||||
@@ -0,0 +1,205 @@
|
||||
✔ every screen and overlay fits 120x36, 80x24 and the narrow layout, row for row (1290.972373ms)
|
||||
✔ width counts terminal cells: wide CJK and emoji 2, U+FE0F after a one-cell base 1, marks 0 (62.484389ms)
|
||||
✔ broker text is shown, never interpreted: no raw control character or bidi override reaches the terminal (158.239591ms)
|
||||
✔ NO_COLOR: no escape codes, except reverse video on the selected row (251.888881ms)
|
||||
✔ 1-9 shows the decide flow's own lines and question; only y resolves (146.104998ms)
|
||||
✔ the app shows the same decide text as mosaic decide (104.226296ms)
|
||||
✔ any key but y or Y at the question answers No; nothing is sent (2503.316631ms)
|
||||
✔ below 40x10 the question is hidden, so every key answers it No, y included (Filbert R3) (420.892425ms)
|
||||
✔ under 40 columns a tall terminal shows the too-small screen even where the decide box would fit; y sends nothing (Filbert N10) (1620.612281ms)
|
||||
✔ a hidden decide box names the way out, and the status line under it does not promise y (Filbert N12) (173.225506ms)
|
||||
✔ a throw while answering the question goes to crash, sends nothing and leaves no job pending (342.812523ms)
|
||||
✔ type-ahead never answers the question: a paste, keys typed before it is drawn, keys inside askMs (1174.927744ms)
|
||||
✔ quitting at the question answers No and sends nothing, armed or not (207.026832ms)
|
||||
✔ a timer tick reads nothing under an overlay, never answers the question, and keeps a resolved status (140.545504ms)
|
||||
✔ a long question is cut inside the question; the action, target, choice and prompt stay (Dewey B1) (122.06618ms)
|
||||
✔ a decide box too big for the terminal says so, and every key answers it No, y included (Dewey B1, round 3) (835.856561ms)
|
||||
✔ at every size the decide box shows each line y depends on, or says it is hidden (8140.277471ms)
|
||||
✔ outcome unknown: the CLI's sentence, no retry, then the trail or a re-read (159.4791ms)
|
||||
✔ refused and failed reads keep the last list, marked stale; a refused decide says refused (116.716312ms)
|
||||
✔ help or a detail box cut to fit keeps its last line, Esc included (Dewey) (57.699471ms)
|
||||
✔ keys: views, moving, trail of a selection, the command line, help and quit (237.901712ms)
|
||||
✔ one option: the status line says Press 1, not 1-1 (95.18464ms)
|
||||
✔ no business: the app says so and :business picks one (49.444128ms)
|
||||
✔ mosaic with no argument: exit 3 in an agent run, exit 4 with the usage off a terminal, the app on one (1.672674ms)
|
||||
✔ scripts/mosaic with no argument reaches the app entry; the seat usage it printed before has not drifted (168.76072ms)
|
||||
✔ strings to keep exactly live once, in the decide flow and the transport; the app does not restate them (0.412312ms)
|
||||
✔ decide with --note still asks; a No sends nothing (56.199581ms)
|
||||
✔ the app's business comes from a live bus host only (0.968334ms)
|
||||
✔ runApp leaves the terminal as it found it on q, end of input, SIGTERM, SIGINT, SIGHUP and an error, the first frame's included (6.752899ms)
|
||||
✔ draw is pure: same state, same frame (0.769811ms)
|
||||
✔ inbox lists only decisions routed to the human, with what approving authorizes and how to decide (138.548659ms)
|
||||
✔ decide resolves by id prefix with --yes, and the trail shows it in broker order with the task to follow (132.130997ms)
|
||||
✔ decide refuses without a terminal or --yes, on an unknown option and on a short reference (108.045715ms)
|
||||
✔ decide prints a declining choice as declining (143.484841ms)
|
||||
✔ an unknown outcome is reported once and never resent (112.30833ms)
|
||||
✔ a decision closed before the answer arrives exits 2 and points at its trail (85.046382ms)
|
||||
✔ a prefix that matches two open decisions exits 2 and resolves neither (96.506068ms)
|
||||
✔ without --business a command uses the live host's business, and a stale host.json is not a host (117.601135ms)
|
||||
✔ every human command refuses inside an agent run before it touches the bus (94.506345ms)
|
||||
✔ usage errors exit 4; no business and no host is a usage error (85.945382ms)
|
||||
✔ agents and tasks print through the broker (90.017188ms)
|
||||
✔ notify.json: missing, loose, malformed and extra keys refuse; a binding or null passes (1.292305ms)
|
||||
✔ bootConfig builds the broker's boot message for one business, with no trackers key when no project names one (68.919867ms)
|
||||
✔ trackers come from the tracker.* variables of the one project that names a tracker project (93.779035ms)
|
||||
✔ with two projects, the one that sets tracker.project supplies the tracker and the other is no conflict (39.207954ms)
|
||||
✔ two projects that each name a tracker project refuse, since the boot shape holds one (29.428089ms)
|
||||
✔ a business without tracker.baseUrl gets no trackers entry (35.267949ms)
|
||||
✔ an unknown business and a broken system config refuse with exit 3 (67.347116ms)
|
||||
✔ follow prints an unsolicited message after plain talk returned (207.526467ms)
|
||||
✔ talk --follow continues after reply and prints a later unsolicited message (177.339419ms)
|
||||
✔ inbox lists all unread human messages under decisions, does not deliver or read them (2329.609477ms)
|
||||
✔ follow refuses agent context and bad arguments (142.535709ms)
|
||||
✔ follow Ctrl-C wakes the poll sleep and removes its handler; transport errors also clean up (114.607878ms)
|
||||
✔ plain talk leaves the process SIGINT handlers unchanged (233.141535ms)
|
||||
✔ empty views say so (1.081655ms)
|
||||
✔ the trail keeps the broker's order and names a decision's task without its rows (1.322922ms)
|
||||
✔ tasks print the tracker fields the snapshot carries (0.20523ms)
|
||||
✔ the review loop: the coder pushes and asks, the reviewer fetches and approves, and the task's trail holds each step (714.062629ms)
|
||||
✔ refusals: no action, non-fast-forward, an unknown commit or request, and a push for another task moves only that task's ref (626.477632ms)
|
||||
✔ the size cap refuses a push before any byte (325.728219ms)
|
||||
✔ a fetch over the cap refuses before any byte reaches the reviewer (533.740358ms)
|
||||
✔ the socket refuses a request with no capability, an unknown one, and a bad request line (357.554869ms)
|
||||
✔ a rigged clone runs nothing: hooks, fsmonitor, a filter, a gitlink and a symlinked .git/config leave no marker (1451.693655ms)
|
||||
✔ an identity with no role, or of another business, refuses not-a-role and moves no ref (727.37697ms)
|
||||
✔ a review of a project the business no longer has refuses unknown-project (361.333749ms)
|
||||
✔ past maxActive connections the socket refuses git-busy, and a hung-up connection frees its slot (334.792947ms)
|
||||
✔ close() answers host-closing to a connection still sending its request line (425.653793ms)
|
||||
✔ a bundle that trickles in refuses body-timeout at its deadline and frees its slot (763.041935ms)
|
||||
✔ a reviewer gone before its bundle was sent is filed fetch-aborted, not as the host's fault (1109.247006ms)
|
||||
✔ a reviewer that hangs up the moment it has the whole bundle was served, not aborted (636.720008ms)
|
||||
✔ send: a close after every byte left is served; one that fails a queued write is fetch-aborted (42.597423ms)
|
||||
✔ a bundle with no bytes for bodyIdle refuses body-timeout long before its deadline (604.121876ms)
|
||||
✔ send: a close once the loop is past its last chunk is served, and a failed write there is fetch-aborted (23.819331ms)
|
||||
✔ letGo waits for an answer to leave for at most its cap, then destroys the socket (301.257762ms)
|
||||
✔ a record that fails and can't be undone refuses rollback-failed, which the host logs (529.105453ms)
|
||||
✔ the host boots the broker, binds a launch in process, and the notifier DMs a blocking decision exactly once (969.44847ms)
|
||||
✔ a notifier that dies takes the host down with exit 1, so the unit restarts the pair (259.41252ms)
|
||||
✔ a second host for the same data root refuses with exit 3 while the first runs (199.863778ms)
|
||||
✔ two bus starts racing for one data root leave one host running; the other refuses that a host already runs (572.915289ms)
|
||||
✔ a host takes over a host.lock its dead host left, and puts back a live claim that replaced it meanwhile (2.921049ms)
|
||||
✔ a host.lock that goes between the check and the read is tried again; one that can't be parsed still refuses as unreadable (0.795114ms)
|
||||
✔ a live host's lock stays, however old the file is (0.501519ms)
|
||||
✔ a host.lock left by a host killed with SIGKILL doesn't stop the next bus start (818.91542ms)
|
||||
✔ while a host boots, a reader sees no host: the human commands still ask for --business, stop and status find none (202.978138ms)
|
||||
✔ a host started before host.lock existed, holding only host.json, still refuses a second start, which leaves no lock (34.361086ms)
|
||||
✔ a broker fork that throws leaves no host.lock and no host.json (28.16722ms)
|
||||
✔ a broker send that throws leaves no host.lock and no host.json (35.750434ms)
|
||||
✔ a broker that misses its boot wait leaves no host.lock and no host.json (28.742431ms)
|
||||
✔ a notifier fork that throws stops the broker and leaves no host.lock and no host.json (1152.975553ms)
|
||||
✔ a notifier send that throws stops the broker and leaves no host.lock and no host.json (205.116295ms)
|
||||
✔ a boot reply with no reader for the business refuses with exit 3 naming it, before the notifier starts, and leaves no host.lock and no live broker (156.45877ms)
|
||||
✔ a boot reply with no reader for the business refuses with exit 3 naming it, with no notifier, and leaves no host.lock and no live broker (162.417477ms)
|
||||
✔ a host.json that can't be written stops both children and leaves no host.lock (250.628496ms)
|
||||
✔ an error event on the broker before it replies fails the start at once, and leaves no host.lock and no live child (30.261453ms)
|
||||
✔ an error event on the notifier before it replies fails the start at once, and leaves no host.lock and no live child (185.894662ms)
|
||||
✔ an error event on the broker while the notifier starts fails the start once the notifier replies (455.569507ms)
|
||||
✔ an error event on the broker once the host is up stops the host with exit 1, and leaves no host.lock and no host.json (274.768035ms)
|
||||
✔ an error event on the notifier once the host is up stops the host with exit 1, and leaves no host.lock and no host.json (376.905066ms)
|
||||
✔ a broker reply that misses the wait breaks the channel: the late reply answers nothing, later requests refuse, the host exits 1 (1222.376853ms)
|
||||
✔ a broker reply with another request's id, or none, breaks the channel and the host exits 1 (330.686243ms)
|
||||
✔ a broker reply with no request waiting breaks the channel and the host exits 1 (156.558593ms)
|
||||
✔ a notifier that refuses stops the broker and the host refuses with exit 3 (185.731687ms)
|
||||
✔ a notifier that refuses after the broker died still refuses with exit 3, without a send to the dead broker (190.091729ms)
|
||||
✔ a notifier that dies before it replies, after the broker died, still refuses, without a send to the dead broker (139.393296ms)
|
||||
✔ a close send that fails with EPIPE after the notifier refuses still gives the notifier's refusal, exit 3 (164.928471ms)
|
||||
✔ a close send that fails with EPIPE after the notifier dies unanswered still gives the notifier's error (134.763216ms)
|
||||
✔ close() whose stop and close sends fail with EPIPE still finishes, with exit 1 (177.931212ms)
|
||||
✔ watchChildren reports a child that died before it was called, and one that dies later (22.158424ms)
|
||||
✔ bus stop refuses to signal a live pid that is not a bus host (202.723469ms)
|
||||
✔ bus start refuses with exit 3 and the code when the broker refuses to boot; bus status names the lock (229.496705ms)
|
||||
✔ bus start refuses with exit 3 without a notifier config (99.75502ms)
|
||||
✔ bus start runs until bus stop; status reports it while it runs (740.299026ms)
|
||||
✔ bus-service.sh renders the unit and installs it into a given directory (53.744175ms)
|
||||
✔ bus-service.sh pins the claude binary, refuses one the unit can't carry, and renders without one (66.681241ms)
|
||||
✔ bus-service.sh refuses a directory pin and keeps a symlink default unresolved (13.57894ms)
|
||||
✔ bus-service.sh refuses a default claude without the execute bit, or in a PATH dir with a space (8.469798ms)
|
||||
✔ each launch rereads limits and model selections; lowered limits keep sessions and log exact hit (48.941322ms)
|
||||
✔ bus start --pm: the launcher instance (the chief of staff) runs under its own PID namespace, registered, with a manifest (1390.114685ms)
|
||||
✔ the chief of staff launches a coder through its launch tool; the coder answers; refusals name their code (755.487576ms)
|
||||
✔ each launch makes sure the workspace has a clone of the project: cloned, fast-forwarded, or fetched and logged (992.07075ms)
|
||||
✔ a project clone that can't be made refuses checkout-failed, from --chief and from a session, with no run and no clone left (1320.2256ms)
|
||||
✔ a runner that stops at once ends its launch with the runner's reason (300.695327ms)
|
||||
✔ a Claude Code launch with no session credential refuses before it starts (163.567463ms)
|
||||
✔ a pi launch needs no session credential: pi logs in through its own ENV_ALLOW variables (258.361467ms)
|
||||
✔ a runner killed from the host ends its launch as killed, not failed (559.751103ms)
|
||||
✔ a missing or failing bwrap refuses sandbox-unavailable before anything starts; there is no unconfined fallback (192.967252ms)
|
||||
✔ a real Claude Code coder's shell can't read a stand-in secret or anything else its sandbox doesn't hold (1898.060536ms)
|
||||
✔ a host that died hard leaves its sessions to the next host, which kills them and ends their runs so the role can be launched again (800.718308ms)
|
||||
✔ a host that died hard leaves its sessions to the next host, which finds one already exited (23) and ends their runs so the role can be launched again (3842.068234ms)
|
||||
✔ a malformed sessions.json refuses the host start with exit 3 and stays as it was (132.13491ms)
|
||||
✔ an over-long launch request is refused at once, not at the 10 s idle timeout (135.620747ms)
|
||||
✔ a launch client that never closes its side doesn't hold the host's close (150.365028ms)
|
||||
✔ a runner that ignores SIGTERM is killed when the host closes (1275.785443ms)
|
||||
✔ claudeVersion asks MOSAIC_CLAUDE_BIN when set, else claude on PATH (4.750685ms)
|
||||
✔ migration needs no bus/config, prints whole converted document, is idempotent and never writes (15.799176ms)
|
||||
✔ limits view/set use the human bus transport and pass only the explicit patch (1.900225ms)
|
||||
✔ post-119 example and Jason fixture migrate with checked inherited models; wrong or absent config refuses (226.332186ms)
|
||||
✔ zoned uses the IANA zone across DST (23.471711ms)
|
||||
✔ each open blocking decision is DM'd once, across polls and a restart; non-blocking ones are not (136.166079ms)
|
||||
✔ two blocking decisions get two DMs with different nonces (130.628531ms)
|
||||
✔ the digest nonce differs per business and per day and fits Discord's 25 characters (0.368265ms)
|
||||
✔ a failed DM is journaled, backs off, and is retried until it lands (108.614985ms)
|
||||
✔ five definite refusals stop a DM: one gave-up line, one log line, and a restart keeps the count (116.775157ms)
|
||||
✔ 429s, 5xx-style unknowns and refusals without a status never count toward the limit (126.426253ms)
|
||||
✔ a crash between the fifth refusal and its gave-up line: the next poll appends it and sends nothing (112.055352ms)
|
||||
✔ polled every POLL_MS against a permanent 403, a DM is sent at 0, 30, 60, 90 and 120 min and gives up only then (157.015482ms)
|
||||
✔ a restart after the second refusal does not send before that refusal's 30 min are up (185.751665ms)
|
||||
✔ the digest goes at 08:00 Chicago once a day, with blocking ones marked as DM'd (116.130471ms)
|
||||
✔ a late start with no digest for the day sends one at once; an empty inbox gets one line (105.052173ms)
|
||||
✔ an inbox read failure is logged and the next poll retries (0.638423ms)
|
||||
✔ no Discord id reaches the journal or the log (159.149672ms)
|
||||
✔ the journal: a torn tail is copied out and truncated, so an append after it reopens cleanly (24.072223ms)
|
||||
✔ the journal: a crash between the copy and the truncate leaves a tail the next open repairs (38.694802ms)
|
||||
✔ the journal: a whole file that is one torn line truncates to empty (29.299798ms)
|
||||
✔ the journal: a malformed complete line refuses and leaves the file and any torn tail alone (1.910581ms)
|
||||
✔ the journal: a loose file mode, a loose directory or a symlinked journal refuses (0.715335ms)
|
||||
✔ the journal: a line with a wrong type refuses with exit 3 and names the field (4.870734ms)
|
||||
✔ the journal: a symlinked directory refuses and says it is a link (2.793492ms)
|
||||
✔ the journal: a dangling directory link, a parent that is a file and a journal that is a directory each refuse with exit 3 (0.630656ms)
|
||||
✔ the journal: an append after the file was swapped for a symlink refuses and writes nothing through it (0.444723ms)
|
||||
✔ the journal: a directory it cannot write or create refuses with exit 3 and names the path (0.602187ms)
|
||||
✔ digest content stays within Discord's 2000 characters (0.313459ms)
|
||||
✔ runLoop never overlaps ticks and stops after the one in flight (111.3061ms)
|
||||
✔ a human command refused with human-required prints the other-tree line and exits 3 (3.338148ms)
|
||||
✔ a --tester command refused with tester-required prints the other-tree line and exits 3 (1.223245ms)
|
||||
✔ other exit-3 refusals print no other-tree line (1.733779ms)
|
||||
✔ the line names no path (0.145859ms)
|
||||
✔ shared copy: npm ci, pushed reachability, readonly/existing copy, webui delegation (492.724829ms)
|
||||
✔ wrapper preserves Q81 lease and marker, rejects foreign/symlink; check uses effective roots (407.131426ms)
|
||||
✔ bus unit copy/pm pins, install refuses all busy states and failed reads, drop-in refusal (425.757114ms)
|
||||
✔ missing package manifest refuses before npm; npm failure removes the unpublished temp copy (317.713504ms)
|
||||
✔ real pinned install loads bus and Console; same-copy mosaic talk passes proof, other trees refuse (3975.800205ms)
|
||||
✔ bus status reads effective copy/pm/drop-ins without writes; check refuses an overridden ExecStart (520.250368ms)
|
||||
✔ drop-ins in either override field and malformed metadata refuse; uninstall also checks --no-reload (172.207499ms)
|
||||
✔ install never shows a template name on systemd 261; template drop-ins still refuse (200.064755ms)
|
||||
✔ unlisted instance drop-in is found in another unit lookup directory; path discovery errors refuse (185.59466ms)
|
||||
✔ inherited mosaic-.service.d override refuses without changing the unit (271.771359ms)
|
||||
✔ inherited service.d override refuses without changing the unit (261.639236ms)
|
||||
✔ inherited drop-in unreadable directory or file refuses before writing (256.05343ms)
|
||||
✔ talk --tester sends a [mos test] message as tester from inside an agent and prints the role's reply (144.595984ms)
|
||||
✔ talk --tester refuses text without the [mos test] prefix before any call (100.087304ms)
|
||||
✔ the read verbs take --tester inside an agent, and the trail shows the tester as the sender (102.310759ms)
|
||||
✔ decide, stop and launches take no --tester (123.583145ms)
|
||||
✔ the tester transport runs tester-cli.mjs, and the tester's refusals exit 3 (0.34492ms)
|
||||
✔ with no stand-in transport, --tester runs tester-cli.mjs on the data root's socket (0.533931ms)
|
||||
task.close {} answered: invalid-request; fake saw 18 requests, first GET /info 200, GET /projects/1 200, GET /projects/1/views 200
|
||||
task.close on a missing task answered: task-not-found; it made GET /tasks/999 404
|
||||
✔ bootConfig trackers reach the S3 adapter in the real broker child, which goes ready against a fake Vikunja (429.285454ms)
|
||||
✔ the transport writes {business, verb, args} to the child and reads its JSON (47.104871ms)
|
||||
✔ a bus code on stderr becomes the exit code; garbage and timeouts are outcome problems (2157.641094ms)
|
||||
✔ busExit and refuseInsideAgent (0.440323ms)
|
||||
✔ talk sends a REQUEST, prints and reads everything that arrives, and stops at the reply (211.665975ms)
|
||||
✔ talk --wait 0 only sends; no reply within --wait exits 1 and says where it will show (1119.583585ms)
|
||||
✔ a late reply the Console has listed still reaches the next talk (2248.345781ms)
|
||||
✔ talk, stop and launches off/on refuse inside an agent run; bad arguments are usage errors (673.702469ms)
|
||||
✔ launches off and on go to the broker and change the business's launch state (166.367657ms)
|
||||
✔ launches list reads sessions.json and marks a stale entry; stop reports it and refuses a non-runner (100.718277ms)
|
||||
ℹ tests 195
|
||||
ℹ suites 0
|
||||
ℹ pass 195
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 18801.41566
|
||||
@@ -0,0 +1,29 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.519835ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.312859ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.405097ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.26075ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.239001ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.80311ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.474177ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.453804ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.427051ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.124953ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.904122ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.725925ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.214987ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.324706ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.104356ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.161849ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.390447ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.662307ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.894555ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.194588ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.048454ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 21
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 232.038966
|
||||
@@ -0,0 +1,122 @@
|
||||
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (7942.965599ms)
|
||||
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (7746.050296ms)
|
||||
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (4500.352277ms)
|
||||
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
|
||||
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (5508.250669ms)
|
||||
✔ the README says a refused field table names the file or the key at fault, never a path (1.388352ms)
|
||||
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (8404.77832ms)
|
||||
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (295.498509ms)
|
||||
✔ decisions route serves the roles and recent lists from the reader view (477.648988ms)
|
||||
✔ credentials route serves the broker credential status from the reader view (891.432644ms)
|
||||
✔ replies route serves the replies to one message from the reader view (910.230228ms)
|
||||
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (120.711458ms)
|
||||
✔ bus refusals map to statuses and never carry a path or a stack (90.334703ms)
|
||||
✔ humanCall speaks the human transport protocol without blocking the server (1730.035116ms)
|
||||
✔ busReader takes --business, else the live bus host, else refuses (246.51594ms)
|
||||
✔ humanCall kills a transport that runs past its timeout (529.162429ms)
|
||||
✔ serve refuses a --business value that is not a business id (485.310705ms)
|
||||
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (4599.87137ms)
|
||||
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (3800.30614ms)
|
||||
✔ conversation view: a newer session with no readable history keeps the marker (2866.737023ms)
|
||||
✔ conversation view: seats without history say so and offer no reply (2481.370319ms)
|
||||
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (3971.429151ms)
|
||||
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (54863.55735ms)
|
||||
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (334.047502ms)
|
||||
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (11584.252103ms)
|
||||
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (3735.628443ms)
|
||||
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (3061.924121ms)
|
||||
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (6393.966559ms)
|
||||
✔ copy writes nothing when an archived path is missing at the commit (1146.209616ms)
|
||||
✔ a copy that loses the rename race leaves no read-only temp directory behind (1028.341037ms)
|
||||
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (625.596336ms)
|
||||
✔ a copy that meets a target holding files says exists: and moves nothing into it (898.781656ms)
|
||||
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (1091.400749ms)
|
||||
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (1295.483707ms)
|
||||
✔ serve refuses a --checkout that is not an absolute directory path (249.422514ms)
|
||||
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (53.853871ms)
|
||||
✔ preview options are all three or none, and each is checked (8.237836ms)
|
||||
✔ the CLI refuses a partial or invalid preview flag set at start (2557.275788ms)
|
||||
✔ the CLI with all three flags serves the preview mode (260.468434ms)
|
||||
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (19.009086ms)
|
||||
✔ the header name matches without regard to case, and the value compare is exact (3.780845ms)
|
||||
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (27.317071ms)
|
||||
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (9.803308ms)
|
||||
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (4.288695ms)
|
||||
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (25.987231ms)
|
||||
✔ a repeated Host is 400 before any other check, in preview mode and without it (15.273519ms)
|
||||
✔ without the preview flags the public name is refused and writes still reach the board (8.899179ms)
|
||||
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (2.30297ms)
|
||||
✔ credential state from the date alone, as the bus states it (0.24532ms)
|
||||
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (2280.516847ms)
|
||||
✔ queue: a refused read fails closed with the store's text, redacted (1568.318158ms)
|
||||
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (4492.212226ms)
|
||||
✔ business: names, vars on the allowlist, authority, credential metadata only (12.06245ms)
|
||||
✔ business: missing or invalid file refuses with the module's text, redacted (15.075015ms)
|
||||
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (9.133741ms)
|
||||
✔ settings: release, board, loopback address, notifier binding name only (267.113662ms)
|
||||
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (38.970378ms)
|
||||
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (4010.822418ms)
|
||||
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (22221.994573ms)
|
||||
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (8081.648718ms)
|
||||
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (13711.227584ms)
|
||||
✔ startServer takes send only as a function and only with the preview mode (5.052148ms)
|
||||
✔ the CLI refuses --send without the preview flags, and without a configured bus (354.382149ms)
|
||||
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (137.641123ms)
|
||||
✔ without --send the route is read-only like every other write, and config says no send (10.276614ms)
|
||||
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (7.128778ms)
|
||||
✔ config says send only on the public name with --send on (2.082906ms)
|
||||
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (4.07333ms)
|
||||
✔ each request check refuses before anything is sent, and logs the refusal without the body (22.5853ms)
|
||||
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (4.781224ms)
|
||||
✔ a crafted role name cannot forge a log line (3.533773ms)
|
||||
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (9.671513ms)
|
||||
✔ through the human transport the request is exactly the business, message.send and the keys (128.179973ms)
|
||||
✔ against a real broker: the message is written once as a human send, and its refusals map (1497.534738ms)
|
||||
✔ loopback host and board origin fail closed (10.154222ms)
|
||||
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (257.117547ms)
|
||||
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (50.320211ms)
|
||||
✔ unreachable board reports URL; CLI rejects unsupported options (410.423891ms)
|
||||
✔ render prints the unit without the preview flags (13.667534ms)
|
||||
✔ render carries every serve flag, the preview set included (10.4346ms)
|
||||
✔ a partial preview set is refused (21.211612ms)
|
||||
✔ a value the unit cannot carry is refused, for every flag (282.358199ms)
|
||||
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (27.865147ms)
|
||||
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (234.916066ms)
|
||||
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (92.43398ms)
|
||||
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (423.057168ms)
|
||||
✔ status prints the unit state and GET /healthz on the installed port (429.639978ms)
|
||||
✔ usage: an unknown verb or flag, and start or enable, exit 4 (176.775537ms)
|
||||
✔ without --send, render is the template with its placeholders filled, byte for byte (46.787329ms)
|
||||
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (172.22401ms)
|
||||
✔ --send without the whole preview set is refused and writes nothing (346.964039ms)
|
||||
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (456.077168ms)
|
||||
✔ uninstall and status take no --send (255.261662ms)
|
||||
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (544.414947ms)
|
||||
✔ when the state read fails, install and uninstall refuse with one line and change nothing (220.516751ms)
|
||||
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (132.099821ms)
|
||||
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (262.08309ms)
|
||||
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (16.335408ms)
|
||||
✔ the uid header takes only an Authentik uid; the username header still takes a username (348.565996ms)
|
||||
✔ a preview value cannot start with - or . (93.310577ms)
|
||||
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (799.635715ms)
|
||||
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (3918.411461ms)
|
||||
2026-10-15T16:41:16.536Z settings user="jason" changed
|
||||
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (31.356962ms)
|
||||
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (15.995428ms)
|
||||
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (13.55705ms)
|
||||
✔ tokens.css and icons.svg are byte copies of docs/design (54.639408ms)
|
||||
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (2.75091ms)
|
||||
✔ shipped strings are unchanged, and the web keeps its write boundary (2.967657ms)
|
||||
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (8096.625082ms)
|
||||
✔ five states on Board, Inbox, Tasks, Agents and Trail (3653.993879ms)
|
||||
✔ Queue, Business and Settings in their five states, with no move button (5697.085451ms)
|
||||
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (3684.620318ms)
|
||||
✔ the server log names no config path when the system config refuses (315.668101ms)
|
||||
ℹ tests 112
|
||||
ℹ suites 0
|
||||
ℹ pass 112
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 55232.174557
|
||||
@@ -0,0 +1,55 @@
|
||||
mutants start 2026-10-15T16:42:28Z
|
||||
control-01 packages/plugins/tests/kinds.test.mjs packages/plugins/tests/loader.test.mjs PASS 0
|
||||
control-02 packages/plugins/tests/kinds.test.mjs PASS 0
|
||||
control-03 packages/plugins/tests/loader.test.mjs PASS 0
|
||||
control-04 packages/business/tests/plugin-settings.test.mjs packages/plugins/tests/loader.test.mjs PASS 0
|
||||
control-05 packages/business/tests/plugin-settings.test.mjs PASS 0
|
||||
control-06 packages/cli/tests/stack-copy.test.mjs PASS 0
|
||||
01-name-pattern KILLED 1
|
||||
02-list-cardinality KILLED 1
|
||||
03-one-cardinality KILLED 1
|
||||
04-no-duplicates KILLED 1
|
||||
05-known-kind KILLED 1
|
||||
06-plugins-object KILLED 1
|
||||
07-registry-exports KILLED 1
|
||||
08-registry-version KILLED 1
|
||||
09-missing-directory KILLED 1
|
||||
10-component-type KILLED 1
|
||||
11-symlink-test KILLED 1
|
||||
12-plugins-dir-checked KILLED 1
|
||||
13-kind-dir-checked KILLED 1
|
||||
14-name-dir-checked KILLED 1
|
||||
15-index-checked KILLED 1
|
||||
16-realpath-before-import KILLED 1
|
||||
17-load-failure KILLED 1
|
||||
18-export-present KILLED 1
|
||||
19-export-function KILLED 1
|
||||
20-interface-version KILLED 1
|
||||
21-version-strict KILLED 1
|
||||
22-keep-old-setting KILLED 1
|
||||
23-first-load-nothing-on KILLED 1
|
||||
24-refusal-logged KILLED 1
|
||||
25-log-names-module KILLED 1
|
||||
26-log-kept KILLED 1
|
||||
27-whole-setting-object KILLED 1
|
||||
28-unknown-kind-logged KILLED 1
|
||||
29-absent-key-off KILLED 1
|
||||
30-loads-serialized KILLED 1
|
||||
31-log-required KILLED 1
|
||||
42-modules-known-kind KILLED 1
|
||||
43-unreadable-refused KILLED 1
|
||||
44-realpath-index-mapped KILLED 1
|
||||
45-realpath-root-mapped KILLED 1
|
||||
32-schema-key KILLED 1
|
||||
33-schema-check KILLED 1
|
||||
34-schema-returned KILLED 1
|
||||
35-schema-copy KILLED 1
|
||||
36-setter-strict-keys KILLED 1
|
||||
37-setter-revision-format KILLED 1
|
||||
38-setter-checks-names KILLED 1
|
||||
39-setter-actor-logged KILLED 1
|
||||
40-setter-writes-plugins KILLED 1
|
||||
46-setter-plain-prototype KILLED 1
|
||||
47-writer-checks-bytes KILLED 1
|
||||
41-copy-ships-plugins KILLED 1
|
||||
mutants end 2026-10-15T16:42:52Z rc=0
|
||||
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Row 131: one fault per check. Sequential process groups; whole-group timeout cleanup.
|
||||
--dry checks every mutation site matches and changes source, and runs nothing.
|
||||
A control run first runs each distinct test set on the unmutated source; any failure stops the run."""
|
||||
import json,os,pathlib,signal,subprocess,sys
|
||||
args=[a for a in sys.argv[1:] if a!='--dry'];DRY='--dry' in sys.argv
|
||||
ROOT=pathlib.Path(args[0] if args else os.path.expanduser('~/dewey-scratch/r131/wt'))
|
||||
OUT=pathlib.Path(__file__).resolve().parent/'mutants'
|
||||
LT='packages/plugins/tests/loader.test.mjs';KT='packages/plugins/tests/kinds.test.mjs';PT=[KT,LT]
|
||||
ST='packages/business/tests/plugin-settings.test.mjs';CT='packages/cli/tests/stack-copy.test.mjs'
|
||||
cases=[]
|
||||
def add(id,path,old,new,test):cases.append(dict(id=id,path=path,old=old,new=new,test=test if isinstance(test,list) else [test]))
|
||||
p='packages/plugins/src/kinds.mjs'
|
||||
add('01-name-pattern',p,'if (typeof name !== "string" || !NAME.test(name)) {','if (typeof name !== "string") {',PT)
|
||||
add('02-list-cardinality',p,'} else if (!Array.isArray(setting)) {','} else if (false) {',PT)
|
||||
add('03-one-cardinality',p,'if (typeof setting !== "string") fail(','if (false) fail(',KT)
|
||||
add('04-no-duplicates',p,'if (seen.has(name)) fail(','if (false) fail(',PT)
|
||||
add('05-known-kind',p,'if (!Object.hasOwn(kinds, kind)) {','if (false) {',KT)
|
||||
add('06-plugins-object',p,'if (value === null || typeof value !== "object" || Array.isArray(value)) {','if (value === null) {',KT)
|
||||
add('07-registry-exports',p,'exports: Object.freeze(["mayLaunch", "mustStop"])','exports: Object.freeze(["mayLaunch"])',PT)
|
||||
add('08-registry-version',p,'kind: "usage-source", interfaceVersion: 1,','kind: "usage-source", interfaceVersion: 2,',PT)
|
||||
p='packages/plugins/src/loader.mjs'
|
||||
add('09-missing-directory',p,'if (e.code === "ENOENT" || e.code === "ENOTDIR") refuse("missing", `${path} is missing`);','/* missing not mapped */',LT)
|
||||
add('10-component-type',p,'if (directory ? !st.isDirectory() : !st.isFile()) {','if (false) {',LT)
|
||||
add('11-symlink-test',p,'if (st.isSymbolicLink()) refuse("symlink", `${path} is a symlink`);','/* symlinks allowed */',LT)
|
||||
add('12-plugins-dir-checked',p,' component(ROOT, true);\n','',LT)
|
||||
add('13-kind-dir-checked',p,' component(kindDir, true);\n','',LT)
|
||||
add('14-name-dir-checked',p,' component(nameDir, true);\n','',LT)
|
||||
add('15-index-checked',p,' component(index, false);\n','',LT)
|
||||
add('16-realpath-before-import',p,'if (real !== expected) refuse(','if (false) refuse(',LT)
|
||||
add('17-load-failure',p,'refuse("load-failed", `${spec.kind} ${name} failed to load: ${e.message}`);','throw e;',LT)
|
||||
add('18-export-present',p,'if (!Object.hasOwn(module, key)) refuse(','if (false) refuse(',LT)
|
||||
add('19-export-function',p,'if (typeof module[key] !== "function") refuse(','if (false) refuse(',LT)
|
||||
add('20-interface-version',p,'if (module.interfaceVersion !== spec.interfaceVersion) {','if (false) {',LT)
|
||||
add('21-version-strict',p,'if (module.interfaceVersion !== spec.interfaceVersion) {','if (module.interfaceVersion != spec.interfaceVersion) {',LT)
|
||||
add('22-keep-old-setting',p,'if (ok) current.set(kind, Object.freeze(next));','current.set(kind, Object.freeze(next));',LT)
|
||||
add('23-first-load-nothing-on',p,'if (ok) current.set(kind, Object.freeze(next));','if (ok || current.get(kind).length === 0) current.set(kind, Object.freeze(next));',LT)
|
||||
add('24-refusal-logged',p,' log(entry);\n','',LT)
|
||||
add('25-log-names-module',p,'name: e.plugin ?? name, code','name, code',LT)
|
||||
add('26-log-kept',p,'kept: kind === null ? loaded() : current.has(kind) ? current.get(kind).map(m => m.name) : [],','kept: [],',LT)
|
||||
add('27-whole-setting-object',p,'if (plugins === null || typeof plugins !== "object" || Array.isArray(plugins)) {','if (plugins === null || typeof plugins !== "object") {',LT)
|
||||
add('28-unknown-kind-logged',p,'refused(kind, null, new PluginError("unknown-kind"','void (kind, null, new PluginError("unknown-kind"',LT)
|
||||
add('29-absent-key-off',p,'if (Object.hasOwn(plugins, kind)) names = namesFor(','if (!Object.hasOwn(plugins, kind)) continue; names = namesFor(',LT)
|
||||
add('30-loads-serialized',p,'const run = queue.then(() => apply(plugins));','const run = apply(plugins);',LT)
|
||||
add('31-log-required',p,'if (typeof log !== "function") throw','if (false) throw',LT)
|
||||
add('42-modules-known-kind',p,'if (!current.has(kind)) refuse("unknown-kind"','if (false) refuse("unknown-kind"',LT)
|
||||
add('43-unreadable-refused',p,'refuse("unreadable", `${path} can\'t be read (${e.code ?? e.message})`);','throw e;',LT)
|
||||
add('44-realpath-index-mapped',p,'const real = fsCall(index, realpathSync);','const real = realpathSync(index);',LT)
|
||||
add('45-realpath-root-mapped',p,'join(fsCall(ROOT, realpathSync),','join(realpathSync(ROOT),',LT)
|
||||
p='packages/business/src/business.mjs'
|
||||
add('32-schema-key',p,'"roles", "launch", "plugins"];','"roles", "launch"];',[ST,LT])
|
||||
add('33-schema-check',p,'structuredClone(checkPlugins(document.plugins, `${file} plugins`, { fail: (_code, message) => refuse(message) }))','structuredClone(document.plugins)',ST)
|
||||
add('34-schema-returned',p,'launch, plugins, definitions,','launch, definitions,',[ST,LT])
|
||||
add('35-schema-copy',p,' : structuredClone(checkPlugins(',' : (checkPlugins(',ST)
|
||||
p='packages/business/src/plugin-settings.mjs'
|
||||
add('36-setter-strict-keys',p,'Object.keys(args).some(key => key !== "revision" && key !== "plugins")','false',ST)
|
||||
add('37-setter-revision-format',p,'if (typeof args.revision !== "string" || !/^[a-f0-9]{64}$/.test(args.revision)) {','if (false) {',ST)
|
||||
add('38-setter-checks-names',p,' checkPlugins(args.plugins, "plugins");\n','',ST)
|
||||
add('39-setter-actor-logged',p,'{ revision: args.revision, actor }','{ revision: args.revision, actor: "host" }',ST)
|
||||
add('40-setter-writes-plugins',p,' next.plugins = structuredClone(args.plugins);\n','',ST)
|
||||
add('46-setter-plain-prototype',p,'if (proto !== Object.prototype && proto !== null) {','if (false) {',ST)
|
||||
p='packages/business/src/organization.mjs'
|
||||
add('47-writer-checks-bytes',p,' validateBusinessDocument(written, file, { rolesDir });\n','',ST)
|
||||
add('41-copy-ships-plugins','scripts/stack-copy.sh',' packages/plugins\n','',CT)
|
||||
def run(name,test):
|
||||
env={**os.environ,'DOCKER_HOST':'unix:///nonexistent.sock'}
|
||||
with (OUT/(name+'.log')).open('w') as log:
|
||||
p=subprocess.Popen(['node','--test',*test],cwd=ROOT,env=env,stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
|
||||
try:return p.wait(timeout=300)
|
||||
except subprocess.TimeoutExpired:os.killpg(p.pid,signal.SIGKILL);p.wait();return 'timeout'
|
||||
results=[];control=[]
|
||||
if not DRY:
|
||||
OUT.mkdir(exist_ok=True)
|
||||
sets=[];[sets.append(c['test']) for c in cases if c['test'] not in sets]
|
||||
for i,t in enumerate(sets):
|
||||
rc=run('control-%02d'%(i+1),t);control.append(dict(id='control-%02d'%(i+1),test=t,exit=rc));print('control-%02d'%(i+1),' '.join(t),'PASS' if rc==0 else 'FAIL',rc,flush=True)
|
||||
if rc!=0:(OUT/'control.json').write_text(json.dumps(control,indent=2)+'\n');sys.exit('control failed: unmutated source fails '+' '.join(t))
|
||||
(OUT/'control.json').write_text(json.dumps(control,indent=2)+'\n')
|
||||
for c in cases:
|
||||
file=ROOT/c['path'];before=file.read_text();matches=before.count(c['old'])
|
||||
if not matches:raise RuntimeError('missing mutation site '+c['id'])
|
||||
after=before.replace(c['old'],c['new'])
|
||||
if after==before:raise RuntimeError('no change '+c['id'])
|
||||
if DRY:print(c['id'],'sites',matches,flush=True);continue
|
||||
file.write_text(after)
|
||||
try:
|
||||
rc=run(c['id'],c['test'])
|
||||
verdict='KILLED' if isinstance(rc,int) and rc!=0 else 'SURVIVED' if rc==0 else 'TIMEOUT'
|
||||
row={k:c[k] for k in ['id','path','test']};row.update(result=verdict,exit=rc,sites=matches);results.append(row);print(c['id'],verdict,rc,flush=True)
|
||||
finally:file.write_text(before)
|
||||
if not DRY:(OUT/'results.json').write_text(json.dumps(results,indent=2)+'\n')
|
||||
@@ -0,0 +1,85 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (0.996001ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.182864ms)
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.001549ms)
|
||||
✖ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.199326ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.151957ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.403267ms)
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.164675ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.964415ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.879038ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.089231ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.743931ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.73052ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.250644ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.482361ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.991154ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.185904ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.332246ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.668266ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.689325ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.247682ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.939442ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 18
|
||||
ℹ fail 3
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.340526
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:24:1
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.001549ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception: Meter
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:30:12)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:35:1
|
||||
✖ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.199326ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception.
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:39: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:64:1
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.164675ms)
|
||||
AssertionError [ERR_ASSERTION]: Meter: /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-O1VMSX/packages/plugins/usage-source/Meter is missing
|
||||
+ actual - expected
|
||||
|
||||
+ 'missing'
|
||||
- 'bad-name'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:67:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'missing',
|
||||
expected: 'bad-name',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.023771ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.228057ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.150508ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.156655ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.155201ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.30515ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.34785ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.274529ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.43153ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.026469ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.388898ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.042863ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.284637ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.376742ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.943525ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.349485ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.552245ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.949225ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.628666ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (101.958279ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.120707ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 20
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 225.789513
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.628666ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
'e' !== 'meter'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:37:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:239:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'e',
|
||||
expected: 'meter',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (0.94563ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.236289ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (3.814064ms)
|
||||
✖ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.435522ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.137653ms)
|
||||
ℹ tests 5
|
||||
ℹ suites 0
|
||||
ℹ pass 4
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 49.269106
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:35:1
|
||||
✖ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.435522ms)
|
||||
AssertionError [ERR_ASSERTION]: The validation function is expected to return "true". Received false
|
||||
|
||||
Caught error:
|
||||
|
||||
PluginError: plugins.single names ["only"], which doesn't match /^[a-z][a-z0-9-]*$/
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:38: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: PluginError: plugins.single names ["only"], which doesn't match /^[a-z][a-z0-9-]*$/
|
||||
at raise (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:30:9)
|
||||
at namesFor (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:45:7)
|
||||
at checkPlugins (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:63:5)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:38:23
|
||||
at getActual (node:assert:580:5)
|
||||
at strict.throws (node:assert:728:24)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:38: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),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.032167ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.21157ms)
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.50107ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.178734ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.144174ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.504522ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.396357ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.414915ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.442613ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.027418ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (29.329875ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.731592ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.276032ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.480902ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.041434ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.261027ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.427943ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.73597ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.848596ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.621564ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.115554ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 19
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 224.418977
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:24:1
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.50107ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception.
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:32: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.848596ms)
|
||||
AssertionError [ERR_ASSERTION]: meter: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
'usage-source': [
|
||||
'meter',
|
||||
+ 'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:240:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'meter', 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (0.927314ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.20551ms)
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.006769ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.150941ms)
|
||||
✖ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.198054ms)
|
||||
ℹ tests 5
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 44.972941
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:24:1
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.006769ms)
|
||||
AssertionError [ERR_ASSERTION]: The validation function is expected to return "true". Received false
|
||||
|
||||
Caught error:
|
||||
|
||||
TypeError: Cannot read properties of undefined (reading 'switch')
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:26: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: TypeError: Cannot read properties of undefined (reading 'switch')
|
||||
at namesFor (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:36:12)
|
||||
at checkPlugins (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:63:5)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:26:23
|
||||
at getActual (node:assert:580:5)
|
||||
at strict.throws (node:assert:728:24)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:26: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),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:42:1
|
||||
✖ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.198054ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /x plugins names unknown kind/. Input:
|
||||
|
||||
"TypeError: Cannot read properties of undefined (reading 'switch')"
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:45: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: TypeError: Cannot read properties of undefined (reading 'switch')
|
||||
at namesFor (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:36:12)
|
||||
at checkPlugins (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:63:5)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:45:23
|
||||
at getActual (node:assert:580:5)
|
||||
at strict.throws (node:assert:728:24)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:45: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),
|
||||
expected: /x plugins names unknown kind/,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (0.998049ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.211036ms)
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (0.608073ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.1756ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.131383ms)
|
||||
ℹ tests 5
|
||||
ℹ suites 0
|
||||
ℹ pass 4
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 45.025922
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:24:1
|
||||
✖ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (0.608073ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception.
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:25:50)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
✖ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.690221ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.272352ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (4.003323ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.175796ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.130681ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.278278ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.410108ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.313334ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.391059ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.001031ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.412686ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.597955ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.148237ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.269335ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.944476ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.921095ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.322861ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.68072ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.899035ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.889175ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.123508ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 19
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.083166
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:8:1
|
||||
✖ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.690221ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
exports: [
|
||||
'mayLaunch',
|
||||
- 'mustStop'
|
||||
],
|
||||
interfaceVersion: 1,
|
||||
kind: 'limit-check',
|
||||
switch: 'list'
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:12:10)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { kind: 'limit-check', interfaceVersion: 1, exports: [ 'mayLaunch' ], switch: 'list' },
|
||||
expected: { kind: 'limit-check', interfaceVersion: 1, exports: [ 'mayLaunch', 'mustStop' ], switch: 'list' },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.921095ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- [
|
||||
- 'limit-check',
|
||||
- 'half',
|
||||
- 'missing-export'
|
||||
- ]
|
||||
- ]
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:196:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ [ 'limit-check', 'half', 'missing-export' ] ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,452 @@
|
||||
✖ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.64663ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.271592ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (3.753195ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.168197ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.122324ms)
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (8.000324ms)
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (2.237809ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.153363ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.039813ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.43548ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.022044ms)
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.288343ms)
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.026847ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.033377ms)
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.01646ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (1.959449ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.489118ms)
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.887712ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (1.792952ms)
|
||||
✖ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (1.835769ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.964779ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 6
|
||||
ℹ fail 15
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 122.695967
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/kinds.test.mjs:8:1
|
||||
✖ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.64663ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
exports: [
|
||||
'readTurn'
|
||||
],
|
||||
+ interfaceVersion: 2,
|
||||
- interfaceVersion: 1,
|
||||
kind: 'usage-source',
|
||||
switch: 'list'
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/kinds.test.mjs:10:10)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { kind: 'usage-source', interfaceVersion: 2, exports: [ 'readTurn' ], switch: 'list' },
|
||||
expected: { kind: 'usage-source', interfaceVersion: 1, exports: [ 'readTurn' ], switch: 'list' },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:44:1
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (8.000324ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source fixture-usage implements interface 1, not 2',
|
||||
+ name: 'fixture-usage'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:56:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'fixture-usage', code: 'interface-version', message: 'usage-source fixture-usage implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:64:1
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (2.237809ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:65:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.153363ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:72:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.039813ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:81:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.43548ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:92:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:119:1
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.288343ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:121:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:137:1
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.026847ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:138:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.033377ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:152:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:177:1
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.01646ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:178:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (1.959449ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:186:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.489118ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:201:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:208:1
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.887712ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
'meter' !== 'absent'
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:221:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'meter',
|
||||
expected: 'absent',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (1.792952ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:226:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:246:1
|
||||
✖ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (1.835769ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'interface-version',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: [],
|
||||
+ kind: 'usage-source',
|
||||
+ message: 'usage-source meter implements interface 1, not 2',
|
||||
+ name: 'meter'
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at loadedTree (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:22:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:247:13)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'interface-version', message: 'usage-source meter implements interface 1, not 2', kept: [] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.90176ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.361998ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.748757ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.845159ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.995221ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (23.706494ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.631477ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.270016ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.299279ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.024096ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.184516ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.271304ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.660878ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.865617ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.916421ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.1015ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 215.805466
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.748757ms)
|
||||
AssertionError [ERR_ASSERTION]: absent: /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-KZKNqY/packages/plugins/usage-source/absent can't be read (ENOENT)
|
||||
+ actual - expected
|
||||
|
||||
+ 'unreadable'
|
||||
- 'missing'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:73:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'unreadable',
|
||||
expected: 'missing',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.186614ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.315095ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.944373ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.278079ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.991503ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (24.395037ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.147566ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.186695ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.747091ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.52592ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.074237ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.305854ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.715183ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.821736ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.34957ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.943575ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 222.57908
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.944373ms)
|
||||
AssertionError [ERR_ASSERTION]: dir-index: usage-source dir-index failed to load: Directory import '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wNOv6V/packages/plugins/usage-source/dir-index/index.mjs' is not supported resolving ES modules imported from /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wNOv6V/packages/plugins/src/loader.mjs
|
||||
+ actual - expected
|
||||
|
||||
+ 'load-failed'
|
||||
- 'missing'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:77:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'load-failed',
|
||||
expected: 'missing',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.714311ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.222662ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.20319ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.519204ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.042677ms)
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.896417ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.731315ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.242542ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.508473ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.942552ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.163471ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.333247ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.672782ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.739229ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.819413ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.989416ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 13
|
||||
ℹ fail 3
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 216.086199
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.519204ms)
|
||||
AssertionError [ERR_ASSERTION]: linked: /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-e5grks/packages/plugins/usage-source/linked is not a directory
|
||||
+ actual - expected
|
||||
|
||||
+ 'missing'
|
||||
- 'symlink'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:84:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'missing',
|
||||
expected: 'symlink',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.042677ms)
|
||||
AssertionError [ERR_ASSERTION]: meter: /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-xQ1n99/packages/plugins/usage-source is not a directory
|
||||
+ actual - expected
|
||||
|
||||
+ 'missing'
|
||||
- 'symlink'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:96:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'missing',
|
||||
expected: 'symlink',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:99:1
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.896417ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
+ actual - expected
|
||||
|
||||
+ 'missing'
|
||||
- 'symlink'
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:115: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'missing',
|
||||
expected: 'symlink',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.925358ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.328723ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.325273ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.474962ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.163341ms)
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.310415ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.626566ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.235051ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.358967ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.946526ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.874281ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.41141ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.707919ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.910123ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.4569ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.025233ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 221.688252
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:99:1
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.310415ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ 'meter'
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:114: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ 'meter' ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.802975ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.133239ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.0508ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.218829ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.305842ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.284746ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.734172ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.245204ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.310071ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.90276ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.22573ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.245922ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.611949ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.821806ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (104.303698ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.140143ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 216.760358
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.305842ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /plugins\/usage-source is a symlink/. Input:
|
||||
|
||||
'/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-zRZTGt/packages/plugins/usage-source/meter/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-zRZTGt/packages/plugins/usage-real/meter/index.mjs'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:39:23)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:96:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-zRZTGt/packages/plugins/usage-source/meter/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-zRZTGt/packages/plugins/usage-real/meter/index.mjs',
|
||||
expected: /plugins\/usage-source is a symlink/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.068342ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.386477ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.797577ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.688309ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.000958ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (29.076793ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.557883ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.204728ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.365951ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.02219ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.271689ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.341166ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.633871ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.396452ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (101.998819ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.981439ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 217.769386
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.797577ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /absent is missing/. Input:
|
||||
|
||||
'/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-dmINlK/packages/plugins/usage-source/absent/index.mjs is missing'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:39:23)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:73:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-dmINlK/packages/plugins/usage-source/absent/index.mjs is missing',
|
||||
expected: /absent is missing/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.688309ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /usage-source\/linked is a symlink/. Input:
|
||||
|
||||
'/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wz847U/packages/plugins/usage-source/linked/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wz847U/packages/plugins/usage-source/meter/index.mjs'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:39:23)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:84:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wz847U/packages/plugins/usage-source/linked/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wz847U/packages/plugins/usage-source/meter/index.mjs',
|
||||
expected: /usage-source\/linked is a symlink/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.725849ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.243948ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (4.257439ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.458063ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.154277ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.532309ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.574681ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.263122ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.727393ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.514483ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.167637ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.339686ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.63742ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.910652ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.610045ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.997279ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 219.515358
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (4.257439ms)
|
||||
AssertionError [ERR_ASSERTION]: dir-index: usage-source dir-index failed to load: Directory import '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-0MgOLq/packages/plugins/usage-source/dir-index/index.mjs' is not supported resolving ES modules imported from /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-0MgOLq/packages/plugins/src/loader.mjs
|
||||
+ actual - expected
|
||||
|
||||
+ 'load-failed'
|
||||
- 'missing'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:35:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:77:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'load-failed',
|
||||
expected: 'missing',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.458063ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /link-index\/index\.mjs is a symlink/. Input:
|
||||
|
||||
'/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-GUjPC8/packages/plugins/usage-source/link-index/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-GUjPC8/packages/plugins/usage-source/meter/index.mjs'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:39:23)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:88:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-GUjPC8/packages/plugins/usage-source/link-index/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-GUjPC8/packages/plugins/usage-source/meter/index.mjs',
|
||||
expected: /link-index\/index\.mjs is a symlink/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.945246ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.348134ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.268283ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.403583ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.127038ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.154045ms)
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.963516ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.224672ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.980735ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.588943ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.205649ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.335382ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.605616ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.886208ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.434789ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.058781ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 219.290564
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:119:1
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.963516ms)
|
||||
AssertionError [ERR_ASSERTION]: swapped: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
'usage-source': [
|
||||
+ 'swapped'
|
||||
- 'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:131:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'swapped' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.445183ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.640137ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.547417ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.603238ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.122971ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.289759ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.672318ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.206065ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.405737ms)
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.528235ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.532213ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.427075ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.693242ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.966564ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.667996ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.00667ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.26357
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:177:1
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.528235ms)
|
||||
SyntaxError: Unexpected end of input
|
||||
at compileSourceTextModule (node:internal/modules/esm/utils:355:16)
|
||||
at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:93:18)
|
||||
at #translate (node:internal/modules/esm/loader:441:20)
|
||||
at afterLoad (node:internal/modules/esm/loader:509:29)
|
||||
at ModuleLoader.loadAndTranslate (node:internal/modules/esm/loader:514:12)
|
||||
at #getOrCreateModuleJobAfterResolve (node:internal/modules/esm/loader:567:36)
|
||||
at afterResolve (node:internal/modules/esm/loader:614:52)
|
||||
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:620:12)
|
||||
at node:internal/modules/esm/loader:639:32
|
||||
at TracingChannel.tracePromise (node:diagnostics_channel:547:22)
|
||||
@@ -0,0 +1,44 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.739325ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.163672ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.209673ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.221438ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.968567ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (29.583567ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.643279ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.23102ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.332869ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.986386ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.449028ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.264944ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.58ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.38206ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.425578ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.94313ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 218.248947
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.449028ms)
|
||||
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /doesn't export readTurn/. Input:
|
||||
|
||||
"usage-source no-read export readTurn isn't a function"
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:39:23)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:188:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: "usage-source no-read export readTurn isn't a function",
|
||||
expected: /doesn't export readTurn/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.876323ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.205801ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.377559ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.293927ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.93176ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (29.378703ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.696961ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.219404ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.46605ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.064478ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.728533ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.465109ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.785553ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.962387ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.606906ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.078982ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.230633
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.728533ms)
|
||||
AssertionError [ERR_ASSERTION]: not-fn: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
'usage-source': [
|
||||
+ 'not-fn'
|
||||
- 'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:192:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'not-fn' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.01029ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.328125ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.276204ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.394084ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.098241ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.876637ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.668409ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.241584ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.788681ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.505207ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.185405ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.776892ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.769312ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.021162ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.820553ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.119294ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 217.379225
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.776892ms)
|
||||
AssertionError [ERR_ASSERTION]: v2: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
'usage-source': [
|
||||
+ 'v2'
|
||||
- 'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:203:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'v2' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.648538ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.488841ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.338481ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.471408ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.159739ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.805471ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (4.124778ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (3.940293ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (4.805749ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (4.922765ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (6.049683ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (5.699961ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (3.253036ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (5.265904ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.996336ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.995374ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 241.746866
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (5.699961ms)
|
||||
AssertionError [ERR_ASSERTION]: v-string: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
'usage-source': [
|
||||
+ 'v-string'
|
||||
- 'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:205:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'v-string' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,295 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.867014ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.363527ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.828213ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.275087ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.068962ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (23.76621ms)
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.669281ms)
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.459637ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.28395ms)
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.739034ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.101171ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (1.982068ms)
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.686111ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.317616ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.461316ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.045805ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 6
|
||||
ℹ fail 10
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 213.193231
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.828213ms)
|
||||
AssertionError [ERR_ASSERTION]: empty: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:75:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.275087ms)
|
||||
AssertionError [ERR_ASSERTION]: linked: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:84:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.068962ms)
|
||||
AssertionError [ERR_ASSERTION]: meter: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:96:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:119:1
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.669281ms)
|
||||
AssertionError [ERR_ASSERTION]: swapped: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:131:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:137:1
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.459637ms)
|
||||
AssertionError [ERR_ASSERTION]: locked: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:142:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.28395ms)
|
||||
AssertionError [ERR_ASSERTION]: late: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:162:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:177:1
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.739034ms)
|
||||
AssertionError [ERR_ASSERTION]: syntax: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:180:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.101171ms)
|
||||
AssertionError [ERR_ASSERTION]: no-read: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:188:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (1.982068ms)
|
||||
AssertionError [ERR_ASSERTION]: v2: old setting kept
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': []
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
}
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:32:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:203:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:208:1
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.686111ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': [
|
||||
+ 'meter'
|
||||
+ ]
|
||||
- 'usage-source': []
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:215:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.043542ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.372489ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.476426ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.395554ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.976977ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (24.395172ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.635883ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.224907ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.865494ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.073079ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.226117ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.370889ms)
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (2.407772ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.780775ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.329232ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.031941ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 217.450214
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:208:1
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (2.407772ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': [
|
||||
+ 'meter'
|
||||
+ ]
|
||||
- 'usage-source': []
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:215:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,395 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.842033ms)
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.129802ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.640275ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.60109ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.313009ms)
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (23.854699ms)
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.748928ms)
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.591502ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.341508ms)
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.913165ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.333615ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.150218ms)
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.753684ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.257445ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.565572ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.097398ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 13
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 214.205253
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:64:1
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.129802ms)
|
||||
AssertionError [ERR_ASSERTION]: Meter: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'bad-name',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: `plugins.usage-source names "Meter", which doesn't match /^[a-z][a-z0-9-]*$/`,
|
||||
- name: 'Meter'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:67:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'Meter', code: 'bad-name', message: `plugins.usage-source names "Meter", which doesn't match /^[a-z][a-z0-9-]*$/`, kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.640275ms)
|
||||
AssertionError [ERR_ASSERTION]: absent: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'missing',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wv0QkT/packages/plugins/usage-source/absent is missing',
|
||||
- name: 'absent'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:73:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'absent', code: 'missing', message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-wv0QkT/packages/plugins/usage-source/absent is missing', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.60109ms)
|
||||
AssertionError [ERR_ASSERTION]: linked: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'symlink',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-15k7Qj/packages/plugins/usage-source/linked is a symlink',
|
||||
- name: 'linked'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:84:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'linked', code: 'symlink', message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-15k7Qj/packages/plugins/usage-source/linked is a symlink', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.313009ms)
|
||||
AssertionError [ERR_ASSERTION]: meter: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'symlink',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-cD7JSs/packages/plugins/usage-source is a symlink',
|
||||
- name: 'meter'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:96:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'symlink', message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-cD7JSs/packages/plugins/usage-source is a symlink', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:99:1
|
||||
✖ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (23.854699ms)
|
||||
TypeError: Cannot read properties of undefined (reading 'code')
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:115:30)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:119:1
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.748928ms)
|
||||
AssertionError [ERR_ASSERTION]: swapped: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'symlink',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-IVlR6R/packages/plugins/usage-source/swapped/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-IVlR6R/packages/plugins/usage-source/meter/index.mjs',
|
||||
- name: 'swapped'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:131:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'swapped', code: 'symlink', message: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-IVlR6R/packages/plugins/usage-source/swapped/index.mjs resolves to /home/jwoltje/dewey-scratch/tmp/mosaic-plugins-IVlR6R/packages/plugins/usage-source/meter/index.mjs', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:137:1
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.591502ms)
|
||||
AssertionError [ERR_ASSERTION]: locked: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'unreadable',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: "/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-dCeJM9/packages/plugins/usage-source/locked/index.mjs can't be read (EACCES)",
|
||||
- name: 'locked'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:142:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'locked', code: 'unreadable', message: "/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-dCeJM9/packages/plugins/usage-source/locked/index.mjs can't be read (EACCES)", kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.341508ms)
|
||||
AssertionError [ERR_ASSERTION]: late: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'unreadable',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: "/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-gscnZD/packages/plugins/usage-source/late/index.mjs can't be read (EACCES)",
|
||||
- name: 'late'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:162:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'late', code: 'unreadable', message: "/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-gscnZD/packages/plugins/usage-source/late/index.mjs can't be read (EACCES)", kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:177:1
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.913165ms)
|
||||
AssertionError [ERR_ASSERTION]: syntax: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'load-failed',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: 'usage-source syntax failed to load: Unexpected end of input',
|
||||
- name: 'syntax'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:180:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'syntax', code: 'load-failed', message: 'usage-source syntax failed to load: Unexpected end of input', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.333615ms)
|
||||
AssertionError [ERR_ASSERTION]: no-read: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'missing-export',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: "usage-source no-read doesn't export readTurn",
|
||||
- name: 'no-read'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:188:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'no-read', code: 'missing-export', message: "usage-source no-read doesn't export readTurn", kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.150218ms)
|
||||
AssertionError [ERR_ASSERTION]: v2: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'interface-version',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: 'usage-source v2 implements interface 2, not 1',
|
||||
- name: 'v2'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:203:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'v2', code: 'interface-version', message: 'usage-source v2 implements interface 2, not 1', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:208:1
|
||||
✖ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.753684ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
0 !== 1
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:218:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 0,
|
||||
expected: 1,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.257445ms)
|
||||
AssertionError [ERR_ASSERTION]: meter: logged once
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- {
|
||||
- code: 'bad-setting',
|
||||
- event: 'plugin-refused',
|
||||
- kept: [
|
||||
- 'meter'
|
||||
- ],
|
||||
- kind: 'usage-source',
|
||||
- message: 'plugins.usage-source must be a list of module names',
|
||||
- name: 'meter'
|
||||
- }
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:40:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:239:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ { event: 'plugin-refused', kind: 'usage-source', name: 'meter', code: 'bad-setting', message: 'plugins.usage-source must be a list of module names', kept: [Array] } ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.963343ms)
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (2.817111ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.955087ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (3.078424ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.145339ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.00902ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.57343ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.213761ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.378731ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.178351ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.261548ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.88856ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.760315ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.584976ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.893941ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.887259ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 216.920292
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:64:1
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (2.817111ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
null !== 'Meter'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:37:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:67:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: null,
|
||||
expected: 'Meter',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.584976ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
null !== 'meter'
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:37:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:240:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: null,
|
||||
expected: 'meter',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,272 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.51982ms)
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.0813ms)
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.55638ms)
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.338952ms)
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.402059ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.268461ms)
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.744027ms)
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.330058ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.411112ms)
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.370041ms)
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.629143ms)
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.19746ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.684467ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.216029ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.245908ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.079293ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 5
|
||||
ℹ fail 11
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.180387
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:64:1
|
||||
✖ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.0813ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:67:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:71:1
|
||||
✖ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (2.55638ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:73:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:80:1
|
||||
✖ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.338952ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:84:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:91:1
|
||||
✖ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.402059ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:96:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:119:1
|
||||
✖ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.744027ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:131:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:137:1
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.330058ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:142:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.411112ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:162:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:177:1
|
||||
✖ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.370041ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:180:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:185:1
|
||||
✖ REQ-PLUG-1 a missing export refuses and keeps the old setting (2.629143ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:188:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:200:1
|
||||
✖ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.19746ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- 'meter'
|
||||
- ]
|
||||
|
||||
at refusesKeepingOld (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:38:10)
|
||||
at async TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:203:3)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ 'meter' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.216029ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- {
|
||||
- 'limit-check': [
|
||||
- 'cap'
|
||||
- ],
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
- }
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:236:12)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.926484ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.396513ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.434101ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.301524ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.051384ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (28.602851ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.657239ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.225707ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.345032ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.099719ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.114078ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.309948ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.569355ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.129746ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.267948ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.079144ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 216.971027
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.129746ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- [
|
||||
- null,
|
||||
- 'bad-setting'
|
||||
- ]
|
||||
- ]
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:235:12)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ [ null, 'bad-setting' ] ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.730643ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.631769ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.46267ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.488592ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.103026ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (27.013093ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.742227ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.273755ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.537806ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (6.850821ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.385225ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.499063ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.748648ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.050346ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.592205ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.270034ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 220.701273
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.050346ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ []
|
||||
- [
|
||||
- [
|
||||
- 'made-up',
|
||||
- 'unknown-kind'
|
||||
- ]
|
||||
- ]
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:228:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [],
|
||||
expected: [ [ 'made-up', 'unknown-kind' ] ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.927501ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.267371ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.150315ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.316604ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (1.936222ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.580279ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.608666ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.214372ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (3.555008ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.479883ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.25298ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.332956ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.675593ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.1044ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (101.831899ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.008853ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 218.806832
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (3.555008ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
+ 'limit-check': [
|
||||
+ 'cap'
|
||||
+ ],
|
||||
- 'limit-check': [],
|
||||
'usage-source': [
|
||||
'meter'
|
||||
]
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:171:12)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [ 'meter' ], 'limit-check': [] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.1044ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
{
|
||||
'limit-check': [
|
||||
'cap'
|
||||
],
|
||||
+ 'usage-source': [
|
||||
+ 'meter'
|
||||
+ ]
|
||||
- 'usage-source': []
|
||||
}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:243:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: { 'usage-source': [ 'meter' ], 'limit-check': [ 'cap' ] },
|
||||
expected: { 'usage-source': [], 'limit-check': [ 'cap' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.546907ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.501287ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.353884ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.445685ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.053794ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.10064ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.669696ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.198338ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.333815ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.906748ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.160066ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.329839ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.701929ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.740437ms)
|
||||
✖ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.628289ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.294596ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 219.466681
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:246:1
|
||||
✖ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.628289ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
[
|
||||
+ 'slow'
|
||||
- 'fast'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:258:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ 'slow' ],
|
||||
expected: [ 'fast' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.897688ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.383988ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.379074ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.396567ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.076803ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (28.782334ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.81382ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.262741ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.457201ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.012166ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.302965ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.409747ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.664634ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.943894ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.25211ms)
|
||||
✖ REQ-PLUG-1 the loader needs a log callback (1.385537ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 219.31302
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:261:1
|
||||
✖ REQ-PLUG-1 the loader needs a log callback (1.385537ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception.
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:264:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
expected: /log callback/,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (4.465769ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (28.836618ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (26.564737ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.532625ms)
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (3.127149ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.883818ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.019005ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (3.018491ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.116043ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.989013ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.585979ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.475614ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.561731ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.104094ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.438625ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.456483ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.79077ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.908187ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.692445ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.998745ms)
|
||||
ℹ tests 20
|
||||
ℹ suites 0
|
||||
ℹ pass 17
|
||||
ℹ fail 3
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 222.828269
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:28:1
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (4.465769ms)
|
||||
Error [BusinessError]: unsupported business file key: "plugins"
|
||||
at refuse (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/errors.mjs:12:9)
|
||||
at rejectUnknownKeys (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/util.mjs:17:33)
|
||||
at validateBusinessDocument (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:140:3)
|
||||
at check (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:30:22)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:33:20)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
exitCode: 2
|
||||
}
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:42:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (28.836618ms)
|
||||
Error [BusinessError]: unsupported business file key: "plugins"
|
||||
at refuse (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/errors.mjs:12:9)
|
||||
at rejectUnknownKeys (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/util.mjs:17:33)
|
||||
at validateBusinessDocument (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:140:3)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:186:7
|
||||
at withLock (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:128:14)
|
||||
at Object.write (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:180:12)
|
||||
at Object.set (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/plugin-settings.mjs:40:28)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:46:27)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25) {
|
||||
exitCode: 2
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:44:1
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (3.127149ms)
|
||||
Error [BusinessError]: unsupported business file key: "plugins"
|
||||
at refuse (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/errors.mjs:12:9)
|
||||
at rejectUnknownKeys (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/util.mjs:17:33)
|
||||
at validateBusinessDocument (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:140:3)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:53:20)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
exitCode: 2
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (5.538428ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (146.577444ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (54.543955ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.609906ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 2
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 257.581172
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:28:1
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (5.538428ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception (BusinessError): {"made-up":[]}
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:38:12)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:67:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (54.543955ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception (BusinessError).
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:73: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (4.729021ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (155.588985ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (27.673956ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.218845ms)
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.087706ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.402118ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.173383ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.588572ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.064736ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.059742ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.627824ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.255102ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (5.983663ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.746589ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.1955ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.330971ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.760203ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.054302ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.686102ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.965666ms)
|
||||
ℹ tests 20
|
||||
ℹ suites 0
|
||||
ℹ pass 18
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 241.184302
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:28:1
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (4.729021ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
|
||||
undefined !== {}
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:31:10)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
expected: {},
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:44:1
|
||||
✖ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.087706ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ [
|
||||
+ {
|
||||
+ code: 'bad-setting',
|
||||
+ event: 'plugin-refused',
|
||||
+ kept: {
|
||||
+ 'limit-check': [],
|
||||
+ 'usage-source': []
|
||||
+ },
|
||||
+ kind: null,
|
||||
+ message: 'plugins must be an object with one key per kind',
|
||||
+ name: null
|
||||
+ }
|
||||
+ ]
|
||||
- []
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:56:10)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ { event: 'plugin-refused', kind: null, name: null, code: 'bad-setting', message: 'plugins must be an object with one key per kind', kept: [Object] } ],
|
||||
expected: [],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (5.39097ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (138.497838ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.81373ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.222557ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 219.705707
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:28:1
|
||||
✖ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (5.39097ms)
|
||||
AssertionError [ERR_ASSERTION]: the document itself stays mutable
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:36:10)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.125693ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (144.63306ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (22.432923ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (53.654616ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 281.646923
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:79:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (53.654616ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception: {"revision":"c92d69f429fdcba946713866b2c2ac72f13c1ed2bfe5a30832c5b1d71d3981c9","plugins":{},"limits":{}}
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:12)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.614121ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (146.973865ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.603481ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (21.782057ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 248.746308
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:79:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (21.782057ms)
|
||||
AssertionError [ERR_ASSERTION]: {"revision":"nope","plugins":{}}
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:12)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: Error: organization revision changed; read again
|
||||
at fail (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:20:9)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:185:32
|
||||
at withLock (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:128:14)
|
||||
at Object.write (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:180:12)
|
||||
at Object.set (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/plugin-settings.mjs:40:28)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:36
|
||||
at getActual (node:assert:580:5)
|
||||
at strict.throws (node:assert:728:24)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:12)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.457769ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (137.801438ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (20.692489ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (22.243252ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 239.967738
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:79:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (22.243252ms)
|
||||
AssertionError [ERR_ASSERTION]: {"revision":"5fd4d63e6518abd78e6b48b484dae3ca54569fd78a5b2f24f10bdd9ca881045f","plugins":{"made-up":["x"]}}
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:12)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: BusinessError: /home/jwoltje/dewey-scratch/tmp/mosaic-business-HNo5TU/businesses/acme.json plugins names unknown kind "made-up"; adding a kind is a core change
|
||||
at refuse (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/errors.mjs:12:9)
|
||||
at fail (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:185:101)
|
||||
at checkPlugins (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:61:7)
|
||||
at validateBusinessDocument (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:185:23)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:186:7
|
||||
at withLock (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:128:14)
|
||||
at Object.write (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:180:12)
|
||||
at Object.set (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/plugin-settings.mjs:39:28)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:36
|
||||
at getActual (node:assert:580:5),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.291864ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (51.051563ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.884761ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.369764ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 132.691518
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:42:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (51.051563ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
'host' !== 'jason'
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:52: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 async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 'host',
|
||||
expected: 'jason',
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.118862ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (53.184345ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (22.597414ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.391426ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 135.23389
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:42:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (53.184345ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
+ undefined
|
||||
- {
|
||||
- 'usage-source': [
|
||||
- 'meter'
|
||||
- ]
|
||||
- }
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:47: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 async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||||
generatedMessage: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
expected: { 'usage-source': [ 'meter' ] },
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
✖ shared copy: npm ci, pushed reachability, readonly/existing copy, webui delegation (324.992135ms)
|
||||
✔ wrapper preserves Q81 lease and marker, rejects foreign/symlink; check uses effective roots (372.160908ms)
|
||||
✔ bus unit copy/pm pins, install refuses all busy states and failed reads, drop-in refusal (371.036254ms)
|
||||
✔ missing package manifest refuses before npm; npm failure removes the unpublished temp copy (235.36278ms)
|
||||
✖ real pinned install loads bus and Console; same-copy mosaic talk passes proof, other trees refuse (2311.883849ms)
|
||||
✔ bus status reads effective copy/pm/drop-ins without writes; check refuses an overridden ExecStart (431.388093ms)
|
||||
✔ drop-ins in either override field and malformed metadata refuse; uninstall also checks --no-reload (146.450925ms)
|
||||
✔ install never shows a template name on systemd 261; template drop-ins still refuse (149.546642ms)
|
||||
✔ unlisted instance drop-in is found in another unit lookup directory; path discovery errors refuse (133.921526ms)
|
||||
✔ inherited mosaic-.service.d override refuses without changing the unit (206.342229ms)
|
||||
✔ inherited service.d override refuses without changing the unit (171.242039ms)
|
||||
✔ inherited drop-in unreadable directory or file refuses before writing (137.891427ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 10
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 5044.167849
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/cli/tests/stack-copy.test.mjs:34:1
|
||||
✖ shared copy: npm ci, pushed reachability, readonly/existing copy, webui delegation (324.992135ms)
|
||||
AssertionError [ERR_ASSERTION]: packages/plugins/src/kinds.mjs
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/cli/tests/stack-copy.test.mjs:37:234)
|
||||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||||
at Test.run (node:internal/test_runner/test:1402:25)
|
||||
at Test.start (node:internal/test_runner/test:1262:17)
|
||||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: false,
|
||||
expected: true,
|
||||
operator: '==',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at packages/cli/tests/stack-copy.test.mjs:101:1
|
||||
✖ real pinned install loads bus and Console; same-copy mosaic talk passes proof, other trees refuse (2311.883849ms)
|
||||
AssertionError [ERR_ASSERTION]: node:internal/modules/esm/resolve:272
|
||||
throw new ERR_MODULE_NOT_FOUND(
|
||||
^
|
||||
|
||||
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/home/jwoltje/dewey-scratch/tmp/stack-copy-hwQIII/copies/35a4a0e34cbed9f4a37230c657f21dd946592216/packages/plugins/src/kinds.mjs' imported from /home/jwoltje/dewey-scratch/tmp/stack-copy-hwQIII/copies/35a4a0e34cbed9f4a37230c657f21dd946592216/packages/business/src/business.mjs
|
||||
at finalizeResolution (node:internal/modules/esm/resolve:272:11)
|
||||
at moduleResolve (node:internal/modules/esm/resolve:879:10)
|
||||
at defaultResolve (node:internal/modules/esm/resolve:1006:11)
|
||||
at #cachedDefaultResolve (node:internal/modules/esm/loader:708:20)
|
||||
at #resolveAndMaybeBlockOnLoaderThread (node:internal/modules/esm/loader:728:38)
|
||||
at ModuleLoader.resolveSync (node:internal/modules/esm/loader:766:56)
|
||||
at #resolve (node:internal/modules/esm/loader:690:17)
|
||||
at ModuleLoader.getOrCreateModuleJob (node:internal/modules/esm/loader:610:35)
|
||||
at ModuleJob.syncLink (node:internal/modules/esm/module_job:277:33)
|
||||
at ModuleJob.link (node:internal/modules/esm/module_job:389:17) {
|
||||
code: 'ERR_MODULE_NOT_FOUND',
|
||||
url: 'file:///home/jwoltje/dewey-scratch/tmp/stack-copy-hwQIII/copies/35a4a0e34cbed9f4a37230c657f21dd946592216/packages/plugins/src/kinds.mjs'
|
||||
}
|
||||
|
||||
Node.js v26.8.1
|
||||
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/cli/tests/stack-copy.test.mjs:111:84)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: '',
|
||||
expected: /bus host up/,
|
||||
operator: 'match',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.31411ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.348189ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.399955ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.452214ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.089915ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (24.500299ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.948601ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.265925ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.415219ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.072596ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.250837ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.30204ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.656149ms)
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.644936ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.468755ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.985858ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 217.591238
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:225:1
|
||||
✖ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.644936ms)
|
||||
AssertionError [ERR_ASSERTION]: made-up
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:231:12)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: TypeError: Cannot read properties of undefined (reading 'map')
|
||||
at Object.modules (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-IkfeMo/packages/plugins/src/loader.mjs:140:29)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:231:34
|
||||
at getActual (node:assert:580:5)
|
||||
at strict.throws (node:assert:728:24)
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/tests/loader.test.mjs:231:12)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (6.740768ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.204354ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.141352ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.221148ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.016407ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.460671ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.664667ms)
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.049547ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.053628ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (2.998748ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.228874ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.26028ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.786148ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.721669ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.995966ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (0.950643ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 14
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 215.389337
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:137:1
|
||||
✖ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.049547ms)
|
||||
Error: EACCES: permission denied, lstat '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/usage-source/locked/index.mjs'
|
||||
at lstatSync (node:fs:2138:25)
|
||||
at fsCall (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/src/loader.mjs:25:12)
|
||||
at component (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/src/loader.mjs:34:14)
|
||||
at loadModule (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/src/loader.mjs:48:3)
|
||||
at apply (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/src/loader.mjs:115:27)
|
||||
at file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/src/loader.mjs:129:34 {
|
||||
errno: -13,
|
||||
code: 'EACCES',
|
||||
syscall: 'lstat',
|
||||
path: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-6K3yuS/packages/plugins/usage-source/locked/index.mjs'
|
||||
}
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.053628ms)
|
||||
Error: EACCES: permission denied, lstat '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/usage-source/late/index.mjs'
|
||||
at realpathSync (node:fs:3413:29)
|
||||
at fsCall (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/src/loader.mjs:25:12)
|
||||
at loadModule (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/src/loader.mjs:53:16)
|
||||
at apply (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/src/loader.mjs:115:27)
|
||||
at file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/src/loader.mjs:129:34 {
|
||||
errno: -13,
|
||||
code: 'EACCES',
|
||||
syscall: 'lstat',
|
||||
path: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pKFMVj/packages/plugins/usage-source/late/index.mjs'
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.407042ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.411779ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.268134ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.385117ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.048584ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (26.554973ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.672433ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.220027ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.164062ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.050272ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.210196ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.34134ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.66475ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.920591ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.560658ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.013584ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 216.58391
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.164062ms)
|
||||
Error: EACCES: permission denied, lstat '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pz2f6V/packages/plugins/usage-source/late/index.mjs'
|
||||
at realpathSync (node:fs:3413:29)
|
||||
at loadModule (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pz2f6V/packages/plugins/src/loader.mjs:53:16)
|
||||
at apply (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pz2f6V/packages/plugins/src/loader.mjs:115:27)
|
||||
at file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pz2f6V/packages/plugins/src/loader.mjs:129:34 {
|
||||
errno: -13,
|
||||
code: 'EACCES',
|
||||
syscall: 'lstat',
|
||||
path: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-pz2f6V/packages/plugins/usage-source/late/index.mjs'
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.479358ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.446636ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.349896ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.366184ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.078721ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (25.810553ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.682094ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.269305ms)
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.390598ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.047475ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.18947ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.373778ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.638337ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.927854ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.635309ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.107292ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 15
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 222.353049
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/plugins/tests/loader.test.mjs:148:1
|
||||
✖ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.390598ms)
|
||||
Error: EACCES: permission denied, lstat '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-oPdUL1/packages/plugins'
|
||||
at realpathSync (node:fs:3413:29)
|
||||
at loadModule (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-oPdUL1/packages/plugins/src/loader.mjs:52:25)
|
||||
at apply (file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-oPdUL1/packages/plugins/src/loader.mjs:115:27)
|
||||
at file:///home/jwoltje/dewey-scratch/tmp/mosaic-plugins-oPdUL1/packages/plugins/src/loader.mjs:129:34 {
|
||||
errno: -13,
|
||||
code: 'EACCES',
|
||||
syscall: 'lstat',
|
||||
path: '/home/jwoltje/dewey-scratch/tmp/mosaic-plugins-oPdUL1/packages/plugins'
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.645106ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (140.306431ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.675393ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (22.460189ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 240.189161
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:79:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (22.460189ms)
|
||||
AssertionError [ERR_ASSERTION]: {"revision":"6ccae343a4ae83a63855287a6fa5c35b7178678e8a7b90a8b003b0154077dd29","plugins":"1970-01-01T00:00:00.000Z"}
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:12)
|
||||
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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: BusinessError: /home/jwoltje/dewey-scratch/tmp/mosaic-business-le2558/businesses/acme.json plugins must be an object with one key per kind
|
||||
at refuse (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/errors.mjs:12:9)
|
||||
at fail (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:185:101)
|
||||
at checkPlugins (file:///home/jwoltje/dewey-scratch/r131/wt/packages/plugins/src/kinds.mjs:57:5)
|
||||
at validateBusinessDocument (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/business.mjs:185:23)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:192:7
|
||||
at withLock (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:128:14)
|
||||
at Object.write (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/organization.mjs:180:12)
|
||||
at Object.set (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/src/plugin-settings.mjs:40:28)
|
||||
at file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:100:36
|
||||
at getActual (node:assert:580:5),
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.081237ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (138.849864ms)
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (47.762831ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.412805ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 3
|
||||
ℹ fail 1
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 244.944358
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at packages/business/tests/plugin-settings.test.mjs:67:1
|
||||
✖ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (47.762831ms)
|
||||
AssertionError [ERR_ASSERTION]: Missing expected exception (BusinessError).
|
||||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r131/wt/packages/business/tests/plugin-settings.test.mjs:73: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 async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: undefined,
|
||||
operator: 'throws',
|
||||
diff: 'simple'
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.008025ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.226377ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (3.990673ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.158845ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.142748ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.379363ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.568839ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.442899ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.450706ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.16396ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (28.188593ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.134283ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.440868ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.577226ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.222799ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (4.074162ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (3.897482ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (3.001734ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (5.579641ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (103.923658ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.123043ms)
|
||||
ℹ tests 21
|
||||
ℹ suites 0
|
||||
ℹ pass 21
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 231.366359
|
||||
@@ -0,0 +1,13 @@
|
||||
✔ REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source and limit-check at interface version 1, each a list (1.035252ms)
|
||||
✔ REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included (0.227758ms)
|
||||
✔ REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates (0.926372ms)
|
||||
✔ REQ-PLUG-1 a kind that switches on one module takes one name, not a list (0.140232ms)
|
||||
✔ REQ-PLUG-1 checkPlugins reports through the caller's fail callback (0.131313ms)
|
||||
ℹ tests 5
|
||||
ℹ suites 0
|
||||
ℹ pass 5
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 45.08752
|
||||
@@ -0,0 +1,24 @@
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (8.366469ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.946059ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (4.009525ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.734755ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.346544ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (24.377766ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (3.231571ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.368765ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.380085ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (3.059489ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.196286ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.347574ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.652547ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (2.949262ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.166869ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.039357ms)
|
||||
ℹ tests 16
|
||||
ℹ suites 0
|
||||
ℹ pass 16
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 224.359777
|
||||
@@ -0,0 +1,28 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.357566ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (146.435083ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.421444ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.485988ms)
|
||||
✔ REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed (7.287625ms)
|
||||
✔ REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting (3.431513ms)
|
||||
✔ REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting (3.344207ms)
|
||||
✔ REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting (2.435744ms)
|
||||
✔ REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting (2.067032ms)
|
||||
✔ REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it) (28.055842ms)
|
||||
✔ REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check (2.82659ms)
|
||||
✔ REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting (2.222447ms)
|
||||
✔ REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath (2.498076ms)
|
||||
✔ REQ-PLUG-1 a module that fails to load refuses and keeps the old setting (6.073698ms)
|
||||
✔ REQ-PLUG-1 a missing export refuses and keeps the old setting (3.30088ms)
|
||||
✔ REQ-PLUG-1 a different interface version refuses and keeps the old setting (2.529776ms)
|
||||
✔ REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name (1.758871ms)
|
||||
✔ REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything (3.184964ms)
|
||||
✔ REQ-PLUG-1 loads run one at a time, so the last requested setting wins (102.858976ms)
|
||||
✔ REQ-PLUG-1 the loader needs a log callback (1.075237ms)
|
||||
ℹ tests 20
|
||||
ℹ suites 0
|
||||
ℹ pass 20
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 228.619663
|
||||
@@ -0,0 +1,12 @@
|
||||
✔ REQ-PLUG-1 schema: plugins is optional, names known kinds and checked module names (7.602567ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the setter writes plugins through the organization writer and logs old and new names (135.320559ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 the writer checks the bytes it writes: a Date in plugins is refused there too (21.043279ms)
|
||||
✔ REQ-PLUG-1 REQ-ROLE-3 a refused setter write throws a code, changes nothing and logs nothing (1.284299ms)
|
||||
ℹ tests 4
|
||||
ℹ suites 0
|
||||
ℹ pass 4
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 217.646591
|
||||
@@ -0,0 +1,20 @@
|
||||
✔ shared copy: npm ci, pushed reachability, readonly/existing copy, webui delegation (343.359729ms)
|
||||
✔ wrapper preserves Q81 lease and marker, rejects foreign/symlink; check uses effective roots (365.864337ms)
|
||||
✔ bus unit copy/pm pins, install refuses all busy states and failed reads, drop-in refusal (372.544525ms)
|
||||
✔ missing package manifest refuses before npm; npm failure removes the unpublished temp copy (247.913029ms)
|
||||
✔ real pinned install loads bus and Console; same-copy mosaic talk passes proof, other trees refuse (3069.833138ms)
|
||||
✔ bus status reads effective copy/pm/drop-ins without writes; check refuses an overridden ExecStart (427.677812ms)
|
||||
✔ drop-ins in either override field and malformed metadata refuse; uninstall also checks --no-reload (148.223334ms)
|
||||
✔ install never shows a template name on systemd 261; template drop-ins still refuse (152.264027ms)
|
||||
✔ unlisted instance drop-in is found in another unit lookup directory; path discovery errors refuse (136.961363ms)
|
||||
✔ inherited mosaic-.service.d override refuses without changing the unit (155.641078ms)
|
||||
✔ inherited service.d override refuses without changing the unit (158.432943ms)
|
||||
✔ inherited drop-in unreadable directory or file refuses before writing (138.363241ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 5775.197495
|
||||
@@ -0,0 +1,46 @@
|
||||
[
|
||||
{
|
||||
"id": "control-01",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
},
|
||||
{
|
||||
"id": "control-02",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
},
|
||||
{
|
||||
"id": "control-03",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
},
|
||||
{
|
||||
"id": "control-04",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
},
|
||||
{
|
||||
"id": "control-05",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
},
|
||||
{
|
||||
"id": "control-06",
|
||||
"test": [
|
||||
"packages/cli/tests/stack-copy.test.mjs"
|
||||
],
|
||||
"exit": 0
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,479 @@
|
||||
[
|
||||
{
|
||||
"id": "01-name-pattern",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "02-list-cardinality",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "03-one-cardinality",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "04-no-duplicates",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "05-known-kind",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "06-plugins-object",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "07-registry-exports",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "08-registry-version",
|
||||
"path": "packages/plugins/src/kinds.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/kinds.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "09-missing-directory",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "10-component-type",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "11-symlink-test",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "12-plugins-dir-checked",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "13-kind-dir-checked",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "14-name-dir-checked",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "15-index-checked",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "16-realpath-before-import",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "17-load-failure",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "18-export-present",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "19-export-function",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "20-interface-version",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "21-version-strict",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "22-keep-old-setting",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "23-first-load-nothing-on",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "24-refusal-logged",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "25-log-names-module",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "26-log-kept",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "27-whole-setting-object",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "28-unknown-kind-logged",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "29-absent-key-off",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "30-loads-serialized",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "31-log-required",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "42-modules-known-kind",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "43-unreadable-refused",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "44-realpath-index-mapped",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "45-realpath-root-mapped",
|
||||
"path": "packages/plugins/src/loader.mjs",
|
||||
"test": [
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "32-schema-key",
|
||||
"path": "packages/business/src/business.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "33-schema-check",
|
||||
"path": "packages/business/src/business.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "34-schema-returned",
|
||||
"path": "packages/business/src/business.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs",
|
||||
"packages/plugins/tests/loader.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "35-schema-copy",
|
||||
"path": "packages/business/src/business.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "36-setter-strict-keys",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "37-setter-revision-format",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "38-setter-checks-names",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "39-setter-actor-logged",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "40-setter-writes-plugins",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "46-setter-plain-prototype",
|
||||
"path": "packages/business/src/plugin-settings.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "47-writer-checks-bytes",
|
||||
"path": "packages/business/src/organization.mjs",
|
||||
"test": [
|
||||
"packages/business/tests/plugin-settings.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
},
|
||||
{
|
||||
"id": "41-copy-ships-plugins",
|
||||
"path": "scripts/stack-copy.sh",
|
||||
"test": [
|
||||
"packages/cli/tests/stack-copy.test.mjs"
|
||||
],
|
||||
"result": "KILLED",
|
||||
"exit": 1,
|
||||
"sites": 1
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,69 @@
|
||||
5c554cde903192487a162c63aa9f8aba4d108eaf4aedf8a5c886e3ade0412bb0 agents/dewey/work/queue-131/r2/BUILD.md
|
||||
f9fbd2aa3f3502bddb2e94bcb9b5a1578772fbc38eec4b9a528a50ba3a93e6fd agents/dewey/work/queue-131/r2/MUTANTS.md
|
||||
c3ef59884b9a37046393fa1b275acc9d0d5246a91b68ea984b8f1151d72bb67e agents/dewey/work/queue-131/r2/base.txt
|
||||
10bdaadf6330f63dc880383df797b7043b8f196d1198781d7d4cd95443b81da7 agents/dewey/work/queue-131/r2/build.patch
|
||||
466c835f7dce79d20c7ab74c197a52b70e7fdeb0efae0456222dc6d0a633f219 agents/dewey/work/queue-131/r2/candidate-manifest.sha256
|
||||
d92f19d1bd17cd86b3697ff15c3e7b38c9fa06fc8030238c13ace153abe73aac agents/dewey/work/queue-131/r2/gate-run.log
|
||||
f99b66b68e929005f7e086fad971bc1a40d74691615dd60d14d238407da26606 agents/dewey/work/queue-131/r2/gate.sh
|
||||
b01aa4baa71ba322957a342c5e91251575626cca6acaa986505c0413a1d7b7c7 agents/dewey/work/queue-131/r2/gate/pkg-bus.log
|
||||
2fa63f6f3ff27d2ccbf7a510b5f7bf30e628278dc02e49f48c21f38fc1840f74 agents/dewey/work/queue-131/r2/gate/pkg-business.log
|
||||
4dcc649492414358ba24515bae655af6c36b45ba02ce68183bcbeac98a680aab agents/dewey/work/queue-131/r2/gate/pkg-cli.log
|
||||
cc1f31d5b89594d9e5953bbe389e44373d117277120f94ac34b8c97c7ec0dabc agents/dewey/work/queue-131/r2/gate/pkg-plugins.log
|
||||
c2ca8286412460212e338a96daf7d6329a83a9ae40d2fd9fa5d0b87b0ed3382e agents/dewey/work/queue-131/r2/gate/pkg-webui.log
|
||||
46932df88ea3fc3b028a5e7b5ff48ae6479d43a0b892f086723708b228968a0d agents/dewey/work/queue-131/r2/mutants-run.log
|
||||
17c6cef193989f94e06be202cdc95ca7b4a14b726eeb29a52e97a9677d1ae202 agents/dewey/work/queue-131/r2/mutants.py
|
||||
db528971879169e4e03614ff4861d38f64da3704c1bf5384e6298d933073fe2d agents/dewey/work/queue-131/r2/mutants/01-name-pattern.log
|
||||
530a422b54921af5d8516c4d24b5b6fc2b5efe5d6f453348a4f6c88719a67a8d agents/dewey/work/queue-131/r2/mutants/02-list-cardinality.log
|
||||
db499885ca4c5b445b700c8fb503a84bb620ab9c6cb246f1a9db3beead930925 agents/dewey/work/queue-131/r2/mutants/03-one-cardinality.log
|
||||
a8eb5db78e218cba7657aa4339f604210388c05001357f41c26ff3bf91ea0491 agents/dewey/work/queue-131/r2/mutants/04-no-duplicates.log
|
||||
310e424b6d36f6680d6fbd0388c94ebcfc29b4344a51b7619edaa7edfe5841ac agents/dewey/work/queue-131/r2/mutants/05-known-kind.log
|
||||
981fbe5536e9a1ea59d0c90be920b218f16a133048e35ab83a33ac5f16fc2c4c agents/dewey/work/queue-131/r2/mutants/06-plugins-object.log
|
||||
d7564865514125e6a761b431dcf37c821a1a7a7c894750f2460df59c5c4529af agents/dewey/work/queue-131/r2/mutants/07-registry-exports.log
|
||||
a25d6c8a6635b59d334805d9b05d848f9c89a0dc4783940509ee80bbf8682583 agents/dewey/work/queue-131/r2/mutants/08-registry-version.log
|
||||
26459614d77e40ebf79f28a60b4a1fdb6eea18106a31dadadae0247744428bb3 agents/dewey/work/queue-131/r2/mutants/09-missing-directory.log
|
||||
486accaf426db57051aadf602c5d1525702291e55254993e7be6447128053d66 agents/dewey/work/queue-131/r2/mutants/10-component-type.log
|
||||
bcf56f74deb78e17ab60e4af29f1624957df0ef79229057863bb6fe9a6934a6d agents/dewey/work/queue-131/r2/mutants/11-symlink-test.log
|
||||
470153fc34b60ebffeb40c7fcdb57680675306d75a1f108de93ad761cb822def agents/dewey/work/queue-131/r2/mutants/12-plugins-dir-checked.log
|
||||
924ce50de17a30ecdd77591ea52975dc6390352e8426b4fc2b52f395e874b0f5 agents/dewey/work/queue-131/r2/mutants/13-kind-dir-checked.log
|
||||
0164fd670f6d79006b44f691cb87b05a7886d1f310dbca0f99871d77cff99129 agents/dewey/work/queue-131/r2/mutants/14-name-dir-checked.log
|
||||
8af5f488381a1df1dc7b2a8f8bd2555a6322a3fc897b5318a4d2d5dc6049e53f agents/dewey/work/queue-131/r2/mutants/15-index-checked.log
|
||||
d4778bd2d7762ba4c8fbad75725e3e9a98041e78f27ac82b10eae113b5ec229c agents/dewey/work/queue-131/r2/mutants/16-realpath-before-import.log
|
||||
0b0d97658786f81f1d76c62c5a3751c448619bcedff17676d283d2f40d6ae814 agents/dewey/work/queue-131/r2/mutants/17-load-failure.log
|
||||
4b31923d9c592fd5b07831521380c10eefff693113be3f5c56600d9fe2c1a08d agents/dewey/work/queue-131/r2/mutants/18-export-present.log
|
||||
e082e12d2ffd374451511544498fa6571815f24bde4945d4d489fa25f2238e0e agents/dewey/work/queue-131/r2/mutants/19-export-function.log
|
||||
44f7e1a36dccd4f755a1678979abfbfea472a688fc6123a50a296e0e730b3620 agents/dewey/work/queue-131/r2/mutants/20-interface-version.log
|
||||
45f2cb6e48e3ada4f7db48c29e1ee2d262ffb4a73173d7cf0700811503a88787 agents/dewey/work/queue-131/r2/mutants/21-version-strict.log
|
||||
5d7ec09fcf871d337233b7ed3b4da078ba94b3bc9e740ae7f6955c92932d3f03 agents/dewey/work/queue-131/r2/mutants/22-keep-old-setting.log
|
||||
ee8915b29cda2ebaad28fde567c4d4143669cbb28f26ecf85b2c80348b01678b agents/dewey/work/queue-131/r2/mutants/23-first-load-nothing-on.log
|
||||
e81deb01822e81771a1b5852db22fed30166de2dd380646aeb1331462a9b65eb agents/dewey/work/queue-131/r2/mutants/24-refusal-logged.log
|
||||
7c121b8ee17c4da727f2306dc2309ee097bc36ff99598851dcbd6b174937155f agents/dewey/work/queue-131/r2/mutants/25-log-names-module.log
|
||||
9520ab1d987a63ae7f1acb529204385254394d4f6e6e805eaa7b8a42e409a760 agents/dewey/work/queue-131/r2/mutants/26-log-kept.log
|
||||
22fe663d05cb24c6633408e45e4a10d23db52b4429e9f7f919712236dcc2eb4f agents/dewey/work/queue-131/r2/mutants/27-whole-setting-object.log
|
||||
245dbed6172bb7a8f361dd02dc22adeaea5b43fc61648597d1a20717d4a2366e agents/dewey/work/queue-131/r2/mutants/28-unknown-kind-logged.log
|
||||
0e173661d5f466f23da5985adfc6b83225f7c176e6359fbb5b5551470edd2eb4 agents/dewey/work/queue-131/r2/mutants/29-absent-key-off.log
|
||||
c58ec6585229b9f88de2348f8f8116259a7eb53c83f7b46b3b7eb2671bb481fe agents/dewey/work/queue-131/r2/mutants/30-loads-serialized.log
|
||||
8987bbc2457f1d09e1bf92c98e4a17807db3d81ca8cded3a83758b3dbbb77713 agents/dewey/work/queue-131/r2/mutants/31-log-required.log
|
||||
2a7817e08656ca45b5bb27438766c4ea35179e7f4ed8abd1364ff5b1a024a869 agents/dewey/work/queue-131/r2/mutants/32-schema-key.log
|
||||
00699a515cb7defa266cfd749fe45a3b7164a67dd0e51ab027d08b220f6b296d agents/dewey/work/queue-131/r2/mutants/33-schema-check.log
|
||||
4f78be795718cd943e9acd78abc34bc791ea18958bd8fa28cc1cd4ecf2958665 agents/dewey/work/queue-131/r2/mutants/34-schema-returned.log
|
||||
9d87114a65e66e77e5756e3ee43677f893d57cbe7f1d4480b342b5184f71d752 agents/dewey/work/queue-131/r2/mutants/35-schema-copy.log
|
||||
fdab1977a3ddd12ff97ea7967fe049a6a9e5667b447f8ff166f4a4a447820d2b agents/dewey/work/queue-131/r2/mutants/36-setter-strict-keys.log
|
||||
1a1156ff59777e8d043ad117593a535662c3d1e1f06febc6a8039297c4c1c85b agents/dewey/work/queue-131/r2/mutants/37-setter-revision-format.log
|
||||
cc7a225d60625ba7f818d9413411f81cb6179a5ed5ed356f993ebd5eb2bbec53 agents/dewey/work/queue-131/r2/mutants/38-setter-checks-names.log
|
||||
392dcfd725d75b030e5a39e3c83e63f3b134dc41b80635c3804798c546bfaa72 agents/dewey/work/queue-131/r2/mutants/39-setter-actor-logged.log
|
||||
8aa0b1365efc431de8f0a3a3d214dd95bcde9b1aab84e7686aafcb7cdfa58c70 agents/dewey/work/queue-131/r2/mutants/40-setter-writes-plugins.log
|
||||
a21a6f4bd14e5f5e6dfa546cb9ae4f802d54af8fcd395ebc0be0e958bd58f6e5 agents/dewey/work/queue-131/r2/mutants/41-copy-ships-plugins.log
|
||||
65f073cec2538490b70aa21923a0bde5e2d543510b04c82d3ba6475af8ad960d agents/dewey/work/queue-131/r2/mutants/42-modules-known-kind.log
|
||||
ad9ac553b5174d333ebce85c435c5a44421a3bf33d2bbd0e2c9635b54dc74e4f agents/dewey/work/queue-131/r2/mutants/43-unreadable-refused.log
|
||||
cacf93a6a147689a68ebe0810921ed4ce6cb876c5f70c1503679c72cb667ffe2 agents/dewey/work/queue-131/r2/mutants/44-realpath-index-mapped.log
|
||||
97077ec85d7054a6bd3c747ccdf7be1d89ea8b6cd4d35076bdc3b40bc4269882 agents/dewey/work/queue-131/r2/mutants/45-realpath-root-mapped.log
|
||||
0a0fc78b7aaf619d9d37c41f97e984e82d5e459a3a1ebe6576566f1336d48373 agents/dewey/work/queue-131/r2/mutants/46-setter-plain-prototype.log
|
||||
d0cf6f97df6c6ec832f329c64b6ffc855019d0a19fc6e05bab9a0f2b2d2cdd80 agents/dewey/work/queue-131/r2/mutants/47-writer-checks-bytes.log
|
||||
2be23a1f7dd19baf5544cce068eaa065055f6448f1d170556eea792be892c451 agents/dewey/work/queue-131/r2/mutants/control-01.log
|
||||
f76a19a96b432002d4b935a825aa634ebec3ae27272120bdb8303e7fbda7d81a agents/dewey/work/queue-131/r2/mutants/control-02.log
|
||||
79e00e29840c077002388ff00bcc9e6ce8288b02227172682fdd61cbd9aa03e3 agents/dewey/work/queue-131/r2/mutants/control-03.log
|
||||
618af49f3bad261032f23164e3e6f8a3e6a29f4ecc5b2ede80617228a4227bfb agents/dewey/work/queue-131/r2/mutants/control-04.log
|
||||
a4ef5440d5afdf88182bacc155e7f53d9b0ee75c55b740f33a6e5f9f640a0cdf agents/dewey/work/queue-131/r2/mutants/control-05.log
|
||||
bae206232c1d746532161e759daf4797d79fa03bf793154de2590a34aee97a38 agents/dewey/work/queue-131/r2/mutants/control-06.log
|
||||
b1b255f2069a2b101d59eff4d32700ccb15edfe6140ea0aa2d0e104cfdf628d6 agents/dewey/work/queue-131/r2/mutants/control.json
|
||||
d4c09ac69af424cf712c042a01e14c0ab586fab4a18414495c939773047ce455 agents/dewey/work/queue-131/r2/mutants/results.json
|
||||
Reference in New Issue
Block a user