Repository navigation
1.0.4 fixes from real projects: npm copies, tests already red, skipped tests, submodules, rewrites, UTF-8, --keep-output - #158
Merged
Conversation
When the first 2 commits checked both fail with nothing taken out, run the tests on the newest commit; if they fail there too, say so once and stop instead of running every other check the same way. README: a short 'Bite does this, you decide that' box and a link to the Fool Bite challenge. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
Contributor
|
marked's --no-clobber fix added its only telling test with
{ skip: process.platform === 'win32' }; on Windows Bite said 'its tests didn't
notice'. Skipped test names are read from node --test, TAP, go test -v, cargo
test and pytest -rs output; one the commit added is named instead.
Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
…ady fail On Windows, output redirected to a file used cp1252: the result marks came out as '?' and a cut-off subject's ellipsis as a stray byte (marked's run.log). Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
When the commit that put the old code back also took out the fix's own test lines and added tests of its own, it fixed the bug another way (dayjs b575c81a after d0e6738a): '➖ replaced by a later fix', not 'UNDONE'. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
A program reading Bite through a pipe on Windows decodes with the system's code page; UTF-8 there broke every Windows test that read Bite's output (0x8f in the warning sign). Files, like run.log, still get UTF-8. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
tomlkit's tests read the toml-test submodule, which git archive leaves out, so every commit read 'tests already fail'. h2's Hypothesis test failed once on a cold copy and 2 commits were skipped; the tests now run once more first. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
h2 #1329: e1f7c12c showed as no test noticed, but a6ed24e later in the same pull request rewrote that code and a test notices the rewrite. Now such a gap says 'rewritten later by <commit>' instead. When the rewrite isn't noticed either, the gap stays flagged. Test: tests/test_rewritten_later.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
Hand-checking how Bite read a run (eemeli/yaml) needed a wrapper around the test command. --keep-output writes the change-in and change-out output to bite_proof/output/<commit>.txt. Test: tests/test_keep_output.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
npm copies live in node_modules/bite_tmp, inside the project's git work tree. There git apply read the patch paths from the outer repo's top, matched nothing, changed nothing and exited 0, so every 'its test is gone' on an npm project ran unchanged code (dotenv: 8 false). git apply now runs with GIT_CEILING_DIRECTORIES set above the copy. Test: tests/test_apply_in_nested_copy.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
Copies lived in node_modules/bite_tmp so Node found the packages, but jest, @babel/register and tap skip anything under node_modules, so they skipped the copy (validator.js: 0 of 40 checked though its tests pass). Each copy now sits in the system temp folder with a symlink (or, on Windows without that right, a junction) to each node_modules the project has. Removing a copy removes only the link. Test: tests/test_node_copies.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
--only filtered the --last list, so a named older commit (node-semver 0864b3ce in the hunt) got 'Nothing to check'. The named commits are now looked up directly. Test: tests/test_shard.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
The line printed while checking said NO TEST NOTICED, but the summary then skipped it as rewritten later (node-semver c570a348 on CH's PC). A line now says it's not flagged after all. Test: tests/test_rewritten_later.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
tap repeats an error in its diff dump, escaped, so the last error line was 'TypeError: LRU is not a constructor\\r' with a literal backslash-r (node-semver on CH's Windows PC). Diff markers and trailing literal \\r or \\n are now dropped. Test: tests/test_good_failure_wording.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
dayjs commits that changed only types/index.d.ts were flagged 'no test noticed'. Declaration files hold types only, so no test runs them. Test: tests/test_type_declarations.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
dotenv 7c675904 added a subtest inside t.test('POSIX signal forwarding',
{ skip: win32 }). tap prints only the parent as skipped, so Bite said its
tests didn't notice. Now a skipped test whose block the commit added lines
to counts too. Test: tests/test_skipped_own_test.py.
Assisted-by: Claude Code
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
--free-checks 0 checked no commit and ended like a clean run. It now says it needs a whole number of 1 or more. Test: tests/test_odd_inputs.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
…old wording #163 and #164 changed messages and went red because tests/selftest.py and test_odd_inputs.py still expected the old text. Same three boxes, so the checklist check is unchanged. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iGWaiVqiKe779Fd543
A heartbeat line already on its way printed after the step ended (failed Windows 3.10 CI on #158). heartbeat's exit now joins its thread. Test: tests/test_jobs_memory.py. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
…-tcs0wx # Conflicts: # recent.py
#164 (merged) refused --last 0 its own way; #158 refused --free-checks 0 another. Now both go through AT_LEAST_ONE. Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
connabyss
pushed a commit
that referenced
this pull request
Nov 4, 2026
Bite remembered each commit it checked with ✅, keyed on every test file in today's code. A pull request whose every commit adds a test changed that key on each push, so every commit was checked again from zero (#158: 17 commits, about 30 minutes, each push). Bite checks a fix on a copy of its own commit, so a later test can't undo that ✅. A ✅ now holds while the settings, test setup and dependency files are the same and no test file the commit had is deleted since. A ✅ that leaned on today's tests (a piece only a later test notices, or a test deleted since) still needs every test file unchanged. Tests: tests/test_jobs_memory.py (the two "keeps the earlier checks" tests fail without this; the weakened-later-test test guards the ✅ that leaned on today's tests). Assisted-by: Claude Code Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0175Q8iGdLGjN4japo2hhaEt
2 tasks done
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.
Requested by CH · project thread
What was wrong, what you changed, how you checked:
This PR collects the fixes for 1.0.4. Each one fixes something Bite got wrong on a real project, mostly run on CH's Windows PC. Every fix has its own commit and its own test.
…was skipped on Windows" instead of "didn't notice". This also covers a test the commit added inside a parent test that is skipped, where tap names only the parent.--keep-output. This saves each commit's test output, with the change in and with it taken out, tobite_proof/output/<commit>.txt.git applyinside a copy that sat in the project's git folder changed nothing and still said it worked. It now runs withGIT_CEILING_DIRECTORIES, so git can't see that folder.@babel/registerand tap skip anything innode_modules, so they skipped Bite's copies too. Copies now sit in the temp folder and link to each of the project'snode_modules: a symlink, or a junction on Windows. Removing a copy removes only the link.--onlyfinds older commits. It no longer looks only in the last 40.\rand the+diff marker from tap's escaped error dump are now left out..d.tsfiles count as code the tests can't run (dayjs).tests/selftest.pytoo, and asks anyone who changes a message to searchtests/for its old wording (what turned fix(recent): say "1 commit", not "1 commits" #163 and fix(recent): refuse --last 0, which can never find a commit #164 red).Reruns on CH's PC, before and after (commits where a test noticed the change): node-semver 11 → 17, dotenv 8 → 16, dayjs 0 → 9, yaml 0 → 6. All the false alarms we checked by hand are gone.
python -m pytestpasses locally: 315 passed, 1 skipped (that test only runs on Windows). CI is green.Assisted-by: Claude Code
https://claude.ai/code/session_0175Q8iFhqMpL4wyk62EegnR
Generated by Claude Code