Regressions
Each defect of the audits (docs/archive/2026-07/BUGS.md) has a row. A row with the status test has a test that names the ID. A row with the status resolved names the change that removed the defect. The test spec-coverage.test.ts checks each test row.
| ID | Status | Evidence |
|---|---|---|
| V-001 | V-0012 tests pass | The others axis exists (@mark1russell7/vex builder tests) |
| V-002 | V-0021 tests pass | The plain and lifted NDVector domains are independent (@mark1russell7/vex-domains) |
| V-003 | V-0031 tests pass | A domain does not change its class (@mark1russell7/vex domain tests) |
| V-004 | V-0043 tests pass | An unknown key gives #REF! |
| V-005 | V-0052 tests pass | other outside a pair gives #REF! |
| V-006 | V-0061 tests pass | Bindings exist only in the expression, through let and with() |
| V-007 | V-0071 tests pass | A literal of the wrong kind gives #VALUE! |
| V-008 | V-0082 tests pass | Inherited members are not ops |
| V-009 | V-0092 tests pass | An op that throws in a reduction gives an error, not an exception |
| V-010 | V-0103 tests pass | Chains are immutable |
| V-011 | resolved | MultiChain is gone. fork() makes a record of branches. |
| V-012 | V-0121 tests pass | No value type is any |
| V-013 | V-0131 tests pass | Strictness exists only for list ops, with one rule |
| V-014 | resolved | createDSL is gone. vex() is the only entry point. |
| V-015 | resolved | The old strict-mode code is gone with @vex/legacy. |
| V-016 | V-0165 tests pass | The law checker finds the false claim of the old Color.add, and the new Color.add is commutative |
| V-017 | V-0171 tests pass | NDVector keeps non-finite components, and the domain check reports them |
| V-018 | V-0181 tests pass | Division by zero gives #NUM! |
| V-019 | V-0191 tests pass | A position outside a grid gives #REF! |
| V-020 | resolved | The Expr type lists each kind, and the interpreter switch is exhaustive (Oxlint switch-exhaustiveness-check). |
| V-021 | V-0211 tests pass | @mark1russell7/vex imports no domain package |
| V-022 | V-0222 tests pass | A value is not undefined |
| V-023 | resolved | applyUsing is gone. Arguments are expressions. |
| V-024 | resolved | methodReturns is gone. The builder reads return types from the method signatures. |
| V-025 | resolved | Optional and Result are the public types of the core, with documented fields. |
| V-026 | resolved | The two P exports and the Biblo schema are gone. Paths are references. |
| V-027 | V-0271 tests pass | The methods of Vec2 are on the prototype |
| V-028 | resolved | The dead code is gone with @vex/legacy. |
| V-029 | resolved | The traversal reductions use the list ops of the interpreter, with one pass. |
| V-030 | resolved | TypeScript is a dependency of each package (P0). |
| V-031 | resolved | pnpm test runs vitest run (P0). |
| V-032 | resolved | The packages have main and the workspace build. The npm build is part of phase P5. |
| V-033 | resolved | Each package has its own tsconfig.json with src as the root (P0). |
| V-034 | resolved | The stale files are gone (P0). |
| V-035 | resolved | The submodules are gone. Funk is vendored (P0). |
| V-036 | resolved | CI runs typecheck, Oxlint, tests and ste-lint (P0). |
| V-037 | resolved | The new suites replace the old tests. |
| V-038 | V-0382 tests pass | String and array values pass as literals |
| V-039 | V-0391 tests pass | The ops section does not record build |
| V-040 | V-0402 tests pass | origin() goes back to the start |
| V-041 | V-0413 tests pass | A chain is not a thenable |
| V-042 | V-0422 tests pass | The others axis evaluates the base at the origin and the body at each target |