Compare whole-build fixtures against chant (#62) - #65
Merged
Merged
Conversation
chant grew a public whole-build entry (chant#2408, merged as chant PR #2410), so the taint fixpoint is answerable by two implementations instead of one. `foldProject` on the adapter may now be async: chant resolves modules from a filesystem, so the chant adapter writes a fixture's sources to a temp directory and hands over the paths. `runFixtures`, `runProjectFixture` and `compareAdapters` follow. The comparison asserts more than the verdict. A seed and a taint casualty are both "run", so where both implementations report the tentative verdict and the file whose taint reached each tainted one, those are compared too. That is where J3 actually lives; comparing only the final verdict would pass an implementation that got both edges wrong in compensating ways. Run against the local chant checkout ahead of a release: eight whole-build fixtures, nineteen file verdicts, zero disagreements, including both tentative verdicts and the taint source and edge kind for all four taint casualties. chant independently classifies the capturing sibling as reached by a capture edge rather than an import, which is the distinction chant#2406 existed for. A host-dependent fixture is still skipped for chant: its entity classes come from a package chant cannot resolve, and its entry takes an intrinsic registry rather than a whole host. The test asserts that a skip has a host to explain it, so a silently skipped fixture fails instead of passing. The pinned chant is 0.69.1 and predates the entry, so CI still skips every whole-build fixture and the test asserts that too, explicitly, rather than tolerating it. #62 stays open until the pin moves. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RfnRhfdYHLFAZJKHwZhBYc
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.
Part of #62, which stays open until the chant pin moves.
chant grew a public whole-build entry — chant#2408, merged as chant PR #2410 — so the taint fixpoint is answerable by two implementations rather than one.
What landed
foldProjecton the adapter may be async. chant resolves modules from a filesystem, so the chant adapter writes a fixture's sources to a temp directory and hands over the paths;runFixtures,runProjectFixtureandcompareAdaptersfollow.run, so where both implementations report the tentative verdict and the file whose taint reached each tainted one, those are compared too. Comparing only the final verdict would pass an implementation that got both edges wrong in compensating ways.The result, run against the local chant checkout
Eight whole-build fixtures, nineteen file verdicts, zero disagreements — including both tentative verdicts, and the taint source and edge kind for all four taint casualties:
F-Succ/forward-into-importsconfig.tsapp.ts, importerF-Succ/backward-along-capturesshared.tsbreaker.ts, importerF-Succ/backward-along-capturessibling.tsshared.ts, captureF-Val-Live/plain-data-is-not-livesource.tsbreaker.ts, importerchant independently classifies the capturing sibling as reached by a capture edge rather than an import, which is the distinction chant#2406 existed for. And
F-Val-Live/plain-data-is-not-liveagrees: chant also declines to taint a file whose only tie to another is a call returning computed plain data, which is F-Identity's entity test (#59) holding in an implementation that has never read it.Why #62 stays open
The pinned chant is 0.69.1 and predates the entry, so CI skips every whole-build fixture. The test asserts that explicitly rather than tolerating it, and the numbers above came from a local checkout, not from CI.
paper/measurements.mdis deliberately unchanged: it will claim two implementations agree on J3 when CI checks it, and not before.🤖 Generated with Claude Code
https://claude.ai/code/session_01RfnRhfdYHLFAZJKHwZhBYc