Repository navigation
Conversation
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.
This proposal adds two optional Engineering ESLint rules for reviewing effect boundaries. A helper that reads files, sends a request, or mutates its input can otherwise look like a pure transformation. Both rules remain disabled by default in the shared configuration.
jdeurt/name-effectschecks a configurable whole-word effect vocabulary after finding explicit I/O or input/module/instance writes.jdeurt/separate-effectsidentifies narrow computation-name contracts and returned arithmetic candidates alongside those effects.The detector intentionally misses arbitrary calls, aliases, mutator methods, captured function-local state, anonymous/object callbacks, and transitive effects. Async and closure creation alone do not establish effects. Lifecycle names allow orchestration without listing every secondary effect.
The source starts from freshly fetched main at
d563ff4e6c514984df8349b23dd5a6b1e21bdff2. The modules are included in both generated client packages. Existing strict lint/TypeScript rules and default rule activation are unchanged. Generated files remain ignored. No new dependency or permanent regression test was added; one existing test fixture now copies the additional packaging input.Empirical evaluation
All tracked JS/TS files were scanned with identical defaults in temporary read-only comparisons. No comparison repository sources, branches, hooks, settings, or dependencies were changed.
jdeurt/agentsjdeurt/codex-pocketjdeurt/opencodexAll complete scans had zero parse/configuration errors. Final findings are all naming findings; the real-source trial produced zero separation findings. Temporary positive fixtures validate that signal, but this trial does not demonstrate its usefulness on real mixed functions.
Source review drove generic changes for fixed callback contracts, local cursor mutation, lifecycle names, computation-prefix ambiguity, and omitted standard operation words. In a systematic 24-item OpenCodex production sample, five clear vocabulary false positives were removed. Four useful naming reviews and fifteen ambiguous findings remained. This is not a measured low false-positive rate, and it does not justify automatic rollout.
See the policy and limitations and revision-pinned evaluation report for examples, review classifications, configuration, misses, and reproduction instructions. The report does not reproduce private source code.
Validation
Proposal for review only. Do not merge automatically or enable across consumers without a separately reviewed scoped trial.