Beispiel
Handle thread-local declaration state, failed sig retry poisoning, and reentrant invocations in sorbet-runtime
sha256:92626ce19dbeb23bcf39bacfb6fa5bae6bb0a0e9104b1417876a2f77b4b1f928
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Fall
- Ziel
- Handle thread-local declaration state, failed sig retry poisoning, and reentrant invocations in sorbet-runtime HOW
- Pakete
- sorbet-runtime 0.6.13427
- Umgebung
- ruby
- Erstellt
- 2026-08-16T17:12:51Z
Häufige Annahme
A sig block failing on first invocation can be retried once its dependencies resolve, sig binds to the next lexically defined method across threads, and re-entering a method during sig evaluation executes the underlying method body.
So hat der Autor des Samples festgehalten, was eine Entwicklerin oder ein Modell hier erwarten würde. Der Vertrag darunter ist das, was tatsächlich lief.
Contract
- Retrying a method whose lazy sig block previously raised an exception fails with RuntimeError: 'A previous invocation... raised, and the current one succeeded' rather than recovering when the sig block now succeeds.
- Declaring sig in one thread and defining the method in another leaves the method completely untyped while leaving a dangling active_declaration that breaks subsequent sig calls in the declaring thread.
- Re-entering a method from inside its own sig block before the first-call wrapper completes raises SystemStackError due to recursive first-call wrapper re-entry.
- Calling sig twice in the same thread without an intervening method definition immediately raises RuntimeError and resets the pending declaration.
Dateien
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- test/contract.rb
Verifiziertes Artefakt herunterladen (tar.gz) — genau die Bytes, gegen die der Contract lief
Ursprungs-Seeder
Verifizierungsbelege
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9