feat(core): step 5 — rules registry, 8 rules, scoring
4 months ago
Authored
grim- defineRule primitive + async evaluateRule producing RuleResult envelopes
(skipped-not-thrown for bad config/evidence), typed registry keyed id@version
- rules @1: account-age, min-merged-prs, pr-rate-limit (interval CoV evidence),
max-files-changed, english-only, crypto-address, honeypot, profile-readme
- scoring: abstract signal taxonomy (4 categories, missing categories degrade),
0-100 composition; fast-check properties: range, red-flags-never-raise,
determinism
- per-rule unit tests over fixture contexts (normalized captured events);
contracts: RuleResult envelope
Parentdda5e16
33 files changed
- DECISIONS.md+34−0
- VERIFICATION-QUEUE.md+10−0
- all-summaries.md+43−0
- bun.lock+8−0
- packages/contracts/src/rules.ts+20−0
- packages/core/fixtures/change-request.opened.event.json+27−0
- packages/core/fixtures/comment.created.event.json+24−0
- packages/core/package.json+5−1
packages/core/src/context.ts+49−0packages/core/src/index.ts+23−10packages/core/src/rules/account-age.test.ts+55−0packages/core/src/rules/account-age.ts+35−0packages/core/src/rules/crypto-address.test.ts+56−0packages/core/src/rules/crypto-address.ts+59−0packages/core/src/rules/define.ts+100−0packages/core/src/rules/english-only.test.ts+47−0packages/core/src/rules/english-only.ts+63−0packages/core/src/rules/honeypot.test.ts+56−0packages/core/src/rules/honeypot.ts——packages/core/src/rules/max-files-changed.test.ts+33−0packages/core/src/rules/max-files-changed.ts+28−0packages/core/src/rules/min-merged-prs.test.ts+32−0packages/core/src/rules/min-merged-prs.ts+28−0packages/core/src/rules/pr-rate-limit.test.ts+74−0packages/core/src/rules/pr-rate-limit.ts+65−0packages/core/src/rules/profile-readme.test.ts+44−0packages/core/src/rules/profile-readme.ts+35−0packages/core/src/rules/registry.test.ts+39−0packages/core/src/rules/registry.ts+42−0packages/core/src/rules/test-context.ts+67−0packages/core/src/scoring/score.test.ts+65−0packages/core/src/scoring/score.ts+49−0packages/core/src/scoring/signals.ts+33−0