Title: oracle-gaps: a mutant's outcome can depend on its batch (setup-error in a full run, killed with --only) · Issue #53 · TanStack/oracles · GitHub
Open Graph Title: oracle-gaps: a mutant's outcome can depend on its batch (setup-error in a full run, killed with --only) · Issue #53 · TanStack/oracles
X Title: oracle-gaps: a mutant's outcome can depend on its batch (setup-error in a full run, killed with --only) · Issue #53 · TanStack/oracles
Description: Summary In one onboarding run (klona, r20), two mutants were reported as setup-error in a full gap check, but a replay with --only killed both of them. A mutant's outcome must not depend on what else is in its batch: --only must give the...
Open Graph Description: Summary In one onboarding run (klona, r20), two mutants were reported as setup-error in a full gap check, but a replay with --only killed both of them. A mutant's outcome must not depend on what el...
X Description: Summary In one onboarding run (klona, r20), two mutants were reported as setup-error in a full gap check, but a replay with --only killed both of them. A mutant's outcome must not depend on wha...
Opengraph URL: https://github.com/TanStack/oracles/issues/53
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"oracle-gaps: a mutant's outcome can depend on its batch (setup-error in a full run, killed with --only)","articleBody":"## Summary\n\nIn one onboarding run (klona, r20), two mutants were reported as `setup-error` in a full gap check, but a replay with `--only` killed both of them. A mutant's outcome must not depend on what else is in its batch: `--only` must give the result that the full run gives.\n\n## Evidence (unverified, from the r20 session)\n\n- Repository: `/tmp/oracle-validation/r20/codex-klona/repo`. The notes are in `oracles-feedback.md`, beside the run log.\n- Full run report `2026-11-12T23-35-42-301Z-3e2c4991`: JSON mutants M21 and M22 were `setup-error`, with `Spread syntax requires ...iterable[Symbol.iterator] to be a function`. Production was unchanged and every baseline test passed.\n- An isolated replay right afterwards, `--only json.js:M21,json.js:M22` (report `2026-11-12T23-37-41-738Z-d866fd67`), killed both under the law `array slots`.\n- A full replay with the fork pool reproduced the setup errors (report `2026-11-12T23-38-22-238Z-fd6a91f0`), so worker isolation did not change the result.\n- In two later complete runs, the discrepancy did not recur.\n\n## Hypothesis (not confirmed)\n\nThe cause is global state carried from one copy to the next. Each copy resets its module registry and deletes the global names that the worker did not have at first (`capture-setup.mjs`). It does not undo changes to existing builtins, such as a property written on `Array.prototype` or `Object.prototype`. Klona's pollution-safety laws show that its mutants can write there. A polluting mutant that runs earlier in the same worker would then break a later copy's module load or setup (`...iterable[Symbol.iterator]`), which is reported as a `setup-error` that `--only` does not reproduce.\n\nThis is a different mechanism from the copy-path seed defect fixed in the follow-up PR for #48 (each copy seeded `Math.random` by its copy path). That defect affected every copy, so `--only` would show it too.\n\n## What a fix needs\n\n- A witness in which a mutant's outcome changes with batch composition. It needs two mutants in one worker, in a known order, with the first writing to a builtin prototype. The runner's scheduling does not fix that order today, so a deterministic witness may need a way to pin a batch.\n- Then, possibly: snapshot and restore builtin prototypes between copies, or run each copy that writes to them in a fresh worker.\n","author":{"url":"https://github.com/KyleAMathews","@type":"Person","name":"KyleAMathews"},"datePublished":"2026-11-13T01:23:39Z","url":"https://github.com/TanStack/oracles/issues/53"}
| react-profiling | 0 |
| react-import-map | react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf |
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:bc8fad51-fcd6-3fc6-2866-afecb6d0d8e2 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DB52:A7676:1A416E6:2402D49:6AF9B09D |
| html-safe-nonce | cab08e0f694b101abd6b9e02a20eb45ee81cffb2c86e65d079be99fc5942a3dd |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQjUyOkE3Njc2OjFBNDE2RTY6MjQwMkQ0OTo2QUY5QjA5RCIsInZpc2l0b3JfaWQiOiIxNzkyNjkzMDk2MDEwMDY4MTI1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 0cd07cb6cc2d26eeeb5606dd6fc91cd2e3293602cdf8eafe17053692b0a84fa8 |
| hovercard-subject-tag | issue:6362647490 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/TanStack/oracles/53/issue_layout |
| twitter:image | https://opengraph.githubassets.com/a18ce9a07518a44ae65822bc4043be8cb3a70f1bd8bf106646721bc13bcf3fa3/TanStack/oracles/issues/53 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/a18ce9a07518a44ae65822bc4043be8cb3a70f1bd8bf106646721bc13bcf3fa3/TanStack/oracles/issues/53 |
| og:image:alt | Summary In one onboarding run (klona, r20), two mutants were reported as setup-error in a full gap check, but a replay with --only killed both of them. A mutant's outcome must not depend on what el... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | KyleAMathews |
| hostname | github.com |
| expected-hostname | github.com |
| None | 612d3e6ffd693e7ea8d9fcf452370995872baef31d825b1fedef704cd3d24ac7 |
| turbo-cache-control | no-preview |
| go-import | github.com/TanStack/oracles git https://github.com/TanStack/oracles.git |
| octolytics-dimension-user_id | 72518640 |
| octolytics-dimension-user_login | TanStack |
| octolytics-dimension-repository_id | 1443546044 |
| octolytics-dimension-repository_nwo | TanStack/oracles |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1443546044 |
| octolytics-dimension-repository_network_root_nwo | TanStack/oracles |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 072e34035c13c31543fba9f025cbbbda4210dae4 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
| react-app-name | issues |
Links:
Viewport: width=device-width