Skip to Content

Rule

Ephemeral stores materialized rule snapshots under Ephemeral.rules. Register rules in two ways:

  • Rule.AddRuleById — template key under Persistent.configuration.rules, optional parameterOverrides.
  • Rule.AddRule — full rule object in parameters.definition (e.g. embedded in a boon JSON file); no template lookup.

Both deep-copy, attach a GnosisRule on IGnosisEventBus, and append { instanceId, definition } to Ephemeral.rules.

Code path: Runtime/GnosisEngine/Source/Services/Persistent/Services/Rules/GnosisRuleService.cs.

State

KeyBranchPurpose
rulesEphemeralList of objects { instanceId, definition } — full materialized rule JSON (save/load and reapply)

On init: ensures rules is a list, clears bus rules, reapplies each entry’s definition. On run end: clears bus rules.

How it looks in ephemeral.json

ephemeral.json
{ "Ephemeral": { "rules": [] } }

Each persisted entry has instanceId and definition (merged rule object, including resolved executionOrder when assigned).

Events

The engine emits FACT_RULE_APPLIED when a rule’s conditions pass and outcomes run (not during dry run). Payload: ruleId, triggerEventId, category. See GnosisRuleEvents in Runtime/GnosisEngine/Source/Services/Persistent/Services/Rules/GnosisRuleEvents.cs.

Functions

FunctionParametersBehavior
AddRuledefinition (object), optional parameterOverrides, optional instanceId (else definition.id required), optional executionOrderInline rule; same persist path as AddRuleById
AddRuleByIdruleId, optional parameterOverrides, optional instanceId, optional executionOrderMaterialize from configuration.rules
RemoveRuleByIdruleIdDetach by materialized definition.id
ReapplyActiveRulesFromEphemeralClears bus, reapplies each stored definition

Statistics

None in this service (rules may call Statistic via outcomes).

Usage examples

Template (shared / boss / core):

invocation-by-id.json
{ "service": "Rule", "function": "AddRuleById", "parameters": { "ruleId": "your_template_key", "parameterOverrides": {} } }

Inline (boon-local):

invocation-inline.json
{ "service": "Rule", "function": "AddRule", "parameters": { "definition": { "id": "my_boon_rule_instance", "category": "INTERCEPTOR", "trigger": "REQUEST_OBJECTIVE_CONTRIBUTION_FROM_LINE_CLEAR", "conditions": [], "outcomes": [], "parameters": {} } } }

Use a unique id (or top-level instanceId) per equipped boon so RemoveRuleById and boon deactivate stay deterministic. Omit executionOrder in parameters and definition to use auto ordering (max(existing)+10 per trigger); the stored definition then includes the resolved value.

Events & rules, Invocations.

Last updated on