plan/spec: the positional gate goes green

Scorecard 204 -> 218 pass, 87 -> 73 fail: the fourteen `arrayFilters` cases
across five files, which is the whole of what the two implementation commits
were expected to move and nothing else. Positional corpus 51/51.

The three divergences measured on the way are written into PLAN §6 rather
than left in commit messages: `$` with two predicates on one array that no
element satisfies together, an array filter with a top-level `$and`/`$or`,
and a literal index into a scalar element -- the last being the one place the
positional walk and the plain indexed path now answer differently, which is
worth a commit of its own and needs its own measurements first.

The design review gets an outcome note, since two of its guesses were wrong
and the corpus is where that was settled.
This commit is contained in:
A.Shakhmatov
2026-08-10 20:40:41 +03:00
parent 200228b0cb
commit 1892cb7969
4 changed files with 56 additions and 37 deletions

View File

@@ -72,24 +72,26 @@ measures the version gap, not the engine.
## Where it stands
Recorded against mongod 8.3.7, run against the server at the positional
refusal:
Recorded against mongod 8.3.7. Green:
```
filtered.json 8 pass 19 fail 0 skip
all-positional.json 3 pass 9 fail 0 skip
first-positional.json 4 pass 8 fail 0 skip
filtered.json 27 pass 0 fail 0 skip
all-positional.json 12 pass 0 fail 0 skip
first-positional.json 12 pass 0 fail 0 skip
```
Red by construction and by design. The 15 that pass are the refusals where
this server's code already matches mongod's; of the 36 that fail, 31 are the
constructs themselves answering "not implemented by this server", and 5 are
refusals whose code differs — four of them the `arrayFilters` validation this
server cannot do yet because it never parses the option.
It was recorded red — 15 pass / 36 fail against the positional refusal — and
driven green by the two implementation commits, the same shape
`tests/spec/aggregate/expressions.json` had at 1 pass / 26 fail before the
expression evaluator existed. The 15 that passed then were the refusals where
this server already agreed with mongod, which is the only part of a red gate
that is worth anything: it says the corpus is measuring the server and not
the harness.
That is the intended shape. `tests/spec/aggregate/expressions.json` was
recorded at 1 pass / 26 fail before the evaluator existed and is green now;
this is the same gate at the same stage.
Three answers here still differ from mongod and are green only because no
case covers them; they are written down in PLAN §6 rather than papered over —
`$` with two disagreeing predicates on one array, an array filter with a
top-level `$and`/`$or`, and a literal index into a scalar element.
## What recording it settled