thefrontside / thefrontside/effectionx
Publish Effection policy rules through `@effectionx/lint`
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 12
- Forks
- 4
- Avg merge
- 3h 17m
- Merged PRs (30d)
- 1
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
Contributor guide
No contributing guide indexed for this repository
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.
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.
Assessment
- Tech stack
- typescript
- Domain
- build-system, testing, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100