React effect cleanup: six recorded examples
The downloads contain six original inputs, their expected labels and one recorded API observation per input revision. Disagreements stay visible.
Show what the effect starts and what its cleanup stops. Compare timers, listeners and subscriptions, keeping incomplete lifecycle code or unknown helper behavior marked for review.
Cleanup must correspond to the resource created by the effect. Merely returning a function is insufficient if that function removes a different listener or clears an unrelated timer.
This is a code-evidence check. It can point to a missing lifecycle path in the supplied snippet, but it cannot measure memory use, inspect an unavailable helper or establish that an entire application leaks resources.
This original code-reading exercise adapts a rule in the jev-lint repository linked by the cited X post. Snippets, labels and missing-context handling are authored for this page. It does not execute code, reproduce a repository scan or certify an application as safe.

Use the sample to understand the rule, then test your own input for react effect cleanup.

Show what the effect starts and what its cleanup stops.

Open the decision rules and keep the intended distinction between Cleanup, Gap, Notongoing, Unclear. Edit the choices only when testing your own rule.

Use a sample first, then try your own input. Compare the selected label with the other returned probabilities.

Review Unclear before using a result. The label is a decision about the supplied information, not an executed action.
| Original input | Observed label | Leading probability |
|---|---|---|
| Interval cleared | Cleanup | 100% |
| Listener left active | Gap | 100% |
| Matching listener | Cleanup | 100% |
| Title assignment | Notongoing | 100% |
| Unknown wrapper | Unclear | 93.0% |
| Wrong timer cleared | Gap | 100% |
These are six original synthetic inputs, tested once per request revision. The percentage is the leading option probability, not measured accuracy. Authored expectations and any disagreements remain in the downloadable evidence. 6 of 6 results matched the authored fixture expectations.Verified
The downloads contain six original inputs, their expected labels and one recorded API observation per input revision. Disagreements stay visible.
The single-request SDK runner uses your private TYPESAFE_API_KEY. The offline consumer reads saved observations, checks request hashes and prints a pending output. It does not call the model or change any external system.
# Offline: inspect the downloaded saved observations. No API key is needed.
python preview_choice_workflow.py samples.json saved-api-results.json
# Optional live request: install the SDK and set TYPESAFE_API_KEY privately.
npm install @typesafe-ai/sdk@0.6.0
node run-choice-sample.mjs samples.json case-1
# The live response prints to the terminal; it does not update saved-api-results.json.The input contract and these limits define what the result means.
No. The Notongoing outcome covers effects that start no persistent resource under this rule. Other correctness questions may still apply.
Yes. Supply its actual contract or implementation. The model should not infer cleanup solely from a function name.
It describes the distribution over the supplied choices for this request. These six synthetic examples are functional tests with authored expectations, not a production accuracy benchmark.
No. The demo displays a label and distribution. The downloadable consumer produces a pending preview packet. Application code and a separate authorization policy would control any real action.
Edit the example above to see how a changed fact affects the decision, or open the Playground for another task.