Repository navigation
Conversation
jsam
force-pushed
the
fm/fix-snapshot-specs
branch
from
October 5, 2026 17:51
c4d4950 to
2fdf349
Compare
jsam
marked this pull request as ready for review
October 5, 2026 18:01
The three plan specs that #254's join-planner change broke (33_meta/17_debug_join, 18_debug_recursive, 26_debug_complex) were regenerated by #282 and pass on main. The new plans are correct: joins follow body order, the identity Maps are gone, and 26's last rule no longer builds a cross product (Join[L:[], R:[]]) before joining on PId. They still ran only in the full suite, so a plan change could land unnoticed. The fast gate's test job now runs them (make plan-snapshots) with the dev binaries cargo test already built, so no second build. - run_snapshot_tests.sh: --profile picks the binaries' cargo profile (default release); a filter that matches no spec fails instead of passing vacuously. - ci.yml path filter includes the runner script. Closes #290
jsam
force-pushed
the
fm/fix-snapshot-specs
branch
from
October 5, 2026 18:19
2fdf349 to
f07a293
Compare
Contributor
Author
jsam
added a commit
that referenced
this pull request
Oct 5, 2026
…from #362) Folds #362's runner changes into the PR gate: a -f filter (or an --affected category set) that matches nothing fails instead of passing vacuously, so a renamed spec cannot drop out of its gate, and --profile picks the binaries' cargo profile (dev = target/debug; --debug is its shorthand).
jsam
added a commit
that referenced
this pull request
Oct 5, 2026
…from #362) Folds #362's runner changes into the PR gate: a -f filter (or an --affected category set) that matches nothing fails instead of passing vacuously, so a renamed spec cannot drop out of its gate, and --profile picks the binaries' cargo profile (dev = target/debug; --debug is its shorthand).
jsam
added a commit
that referenced
this pull request
Oct 5, 2026
…from #362) Folds #362's runner changes into the PR gate: a -f filter (or an --affected category set) that matches nothing fails instead of passing vacuously, so a renamed spec cannot drop out of its gate, and --profile picks the binaries' cargo profile (dev = target/debug; --debug is its shorthand).
jsam
added a commit
that referenced
this pull request
Oct 5, 2026
…bug build; add main.yml on push to main (#370) * ci: PR gate runs scenarios, affected specs and the oracle from one debug build; main.yml on push to main (#339) - Tests job: make unit-test (unit, integration, scenario and oracle tests), then the snapshot specs the PR affects against the target/debug binaries that build left (run_snapshot_tests.sh --debug --skip-build --affected), then the per-binary timing table in the job summary. - run_snapshot_tests.sh: --debug (target/debug binaries, dev-profile build) and --affected REF. The file-to-category map moves here from test-affected.sh, which now delegates; leaf modules keep a narrow mapping and every other engine change runs the whole corpus (about 1.5 min on 4 cores in debug), so an unmapped module costs time, not coverage. - Both SDK jobs' filters add ws-protocol/, docs/spec/ and src/protocol/. - main.yml on push to main: every spec, oracle at 50 seeds, js-test-live, python-sdk-live, python-test-live and release e2e-reactive with samples. - CONTRIBUTING and TESTING.md describe the three tiers. * test(snapshots): fail a filter that matches no spec; --profile NAME (from #362) Folds #362's runner changes into the PR gate: a -f filter (or an --affected category set) that matches nothing fails instead of passing vacuously, so a renamed spec cannot drop out of its gate, and --profile picks the binaries' cargo profile (dev = target/debug; --debug is its shorthand). * no-mistakes(review): Tighten affected-spec mapping, drop --profile and main.yml dispatch * no-mistakes(document): List hnsw_index_tests.rs in TESTING.md affected-spec map * no-mistakes(ci): The "Detect changes" check was cancelled, not failed. The operator traced it to runner starvation: GitHub-hosted ubuntu-latest jobs waited more than 15 minutes for a runner and were cancelled. The invariant is that every job in the PR gate runs on blacksmith-4vcpu-ubuntu-2404, so none of them waits on the hosted pool. In .github/workflows/ci.yml, the four jobs still on `runs-on: ubuntu-latest` now use `runs-on: blacksmith-4vcpu-ubuntu-2404`: changes (Detect changes), the supply-chain job, the Python SDK job and the JS SDK job. Every runs-on in ci.yml is now blacksmith-4vcpu-ubuntu-2404. Other workflows are outside the PR gate and were left alone. The file still parses as YAML. No docs mention ubuntu-latest, so none needed updating. The PR-description owner should add: "PR gate jobs all run on blacksmith-4vcpu, because hosted ubuntu-latest runners starved and the jobs were cancelled
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Intent
I want you to really hyper focus on making the symbolic engine, you know, crisp and really truly production ready. ... just ensure that both machines are propelry utilized now (Context: implement #290 exactly as written.)
Issue #290, "Snapshot specs 33_meta/17, 18, 26 (.debug plans) fail on main since #254's join-planner change", as written: Found by the EN-15 lane while rebasing: three query-plan snapshot specs (33_meta/17, 33_meta/18, 33_meta/26, .debug plan output) fail on main since the join-planner change in #254. CI's full suite is green, so these specs are not in the CI gate. Fix: confirm the new plans are correct, update the snapshots (or fix the planner if a plan regressed), and add these specs to CI so plan output is gated.
What Changed
make plan-snapshotstarget. It runs the.debugquery-plan specs33_meta/17_debug_join,18_debug_recursiveand26_debug_complexsequentially, using the dev binaries that are already built. The fast-gate test job in.github/workflows/ci.ymlnow runs it right aftermake unit-test. The workflow's Rust path filter also now includesscripts/run_snapshot_tests.sh.scripts/run_snapshot_tests.sh:--profile NAMEoption, defaultrelease.devresolves totarget/debug.-ffilter matches no specs, the script now fails instead of passing with nothing run, so a renamed spec can't silently leave the gate.--skip-buildand--profileoptions, and the extra fast-gate step inTESTING.mdandCONTRIBUTING.Risk Assessment
✅ Low: This change only touches CI and tests. The new
--profileoption keepsreleaseas its default and mapsdevto target/debug.make plan-snapshotsexpands to a filter that matches exactly the three .debug specs, and those specs' .iql.out files were already regenerated on main by #282. The fast-gate job builds the dev binaries withcargo test, which the step needs, and the empty-filter guard works because the script does not run underset -e.Testing
I built the dev server and client binaries and drove
make plan-snapshotsagainst the real inputlayer server. On the current snapshots, specs 17, 18 and 26 all pass. To check the gate catches drift, I changed one line in the 26 snapshot; that spec then failed and make exited non-zero. A filter matching no specs also fails instead of passing with nothing run. Running the target on the binaries built by the same build stepmake unit-testuses also passes. I parsed the CI workflow and confirmed the new step runs after the unit tests on PRs to main; that step has not run live on GitHub Actions, so the scenario is marked untested. All seven 33_meta debug specs pass too. I removed the build output afterwards, and the worktree is clean.make plan-snapshots: specs 33_meta/17, 18 and 26 run against the real server and all passmake plan-snapshotsfailscargo test --workspace --all-features, thenmake plan-snapshots --skip-buildreuses them and passescargo test --no-runEvidence: make plan-snapshots passing on the 3 plan specs
Evidence: Gate fails when a plan snapshot differs (26_debug_complex)
Evidence: Filter matching no specs fails
Evidence: make plan-snapshots after the cargo test --all-features build (CI order)
Evidence: Parsed CI workflow: plan-snapshots step in the test job, path filter
Pipeline
Updates from git push no-mistakes
✅ **intent** - passed
✅ No issues found.
✅ **Rebase** - passed
✅ No issues found.
🔧 **Review** - 1 issue found ✅
Makefile:323- The new empty-filter guard (scripts/run_snapshot_tests.sh:558-563) says it stops 'a renamed spec drops out of its gate', but it only fires when all three plan specs vanish. If only one of 17_debug_join / 18_debug_recursive / 26_debug_complex is renamed, PLAN_SNAPSHOTS still matches the other two. TEST_TOTAL is then 2, and the gate passes while silently no longer checking the renamed plan. Closing this would mean asserting an expected spec count, for example a new runner option or a count check in the Makefile target. That adds to the change, so it is noted rather than prescribed.✅ No issues found.
✅ No issues found.
✅ **Test** - passed
✅ No issues found.
make plan-snapshotsafter building dev binaries: only the 3 .debug plan specs run, and all pass--profileselects the binary directory; a profile with no built binaries fails clearlymake plan-snapshotsaftermake unit-testJoin[L:[], R:[]]cargo build --workspace --all-features --bin inputlayer-client --bin inputlayer-server(dev profile, the binariesmake unit-testleaves behind)make plan-snapshots(passes 3/3: 17_debug_join, 18_debug_recursive, 26_debug_complex; 17_clear_prefix correctly excluded)Temporarily changed one Join line inexamples/iql/33_meta/26_debug_complex.iql.out, then ranmake plan-snapshots(FAIL on 26, make exit 2); restored with git checkout./scripts/run_snapshot_tests.sh --skip-build --profile dev -j 1 -f '33_meta/99_renamed_debug\.iql$'(exit 1, 'No tests match filter')./scripts/run_snapshot_tests.sh --skip-build --profile nosuch ...(exit 1, binaries not found under target/nosuch)Loaded .github/workflows/ci.yml with PyYAML and checked that thetestjob runsmake plan-snapshotsaftermake unit-testChecked the 26_debug_complex snapshot for cross-product joinsJoin[L:[], R:[]](none found)pgrepcheck: no server processes left running after the runs✅ No issues found.
make plan-snapshotswith dev binaries and the 33_meta/17, 18, 26 .debug plan specs passcargo test --workspace --all-features(exactly as CI builds them)cargo build --bin inputlayer-client --bin inputlayer-server(dev profile)make plan-snapshotsagainst the current snapshots: 3/3 PASS, exit 0Restored pre-#282 snapshots (git show c550f359^:examples/iql/33_meta/{17,18,26}*.iql.out) and ranmake plan-snapshots: 3/3 FAIL with plan diffs, exit 2; snapshots then restoredTemporary spec run with./scripts/run_snapshot_tests.sh --skip-build --profile dev -u -f 97_zz_tmp_plan_resultsran the three spec queries without .debug against the live server; results checked, temp files removed./scripts/run_snapshot_tests.sh --skip-build --profile dev -f '33_meta/99_does_not_exist\.iql$': 'No tests match filter', exit 1./scripts/run_snapshot_tests.sh --skip-build -f 17_debug_join(default profile) resolves to target/release binariescargo test --workspace --all-features --no-run(the CI build), thenmake plan-snapshots: 3/3 PASSParsed .github/workflows/ci.yml with PyYAML: the 'Run query-plan snapshots' step runs right aftermake unit-testin thetestjob, and the path filter includes scripts/run_snapshot_tests.sh✅ No issues found.
make plan-snapshots: specs 33_meta/17, 18 and 26 run against the real server and all passmake plan-snapshotsfailscargo test --workspace --all-features, thenmake plan-snapshots --skip-buildreuses them and passescargo test --no-runcargo build --bin inputlayer-client --bin inputlayer-server(dev profile)make plan-snapshotsagainst current snapshots: 3/3 passed, exit 0Edited26_debug_complex.iql.out(Join→JOINX) in place, thenmake plan-snapshots: 26 failed and the diff was shown, make exited 2; file restored afterwards./scripts/run_snapshot_tests.sh --skip-build --profile dev -j 1 -f '33_meta/99_nope\.iql$': exit 1, 'No tests match filter'./scripts/run_snapshot_tests.sh --skip-build --profile dev -j 4 -f '33_meta/.*debug.*\.iql$': all 7 debug specs passedSimulated CI order: deleted the debug binaries, rancargo test --workspace --all-features --no-run(the build step ofmake unit-test), thenmake plan-snapshots: 3/3 passedParsed.github/workflows/ci.ymlwith PyYAML: the plan-snapshots step follows unit-test in thetestjob, andscripts/run_snapshot_tests.shis in the rust path filter✅ **Document** - passed
✅ No issues found.
✅ No issues found.
✅ No issues found.
✅ **Lint** - passed
✅ No issues found.
✅ No issues found.
✅ No issues found.
✅ **Push** - passed
✅ No issues found.
✅ No issues found.
✅ No issues found.