Files
core/package.json
T
John Dvorak 4da3158c63
CI / publish (push) Has been skipped
CI / test (push) Successful in 5m43s
CI / benchmark (push) Successful in 35s
feat: ChainRule condition steps — rule-based final hops for chains
A chain step of the form { rule: <config>, conditionStep: true } is a
condition-gated hop instead of an edge traversal. It is valid only as the
FINAL step: the object is known, so the engine verifies the referenced rule
at (intermediate, object) for each current path. Enables a chain's object-side
hop to reference a defeasible/logical evidence (e.g.
member_of(user,*g){ gated(g,doc) } where gated is WHEN/UNLESS).

- RuleEvaluator wires the ChainRule with itself so condition steps can
  evaluate sub-rules recursively.
- ChainRule constructor accepts the ruleEvaluator; the traversal loop handles
  a final condition step (min-combined possibility, reliability product,
  threshold respect). Non-final condition steps return condition_step_not_final.
- The rule config is part of the chain cache key (JSON.stringify of steps).

Tests: chain-condition-step (grant/deny/missing-edge/non-final/parallel-max).
2026-08-03 12:00:16 -07:00

73 lines
3.7 KiB
JSON

{
"name": "@arbiter/core",
"version": "1.0.3",
"description": "Arbiter core engine: graph indices, relation/reachability, authorization rule evaluator, DSL/AST, condensed & sharded snapshots, and evidence fusion.",
"license": "ISC",
"author": "",
"type": "module",
"main": "src/index.js",
"exports": {
".": "./src/index.js",
"./package.json": "./package.json"
},
"files": [
"src/"
],
"scripts": {
"test": "node --test --test-force-exit \"tests/**/*.test.js\" \"tests/integration/*.js\"",
"test:all": "npm test",
"test:rules": "node --test --test-force-exit \"tests/rules/**/*.test.js\"",
"test:engine": "node --test --test-force-exit \"tests/engine/**/*.test.js\"",
"test:rigor": "node --test --test-force-exit \"tests/rigor/**/*.test.js\"",
"test:rigor:authz": "node --test --test-force-exit tests/rigor/authorization-graph.test.js tests/rigor/authorization-config-consistency.test.js",
"test:rigor:zanzibar": "node --test --test-force-exit tests/rigor/zanzibar-semantics.test.js tests/rigor/zanzibar-consistency.test.js tests/rigor/zanzibar-defeasible-dsl-comparator.test.js",
"test:rigor:model": "node --test --test-force-exit tests/rigor/model-based-graph.test.js tests/rigor/dsl-mutation-parity.test.js",
"test:rigor:snapshot": "node --test --test-force-exit tests/rigor/snapshot-parity.test.js",
"test:rigor:explain": "node --test --test-force-exit tests/rigor/check-explain-agreement.test.js",
"test:rigor:cache": "node --test --test-force-exit tests/rigor/cache-parity.test.js",
"test:rigor:batch": "node --test --test-force-exit tests/rigor/batch-loading-parity.test.js",
"test:rigor:overlay": "node --test --test-force-exit tests/rigor/overlay-precedence.test.js",
"test:core": "node --test --test-force-exit \"tests/core/**/*.test.js\"",
"test:ast": "node --test --test-force-exit \"tests/ast/**/*.test.js\"",
"test:property": "node --test --test-force-exit \"tests/property-based/**/*.test.js\"",
"test:integration": "node --test --test-force-exit \"tests/integration/*.js\"",
"test:perf": "RUN_PERF_TESTS=1 node --test --test-force-exit tests/engine/core-performance-targets.test.js",
"benchmark": "node --expose-gc scripts/benchmark.js",
"benchmark:core": "node benchmarks/core-performance-benchmark.js",
"benchmark:batch": "node benchmarks/batch-size-analysis.js",
"benchmark:chain": "node benchmarks/chain-rule-benchmark.js",
"benchmark:reachability": "node benchmarks/reachability-optimization-benchmark.js",
"benchmark:comparator": "node benchmarks/relational-comparator-benchmark.js",
"benchmark:business": "node benchmarks/business-operations-benchmark.js",
"benchmark:inference": "node benchmarks/benchmark-interval-inference.js",
"benchmark:b2c": "node benchmarks/b2c-auth-bench.js",
"benchmark:authz": "node benchmarks/b2c-auth-bench.js",
"benchmark:snapshot": "node benchmarks/arbiter-snapshot-boot-bench.js",
"benchmark:sharded": "node benchmarks/sharded-snapshot-build.js",
"benchmark:memory": "node benchmarks/memory-breakdown.js",
"benchmark:multi-hop": "node benchmarks/multi-hop-rule-bench.js",
"benchmark:save": "node --expose-gc scripts/benchmark.js --save",
"benchmark:complex": "node --expose-gc benchmarks/complex-query-bench.js",
"benchmark:complex-query": "node --expose-gc benchmarks/complex-query-bench.js"
},
"keywords": [
"zanzibar",
"authorization",
"graph",
"rebac",
"rule-engine",
"dsl"
],
"dependencies": {
"@tenere/pltc-core": "^0.6.3",
"heapify": "^1.0.2",
"uuidv7": "^1.0.2"
},
"devDependencies": {
"@rigor/core": "*",
"@tenere/benchmark-lib": "^2.0.1",
"fast-check": "^4.5.3",
"@arbiter/evidence-dsl": "^1.0.0"
}
}