Fix red CI on main, a stale standing context, and three Neural Engine helper bugs - #58
Merged
Merged
Conversation
83e6534 rewrote tests/conftest.py from a copy older than 30d4dcf, which removed the hook that reports engine-only tests as skips off a Mac. CI on main went from green to 126 failures + 9 errors, all "Symbio's inference engine is not installed". On a Mac the hook is inert, so nothing showed locally. test_conftest_hooks.py now fails on any host if it goes again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017vhZ7i2tU8r4RQ1VBfqfcg
The standing context (curated memory, env note) is snapshotted and meant to be re-read every STANDING_REFRESH_TURNS turns. Turns were counted as user messages in self.history, but _trim_history pops from the front once the history is at its cap, so the count stops rising and a long session never saw a memory or soul change again. Count turns run instead. The new test stubs the sampler and mlx.nn, so it runs off a Mac too; it fails on the old code (the prompt still carries the first read). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017vhZ7i2tU8r4RQ1VBfqfcg
…per turn - ane.request() promises never to raise, but a helper binary that failed to exec raised OSError out of _start() into see_screen and routing. It now reads as unavailable. - A decide() that timed out killed the helper without recording a back-off, so every turn paid the 3 s wait, a restart and the next OCR's 7 s cold load. A timeout now backs off like "unavailable" does. - decider.decide() re-ran a vote that had already failed once Apple's model also failed, doubling the wait when the helper is down. Each has a test that fails without its fix. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017vhZ7i2tU8r4RQ1VBfqfcg
.gitignore covered symbio/app/worker_models.json, but constants.py puts the roster at the workspace root unless that legacy file already exists. Running from a clone left the user's saved skills one `git add .` away from being committed: the leak worker_defaults.py was written to stop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017vhZ7i2tU8r4RQ1VBfqfcg
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.
Why CI on main is red
83e6534(side models on the ANE) rewrotetests/conftest.pyfrom a copy older than the one onmain. That removed the hook that reports MLX-only tests as skips off a Mac. On Linux CI that became 126 failures + 9 errors, allSymbio's inference engine is not installed. On a Mac the hook does nothing, so nothing showed up locally.no_neural_engine_helperfixture.tests/test_conftest_hooks.pynow fails on any host if it disappears again.Bugs found reviewing today's merges
Standing context never refreshed in long sessions (
symbio/app/chat_turn.py). Curated memory and the env note are snapshotted and meant to be re-read everySTANDING_REFRESH_TURNSturns. The turn count came from the number of user messages inself.history. But_trim_historypops from the front once the history is at its cap, so that count stops rising, and a long session never saw a memory or soul change again. Turns are now counted directly.Neural Engine helper (
symbio/app/ane.py,symbio/app/decider.py):ane.request()says it never raises, but a helper binary that failed to exec raisedOSErrorout of_start()intosee_screenand routing. It now returnsok: False.decide()that timed out killed the helper without recording a back-off. Every turn then paid the 3 s wait, a helper restart, and the next OCR's ~7 s cold load. A timeout now backs off the same way "unavailable" does.decider.decide()re-ran a vote that had already failed after Apple's model also failed, doubling the wait when the helper is down.Testing
mlx.nn, so it runs off a Mac too.