Skip to content

Fix red CI on main, a stale standing context, and three Neural Engine helper bugs - #58

Merged
huyedits merged 4 commits into
mainfrom
claude/dazzling-meitner-pqr7r3
Sep 27, 2026
Merged

huyedits merged 4 commits into
mainfrom
claude/dazzling-meitner-pqr7r3

Conversation

@huyedits

@huyedits huyedits commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Why CI on main is red

83e6534 (side models on the ANE) rewrote tests/conftest.py from a copy older than the one on main. That removed the hook that reports MLX-only tests as skips off a Mac. On Linux CI that became 126 failures + 9 errors, all Symbio's inference engine is not installed. On a Mac the hook does nothing, so nothing showed up locally.

  • The hook is restored next to the new no_neural_engine_helper fixture.
  • tests/test_conftest_hooks.py now 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 every STANDING_REFRESH_TURNS turns. The turn count came from the number of user messages in self.history. But _trim_history pops 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 raised OSError out of _start() into see_screen and routing. It now returns ok: False.
  • A 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

  • Every fix has a test that fails without it and passes with it. The standing-context test stubs the sampler and mlx.nn, so it runs off a Mac too.
  • Full suite in a fresh virtualenv on Linux: 2477 passed, 250 skipped, 0 failed.

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
@huyedits
huyedits merged commit 78395da into main Sep 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants