fix: make ChronoTerm singleton lazy to avoid import-time crash#17
Closed
michaelxer wants to merge 2 commits into
Closed
fix: make ChronoTerm singleton lazy to avoid import-time crash#17michaelxer wants to merge 2 commits into
michaelxer wants to merge 2 commits into
Conversation
Fixes TruFoundation#9 The module-level at the bottom of shell.py runs at import time: it calls StateStore().load(), creates a Stopwatch, creates an AlarmManager, and immediately calls start_scheduler() which spawns a background daemon thread. This means: - Just importing the module in a test spins up a real background thread - If the state file is corrupted or the directory isn't writable, the entire import fails - It's impossible to mock the ChronoTerm initializer in tests Replace with a lazy singleton pattern: creates the instance on first access, not at import time. Co-authored-by: Codex <codex@openai.com>
Collaborator
|
Thanks for the PR. A few blockers before we can merge:
Let me know if you have questions! |
Author
|
Closing this for now because I don't have time to finish the review follow-up properly. Sorry for the churn, and thank you for the detailed review. |
Collaborator
|
@michaelxer don't bail on this. the logic was solid, you just missed the lock. That’s a 5 min fix, not a reason to nuke the PR. |
The lazy singleton refactor removed the module-level 'chrono' name, but chronoterm/__init__.py still imports it. Add a __getattr__ hook so 'from trushell.chronoterm.shell import chrono' works via lazy instantiation. All 40 tests pass locally.
Collaborator
|
Fix this:
|
Author
|
Closing this for now because I don't have time to finish the thread-safety and test changes properly. Sorry for the churn, and thank you for the detailed review. |
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.
Summary
Fixes #9
The module-level
chrono = ChronoTerm()at the bottom ofshell.pyruns at import time, causing several problems:Changes
trushell/chronoterm/shell.py — Replace module-level singleton with lazy initialization:
All function bodies now call
_get_chrono()instead of using the module-levelchronovariable.Impact
_chronobefore calling functionsTest plan
pytest tests/and verify all tests pass