Publish Effection policy rules through `@effectionx/lint`
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 38/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- typescript
- Domain
- build-system, testing, tooling
Research direction
Start with dependency #255 and the repository's Oxlint host, then inspect the workspace package structure and public plugin entrypoint. Read the Async Teardown and Scope-Bound Event Registration policies before reviewing the rule fixtures and root Oxlint configuration. Done means both rules are exported, their positive, negative, and edge-case fixtures pass, root integration works, and pnpm lint, check, build, and test succeed.
Written by the indexing model from the issue text.
Description
Parent Quest: #254
Story
As an effectionx policy author, I want mechanically enforceable Effection policies published as Oxlint rules, so contributors receive precise failures before an AI review and other projects can apply the same checks.
An effectionx project enables the plugin and selects a rule by its stable identifier, such as:
{
"jsPlugins": ["@effectionx/lint"],
"rules": {
"effectionx/no-yield-in-finally": "error"
}
}
Current gap
The Async Teardown and Scope-Bound Event Registration policies describe patterns that static analysis can detect, but effectionx has no published lint package. Prototype rules outside this repository are not owned, versioned, or verified with the policies they enforce.
Contract
Publish an @effectionx/lint package that exposes an Oxlint JavaScript plugin with stable rule identifiers and diagnostics.
The first rule set is limited to policies already owned by effectionx:
effectionx/no-yield-in-finallyenforces the Async Teardown policy.effectionx/require-scope-bound-event-registrationenforces the Scope-Bound Event Registration policy.
Each rule:
- identifies the policy it enforces;
- reports the smallest useful source span with a stable message;
- distinguishes violations from documented compliant and intentional patterns;
- has positive, negative, and edge-case fixtures;
- uses only APIs supported by the pinned Oxlint JavaScript-plugin implementation; and
- is exported through the package’s public plugin entrypoint.
The root repository consumes the workspace package through its Oxlint configuration. The published package follows the repository’s standard package structure and metadata policies.
Oxlint’s supported scope analysis may be used. A policy that requires unavailable type information remains AI-validated until the plugin API can enforce it reliably; it must not be approximated with a knowingly weaker rule.
Acceptance
- Consumers can install
@effectionx/lint, load it as an Oxlint JavaScript plugin, and enable either initial rule by its documented identifier. - Each rule reports every known violating fixture and accepts its corresponding compliant fixture.
no-yield-in-finallydistinguishes asynchronousyield*teardown from synchronous cleanup that may remain infinally.require-scope-bound-event-registrationdistinguishes scope-owned registration and teardown from listeners whose lifetime depends only on an event firing.- The effectionx root lint command runs the published workspace plugin and fails on a deliberate violation.
- Diagnostics and exit status are stable across repeated runs with unchanged inputs and pinned tools.
- Package build, typecheck, tests, lint, formatting, and publication checks pass.
Evidence
Rule fixtures provide at least one mutation control per rule: removing the prohibited construct makes the diagnostic disappear without disabling the rule. Root integration demonstrates that the package is resolved through the same configuration consumers use.
Verification includes:
pnpm lint
pnpm check
pnpm build
pnpm test
Dependencies
- Depends on #255 for the repository’s Oxlint host.
- Blocks executable lint-backed policy entrypoints in #254.
Out of scope
- Deno lint compatibility
- Policies not already documented in effectionx
- Type-aware custom rules unsupported by Oxlint’s JavaScript-plugin API
- XMD orchestration and historical pull-request replay
- Dominant language
- TypeScript
- Stars
- 12
- Forks
- 4
- Avg merge
- 8h 32m
- Merged PRs (30d)
- 1
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- No contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from thefrontside/effectionx
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
thefrontside/effectionx#181 ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
thefrontside/effectionx#259 ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 52/100
thefrontside/effectionx#258 ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 45/100
thefrontside/effectionx#257 ·
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 52/100
thefrontside/effectionx#255 ·
All issues in thefrontside/effectionx
Similar issues
-
Add: VIVE TVOpenapproved check:passed streams:add
Difficulty 1/5 Under an hour Newbie friendliness 72/100
iptv-org/iptv#55293 · 1 comment ·
Maintainers usually reply within 1 day
-
bug needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Fission-AI/OpenSpec#2084 ·
Maintainers usually reply within 2 days
-
Contrib indemnité de départ à la retraite : faire le pont avec le simulateur sur la page génériqueOpenP1
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
SocialGouv/code-du-travail-numerique#7561 ·
Maintainers usually reply within 1 day
-
beginner bug
Difficulty 1/5 Under an hour Newbie friendliness 88/100
hiero-ledger/hiero-sdk-js#4517 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
kubernetes-sigs/headlamp#7950 ·
Maintainers usually reply within 3 days