@criterionx/core
v0.3.5
Published
Universal decision engine for business-critical decisions
Downloads
925
Maintainers
Readme
@criterionx/core
Universal decision engine for business-critical decisions.
Installation
npm install @criterionx/core zodQuick Start
import { Engine, defineDecision } from "@criterionx/core";
import { z } from "zod";
const riskDecision = defineDecision({
id: "transaction-risk",
version: "1.0.0",
inputSchema: z.object({ amount: z.number() }),
outputSchema: z.object({ risk: z.enum(["HIGH", "LOW"]) }),
profileSchema: z.object({ threshold: z.number() }),
rules: [
{
id: "high-risk",
when: (input, profile) => input.amount > profile.threshold,
emit: () => ({ risk: "HIGH" }),
explain: (input, profile) =>
`Amount ${input.amount} exceeds threshold ${profile.threshold}`,
},
{
id: "low-risk",
when: () => true,
emit: () => ({ risk: "LOW" }),
explain: () => "Amount within acceptable range",
},
],
});
const engine = new Engine();
const result = engine.run(
riskDecision,
{ amount: 15000 },
{ profile: { threshold: 10000 } }
);
console.log(result.data); // { risk: "HIGH" }Architectural Invariants
This package is HTTP-agnostic. It must never depend on server concerns.
Non-Negotiable Principles
Pure and Deterministic
- Same input + same profile = same output, always
- No hidden state, no side effects
No I/O in Rules
- Rules cannot fetch data
- Rules cannot make network calls
- Rules cannot read from filesystem
- All data must be passed in as context
Explicit Dependencies
- No auto-discovery
- No magic imports
- Decisions are explicitly passed to consumers
Validation at Boundaries
- Input validated via Zod schema
- Output validated via Zod schema
- Profile validated via Zod schema
Explainability
- Every rule has an
explainfunction - Every result includes full audit trace
- Every rule has an
What This Package Does NOT Do
- HTTP/REST handling (use
@criterionx/server) - Database operations
- File system access
- Network requests
- Caching
- Authentication/Authorization
This is intentional. The core is a knife, not a Swiss Army knife.
Documentation
Full documentation: https://tomymaritano.github.io/criterionx/
License
MIT
