@higher.archi/boe 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/core/evaluation/decay.d.ts +60 -0
  2. package/dist/core/evaluation/decay.d.ts.map +1 -0
  3. package/dist/core/evaluation/decay.js +111 -0
  4. package/dist/core/evaluation/decay.js.map +1 -0
  5. package/dist/core/evaluation/index.d.ts +2 -0
  6. package/dist/core/evaluation/index.d.ts.map +1 -1
  7. package/dist/core/evaluation/index.js +5 -1
  8. package/dist/core/evaluation/index.js.map +1 -1
  9. package/dist/engines/bayesian/compiler.d.ts.map +1 -1
  10. package/dist/engines/bayesian/compiler.js +14 -2
  11. package/dist/engines/bayesian/compiler.js.map +1 -1
  12. package/dist/engines/bayesian/strategy.d.ts.map +1 -1
  13. package/dist/engines/bayesian/strategy.js +41 -4
  14. package/dist/engines/bayesian/strategy.js.map +1 -1
  15. package/dist/engines/bayesian/types.d.ts +16 -0
  16. package/dist/engines/bayesian/types.d.ts.map +1 -1
  17. package/dist/engines/bayesian/types.js.map +1 -1
  18. package/dist/engines/defeasible/compiler.d.ts.map +1 -1
  19. package/dist/engines/defeasible/compiler.js +16 -2
  20. package/dist/engines/defeasible/compiler.js.map +1 -1
  21. package/dist/engines/defeasible/strategy.d.ts.map +1 -1
  22. package/dist/engines/defeasible/strategy.js +47 -2
  23. package/dist/engines/defeasible/strategy.js.map +1 -1
  24. package/dist/engines/defeasible/types.d.ts +29 -1
  25. package/dist/engines/defeasible/types.d.ts.map +1 -1
  26. package/dist/engines/defeasible/types.js.map +1 -1
  27. package/dist/engines/scoring/compiler.d.ts.map +1 -1
  28. package/dist/engines/scoring/compiler.js +17 -4
  29. package/dist/engines/scoring/compiler.js.map +1 -1
  30. package/dist/engines/scoring/strategy.d.ts.map +1 -1
  31. package/dist/engines/scoring/strategy.js +82 -2
  32. package/dist/engines/scoring/strategy.js.map +1 -1
  33. package/dist/engines/scoring/types.d.ts +17 -0
  34. package/dist/engines/scoring/types.d.ts.map +1 -1
  35. package/dist/index.d.ts +2 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +5 -1
  38. package/dist/index.js.map +1 -1
  39. package/package.json +1 -1
  40. package/src/core/evaluation/decay.ts +165 -0
  41. package/src/core/evaluation/index.ts +13 -0
  42. package/src/engines/bayesian/compiler.ts +15 -2
  43. package/src/engines/bayesian/strategy.ts +54 -4
  44. package/src/engines/bayesian/types.ts +17 -0
  45. package/src/engines/defeasible/compiler.ts +17 -2
  46. package/src/engines/defeasible/strategy.ts +62 -2
  47. package/src/engines/defeasible/types.ts +33 -0
  48. package/src/engines/scoring/compiler.ts +18 -4
  49. package/src/engines/scoring/strategy.ts +101 -3
  50. package/src/engines/scoring/types.ts +18 -0
  51. package/src/index.ts +12 -0
@@ -2,6 +2,7 @@
2
2
  * Scoring Engine Types
3
3
  */
4
4
  import { BaseRule, BaseRuleSet, CompiledBaseRule, CompiledBaseRuleSet, CompiledCondition, Condition, Expression, BindingContext } from '../../core';
5
+ import { DecayConfig, DecayInfo } from '../../core/evaluation/decay';
5
6
  /**
6
7
  * Scoring methods control how scores are normalized and combined
7
8
  *
@@ -199,6 +200,10 @@ export type ScoringAction = {
199
200
  };
200
201
  reason?: string;
201
202
  nullHandling?: NullHandling;
203
+ decay?: {
204
+ timestamp: string | Expression;
205
+ config?: Partial<DecayConfig>;
206
+ };
202
207
  };
203
208
  /**
204
209
  * Scoring rule - uses 'then' for scoring properties
@@ -228,6 +233,10 @@ export type ScoringConfig = {
228
233
  categories?: ScoringCategory[];
229
234
  overrides?: OverrideDefinition[];
230
235
  nullHandling?: NullHandling;
236
+ decay?: {
237
+ timestamp?: string | Expression;
238
+ config: DecayConfig;
239
+ };
231
240
  };
232
241
  /**
233
242
  * Compiled scoring action
@@ -242,6 +251,10 @@ export type CompiledScoringAction = {
242
251
  };
243
252
  reason?: string;
244
253
  nullHandling?: NullHandling;
254
+ decay?: {
255
+ timestamp: string | CompiledCondition;
256
+ config?: Partial<DecayConfig>;
257
+ };
245
258
  };
246
259
  /**
247
260
  * Compiled scoring rule
@@ -300,11 +313,15 @@ export type ScoringResult = {
300
313
  totalScore: number;
301
314
  confidence: number;
302
315
  contributions: Record<string, number>;
316
+ contributionPercentages: Record<string, number>;
303
317
  fired: string[];
304
318
  iterations: 1;
305
319
  tier?: ScoringTierMatch;
306
320
  categoryBreakdown?: CategoryResult[];
307
321
  override?: OverrideResult;
322
+ totalScoreBeforeDecay?: number;
323
+ contributionsBeforeDecay?: Record<string, number>;
324
+ decayInfo?: Record<string, DecayInfo>;
308
325
  executionTimeMs: number;
309
326
  };
310
327
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/engines/scoring/types.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -53,5 +53,7 @@ export type { ExpertRule, ExpertRuleSet, ExpertConfig, ExplainBlock, CompiledExp
53
53
  export { PricingStrategy, compilePricingRuleSet, compilePricingRule, pricingStrategy, pricingEngine, calculateFlat, calculateGraduated, calculateVolume, formatCurrency, formatNumber, formatPercent, round, calculateDiscount, applyMinMax, CURRENCIES, getCurrencyInfo } from './engines/pricing';
54
54
  export type { CurrencyCode, CurrencyInfo, PricingRule, PricingRuleSet, PricingConfig, PricingComponent, PricingMode, PricingInput, PricingPackage, FlatPricing, GraduatedTier, GraduatedPricing, VolumeBracket, VolumePricing, Meter, MultiMeterPricing, FormulaPricing, Adjustment, DiscountAdjustment, MinimumAdjustment, MaximumAdjustment, Metric, ScenarioDefinition, ScenarioDefinitions, AttributeSchema, ProductType, ResolvedPricingConfig, CompiledPricingRuleSet, CompiledPricingRule, CompiledPricingComponent, CompiledPricingMode, CompiledAdjustment, CompiledMetric, PricingOptions, PricingResult, ScenarioComparisonResult, ScenarioResult, ComponentResult, AdjustmentResult, TierBreakdown, MeterResult, PricingSummary, CalculatorContext, TierCalculationResult } from './engines/pricing';
55
55
  export { soundex, nysiis, caverphone2, cosineSimilarity } from './functions';
56
+ export { calculateDecayMultiplier, resolveDecayTimestamp } from './core/evaluation/decay';
57
+ export type { DecayCurve, DecayTimeUnit, DecayConfig, DecayInfo } from './core/evaluation/decay';
56
58
  export * from './qfacts';
57
59
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
30
  };
31
31
  Object.defineProperty(exports, "__esModule", { value: true });
32
32
  exports.compileUtilityRule = exports.compileUtilityRuleSet = exports.UtilityStrategy = exports.SEMANTIC_WEIGHTS = exports.constraintStrategy = exports.compileConstraintRuleSet = exports.ConstraintStrategy = exports.stateMachineStrategy = exports.compileStateMachineDefinition = exports.compileStateMachine = exports.StateMachineStrategy = exports.monteCarloStrategy = exports.compileMonteCarloRuleSet = exports.MonteCarloStrategy = exports.SEMANTIC_LIKELIHOODS = exports.parseLikelihood = exports.bayesianStrategy = exports.compileBayesianRule = exports.compileBayesianRuleSet = exports.BayesianStrategy = exports.autoAdjustCoverage = exports.analyzeCoverage = exports.compileFuzzyVariable = exports.fuzzyStrategy = exports.compileFuzzyRuleSet = exports.FuzzyStrategy = exports.sequentialStrategy = exports.compileSequentialRuleSet = exports.SequentialStrategy = exports.scoringStrategy = exports.compileScoringRuleSet = exports.ScoringStrategy = exports.backwardStrategy = exports.compileBackwardRuleSet = exports.BackwardChainingStrategy = exports.forwardStrategy = exports.compileForwardRule = exports.compileForwardRuleSet = exports.ForwardChainingStrategy = exports.PricingEngine = exports.UtilityEngine = exports.ConstraintEngine = exports.StateMachineEngine = exports.MonteCarloEngine = exports.BayesianEngine = exports.FuzzyEngine = exports.SequentialEngine = exports.ScoringEngine = exports.BackwardEngine = exports.ForwardEngine = void 0;
33
- exports.cosineSimilarity = exports.caverphone2 = exports.nysiis = exports.soundex = exports.getCurrencyInfo = exports.CURRENCIES = exports.applyMinMax = exports.calculateDiscount = exports.round = exports.formatPercent = exports.formatNumber = exports.formatCurrency = exports.calculateVolume = exports.calculateGraduated = exports.calculateFlat = exports.pricingEngine = exports.pricingStrategy = exports.compilePricingRule = exports.compilePricingRuleSet = exports.PricingStrategy = exports.buildAvailableRefs = exports.hasInterpolation = exports.interpolate = exports.compileTemplate = exports.expertStrategy = exports.compileExpertRuleSet = exports.ExpertStrategy = exports.ExpertEngine = exports.compileDefeasibleRuleSet = exports.DefeasibleEngine = exports.utilityStrategy = void 0;
33
+ exports.resolveDecayTimestamp = exports.calculateDecayMultiplier = exports.cosineSimilarity = exports.caverphone2 = exports.nysiis = exports.soundex = exports.getCurrencyInfo = exports.CURRENCIES = exports.applyMinMax = exports.calculateDiscount = exports.round = exports.formatPercent = exports.formatNumber = exports.formatCurrency = exports.calculateVolume = exports.calculateGraduated = exports.calculateFlat = exports.pricingEngine = exports.pricingStrategy = exports.compilePricingRule = exports.compilePricingRuleSet = exports.PricingStrategy = exports.buildAvailableRefs = exports.hasInterpolation = exports.interpolate = exports.compileTemplate = exports.expertStrategy = exports.compileExpertRuleSet = exports.ExpertStrategy = exports.ExpertEngine = exports.compileDefeasibleRuleSet = exports.DefeasibleEngine = exports.utilityStrategy = void 0;
34
34
  // ========================================
35
35
  // Engines
36
36
  // ========================================
@@ -169,6 +169,10 @@ Object.defineProperty(exports, "soundex", { enumerable: true, get: function () {
169
169
  Object.defineProperty(exports, "nysiis", { enumerable: true, get: function () { return functions_1.nysiis; } });
170
170
  Object.defineProperty(exports, "caverphone2", { enumerable: true, get: function () { return functions_1.caverphone2; } });
171
171
  Object.defineProperty(exports, "cosineSimilarity", { enumerable: true, get: function () { return functions_1.cosineSimilarity; } });
172
+ // Temporal Decay (re-exported from core for convenience)
173
+ var decay_1 = require("./core/evaluation/decay");
174
+ Object.defineProperty(exports, "calculateDecayMultiplier", { enumerable: true, get: function () { return decay_1.calculateDecayMultiplier; } });
175
+ Object.defineProperty(exports, "resolveDecayTimestamp", { enumerable: true, get: function () { return decay_1.resolveDecayTimestamp; } });
172
176
  // ========================================
173
177
  // QFacts - Probabilistic Fact Hydration
174
178
  // ========================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@higher.archi/boe",
3
- "version": "1.0.6",
3
+ "version": "1.0.8",
4
4
  "description": "A multi-strategy rule engine supporting forward chaining, backward chaining, scoring, sequential, fuzzy logic, and Bayesian inference",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Temporal Decay Utilities
3
+ *
4
+ * Provides continuous decay multipliers (0→1) that degrade a rule's
5
+ * contribution based on how old its underlying data is.
6
+ *
7
+ * Complementary to temporal validity (binary gate) — validity runs first,
8
+ * decay modifies strength continuously.
9
+ */
10
+
11
+ import { BindingContext, Fact } from '../types';
12
+
13
+ // ========================================
14
+ // Types
15
+ // ========================================
16
+
17
+ /**
18
+ * Decay curve shape
19
+ * - exponential: e^(-ln(2)/halfLife * age), smooth asymptotic decay
20
+ * - linear: 1 - age/maxAge, straight-line to zero
21
+ * - step: binary cutoff at threshold age
22
+ */
23
+ export type DecayCurve = 'exponential' | 'linear' | 'step';
24
+
25
+ /**
26
+ * Time unit for decay calculations
27
+ */
28
+ export type DecayTimeUnit = 'hours' | 'days' | 'weeks' | 'months';
29
+
30
+ /**
31
+ * Configuration for temporal decay
32
+ */
33
+ export type DecayConfig = {
34
+ curve: DecayCurve;
35
+ timeUnit: DecayTimeUnit;
36
+ halfLife?: number; // exponential: age at which multiplier = 0.5
37
+ maxAge?: number; // linear: age at which multiplier = 0
38
+ threshold?: number; // step: binary cutoff age
39
+ floor?: number; // minimum multiplier (default 0)
40
+ };
41
+
42
+ /**
43
+ * Decay calculation result with audit trail
44
+ */
45
+ export type DecayInfo = {
46
+ multiplier: number;
47
+ ageInUnits: number;
48
+ curve: DecayCurve;
49
+ timestamp: string; // resolved ISO timestamp
50
+ fullyDecayed: boolean;
51
+ };
52
+
53
+ // ========================================
54
+ // Time Unit Conversion
55
+ // ========================================
56
+
57
+ const MS_PER_HOUR = 3_600_000;
58
+ const MS_PER_DAY = 86_400_000;
59
+ const MS_PER_WEEK = 604_800_000;
60
+ const MS_PER_MONTH = 2_592_000_000; // 30 days
61
+
62
+ function msPerUnit(unit: DecayTimeUnit): number {
63
+ switch (unit) {
64
+ case 'hours': return MS_PER_HOUR;
65
+ case 'days': return MS_PER_DAY;
66
+ case 'weeks': return MS_PER_WEEK;
67
+ case 'months': return MS_PER_MONTH;
68
+ }
69
+ }
70
+
71
+ // ========================================
72
+ // Core Calculation
73
+ // ========================================
74
+
75
+ /**
76
+ * Calculate a decay multiplier based on age and configuration
77
+ *
78
+ * @param dataTimestamp - When the data was collected/created
79
+ * @param now - Current time reference point
80
+ * @param config - Decay configuration
81
+ * @returns DecayInfo with multiplier and audit data
82
+ */
83
+ export function calculateDecayMultiplier(
84
+ dataTimestamp: Date,
85
+ now: Date,
86
+ config: DecayConfig
87
+ ): DecayInfo {
88
+ const ageMs = now.getTime() - dataTimestamp.getTime();
89
+ const ageInUnits = ageMs / msPerUnit(config.timeUnit);
90
+ const floor = config.floor ?? 0;
91
+
92
+ let rawMultiplier: number;
93
+
94
+ switch (config.curve) {
95
+ case 'exponential': {
96
+ const halfLife = config.halfLife ?? 1;
97
+ // e^(-ln(2)/halfLife * age)
98
+ rawMultiplier = Math.exp(-Math.LN2 / halfLife * ageInUnits);
99
+ break;
100
+ }
101
+
102
+ case 'linear': {
103
+ const maxAge = config.maxAge ?? 1;
104
+ rawMultiplier = 1 - ageInUnits / maxAge;
105
+ break;
106
+ }
107
+
108
+ case 'step': {
109
+ const threshold = config.threshold ?? 1;
110
+ rawMultiplier = ageInUnits < threshold ? 1.0 : 0.0;
111
+ break;
112
+ }
113
+ }
114
+
115
+ // Clamp to [floor, 1]
116
+ const multiplier = Math.max(floor, Math.min(1, rawMultiplier));
117
+
118
+ return {
119
+ multiplier,
120
+ ageInUnits,
121
+ curve: config.curve,
122
+ timestamp: dataTimestamp.toISOString(),
123
+ fullyDecayed: multiplier <= floor
124
+ };
125
+ }
126
+
127
+ /**
128
+ * Resolve a decay timestamp from a $-prefixed path in the binding context
129
+ *
130
+ * @param ref - A $-prefixed path like '$inspection.date'
131
+ * @param context - The current binding context
132
+ * @returns Resolved Date, or null if path is missing/invalid
133
+ */
134
+ export function resolveDecayTimestamp(ref: string, context: BindingContext): Date | null {
135
+ if (!ref.startsWith('$')) return null;
136
+
137
+ const stripped = ref.slice(1);
138
+ const parts = stripped.split('.');
139
+ const param = parts[0];
140
+ const path = parts.slice(1);
141
+
142
+ const fact = context[param] as Fact | undefined;
143
+ if (!fact) return null;
144
+
145
+ let value: any = fact.data;
146
+ for (const key of path) {
147
+ if (value === null || value === undefined) return null;
148
+ value = value[key];
149
+ }
150
+
151
+ if (value === null || value === undefined) return null;
152
+
153
+ // Accept Date objects, ISO strings, or numeric timestamps
154
+ if (value instanceof Date) return value;
155
+ if (typeof value === 'string') {
156
+ const parsed = new Date(value);
157
+ return isNaN(parsed.getTime()) ? null : parsed;
158
+ }
159
+ if (typeof value === 'number') {
160
+ const parsed = new Date(value);
161
+ return isNaN(parsed.getTime()) ? null : parsed;
162
+ }
163
+
164
+ return null;
165
+ }
@@ -18,3 +18,16 @@ export {
18
18
  getRuleTemporalInfo,
19
19
  RulesetMetadata
20
20
  } from './temporal';
21
+
22
+ // Temporal decay utilities
23
+ export {
24
+ calculateDecayMultiplier,
25
+ resolveDecayTimestamp
26
+ } from './decay';
27
+
28
+ export type {
29
+ DecayCurve,
30
+ DecayTimeUnit,
31
+ DecayConfig,
32
+ DecayInfo
33
+ } from './decay';
@@ -346,6 +346,17 @@ export function compileBayesianRule(
346
346
  const inputs = rule.inputs.map(compileInputParameter);
347
347
  const when = rule.when ? compileCondition(rule.when) : undefined;
348
348
 
349
+ // Compile decay — only pass through $-prefixed string timestamps
350
+ let compiledDecay: { timestamp: string; config?: any } | undefined;
351
+ if (rule.decay) {
352
+ const ts = rule.decay.timestamp;
353
+ if (typeof ts === 'string') {
354
+ compiledDecay = { timestamp: ts, config: rule.decay.config };
355
+ }
356
+ // Expression timestamps for Bayesian are not supported (would need runtime eval);
357
+ // only $-prefixed paths are supported
358
+ }
359
+
349
360
  return {
350
361
  id: rule.id,
351
362
  name: rule.name,
@@ -354,7 +365,8 @@ export function compileBayesianRule(
354
365
  index,
355
366
  inputs,
356
367
  when,
357
- likelihood: compileLikelihoodMap(rule.likelihood, hypothesisNames, rule.id)
368
+ likelihood: compileLikelihoodMap(rule.likelihood, hypothesisNames, rule.id),
369
+ decay: compiledDecay
358
370
  };
359
371
  }
360
372
 
@@ -370,7 +382,8 @@ export function compileBayesianRuleSet(ruleSet: BayesianRuleSet): CompiledBayesi
370
382
  const config: BayesianConfig = {
371
383
  mode: 'bayesian',
372
384
  threshold: ruleSet.config?.threshold,
373
- priorDefault: ruleSet.config?.priorDefault ?? 'uniform'
385
+ priorDefault: ruleSet.config?.priorDefault ?? 'uniform',
386
+ decay: ruleSet.config?.decay
374
387
  };
375
388
 
376
389
  // Get hypothesis names for validation
@@ -13,6 +13,12 @@ import {
13
13
  Fact
14
14
  } from '../../core';
15
15
  import { IWorkingMemory } from '../../core/memory';
16
+ import {
17
+ calculateDecayMultiplier,
18
+ resolveDecayTimestamp,
19
+ DecayConfig,
20
+ DecayInfo
21
+ } from '../../core/evaluation/decay';
16
22
 
17
23
  import {
18
24
  CompiledBayesianRuleSet,
@@ -191,6 +197,8 @@ export class BayesianStrategy {
191
197
  const fired: string[] = [];
192
198
  const evidence: EvidenceEntry[] = [];
193
199
  let thresholdExceeded: string | undefined;
200
+ const decayInfoMap: Record<string, DecayInfo> = {};
201
+ const now = new Date();
194
202
 
195
203
  // Track which hypotheses were below threshold initially
196
204
  // (so we can detect when they cross it)
@@ -213,20 +221,59 @@ export class BayesianStrategy {
213
221
  fired.push(rule.id);
214
222
  }
215
223
 
224
+ // Compute decay for this rule's evidence
225
+ let effectiveLikelihoods = rule.likelihood;
226
+ let likelihoodsBeforeDecay: CompiledLikelihoodMap | undefined;
227
+ let ruleDecayInfo: DecayInfo | undefined;
228
+
229
+ const ruleDecay = rule.decay;
230
+ const engineDecay = config.decay;
231
+
232
+ if (ruleDecay || engineDecay) {
233
+ const tsRef = ruleDecay?.timestamp ?? (engineDecay?.timestamp as string | undefined);
234
+
235
+ if (typeof tsRef === 'string') {
236
+ const dataTimestamp = resolveDecayTimestamp(tsRef, activation.facts);
237
+
238
+ if (dataTimestamp) {
239
+ const decayConfig: DecayConfig = {
240
+ ...(engineDecay?.config ?? { curve: 'exponential', timeUnit: 'days' }),
241
+ ...ruleDecay?.config
242
+ } as DecayConfig;
243
+
244
+ const info = calculateDecayMultiplier(dataTimestamp, now, decayConfig);
245
+ ruleDecayInfo = info;
246
+ decayInfoMap[rule.id] = info;
247
+
248
+ // Decay likelihoods toward 1.0 (neutral)
249
+ // decayedLikelihood = 1.0 + (originalLikelihood - 1.0) * multiplier
250
+ if (info.multiplier < 1.0) {
251
+ likelihoodsBeforeDecay = { ...rule.likelihood };
252
+ effectiveLikelihoods = {};
253
+ for (const [h, lh] of Object.entries(rule.likelihood)) {
254
+ effectiveLikelihoods[h] = 1.0 + (lh - 1.0) * info.multiplier;
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+
216
261
  // Record evidence
217
262
  evidence.push({
218
263
  ruleId: rule.id,
219
264
  ruleName: rule.name,
220
- likelihoods: rule.likelihood
265
+ likelihoods: effectiveLikelihoods,
266
+ likelihoodsBeforeDecay,
267
+ decayInfo: ruleDecayInfo
221
268
  });
222
269
 
223
270
  // Callback
224
271
  if (onFire) {
225
- onFire(rule.id, activation.facts, rule.likelihood);
272
+ onFire(rule.id, activation.facts, effectiveLikelihoods);
226
273
  }
227
274
 
228
- // Update posteriors with this evidence
229
- posteriors = applyEvidence(posteriors, rule.likelihood);
275
+ // Update posteriors with this evidence (using decayed likelihoods)
276
+ posteriors = applyEvidence(posteriors, effectiveLikelihoods);
230
277
 
231
278
  // Check if any hypothesis crossed the threshold (from below to above)
232
279
  if (threshold !== undefined && thresholdExceeded === undefined) {
@@ -255,6 +302,8 @@ export class BayesianStrategy {
255
302
 
256
303
  const executionTimeMs = Math.round((performance.now() - startTime) * 100) / 100;
257
304
 
305
+ const hasDecay = Object.keys(decayInfoMap).length > 0;
306
+
258
307
  return {
259
308
  priors: normalizedPriors,
260
309
  posteriors,
@@ -263,6 +312,7 @@ export class BayesianStrategy {
263
312
  fired,
264
313
  evidence,
265
314
  thresholdExceeded,
315
+ ...(hasDecay ? { decayInfo: decayInfoMap } : {}),
266
316
  iterations: 1,
267
317
  executionTimeMs
268
318
  };
@@ -17,6 +17,8 @@ import {
17
17
  BindingContext
18
18
  } from '../../core';
19
19
 
20
+ import { DecayConfig, DecayInfo } from '../../core/evaluation/decay';
21
+
20
22
  // ========================================
21
23
  // Likelihood Value Types
22
24
  // ========================================
@@ -100,6 +102,10 @@ export type PriorDefault =
100
102
  */
101
103
  export type BayesianRule = BaseRule & {
102
104
  likelihood: LikelihoodMap; // How this evidence affects each hypothesis
105
+ decay?: {
106
+ timestamp: string | Expression; // e.g. '$sensor.readingDate'
107
+ config?: Partial<DecayConfig>; // overrides engine-level defaults
108
+ };
103
109
  };
104
110
 
105
111
  /**
@@ -109,6 +115,10 @@ export type BayesianConfig = {
109
115
  mode: 'bayesian';
110
116
  threshold?: number; // Flag if any posterior exceeds this (e.g., 0.5)
111
117
  priorDefault?: PriorDefault; // How to fill missing priors (default: 'uniform')
118
+ decay?: {
119
+ timestamp?: string | Expression; // default timestamp path for all rules
120
+ config: DecayConfig; // engine-level decay config
121
+ };
112
122
  };
113
123
 
114
124
  /**
@@ -152,6 +162,10 @@ export type CompiledLikelihoodMap = Record<string, number>;
152
162
  */
153
163
  export type CompiledBayesianRule = CompiledBaseRule & {
154
164
  likelihood: CompiledLikelihoodMap;
165
+ decay?: {
166
+ timestamp: string; // $-prefixed path
167
+ config?: Partial<DecayConfig>;
168
+ };
155
169
  };
156
170
 
157
171
  /**
@@ -176,6 +190,8 @@ export type EvidenceEntry = {
176
190
  ruleId: string;
177
191
  ruleName?: string;
178
192
  likelihoods: CompiledLikelihoodMap;
193
+ likelihoodsBeforeDecay?: CompiledLikelihoodMap; // original likelihoods before decay
194
+ decayInfo?: DecayInfo;
179
195
  };
180
196
 
181
197
  /**
@@ -197,6 +213,7 @@ export type BayesianResult = {
197
213
  fired: string[]; // Rules that matched and provided evidence
198
214
  evidence: EvidenceEntry[]; // Audit trail
199
215
  thresholdExceeded?: string; // First hypothesis to exceed threshold (if any)
216
+ decayInfo?: Record<string, DecayInfo>; // per-rule decay audit
200
217
  iterations: 1; // Bayesian is always one-pass
201
218
  executionTimeMs: number; // Processing time in milliseconds
202
219
  };
@@ -34,7 +34,8 @@ const DEFAULT_CONFIG: Required<DefeasibleConfig> = {
34
34
  aggregation: 'average',
35
35
  threshold: 0.5,
36
36
  conflictResolution: 'specificity',
37
- maxIterations: 100
37
+ maxIterations: 100,
38
+ decay: undefined as any // Optional at runtime; Required<> demands a key
38
39
  };
39
40
 
40
41
  // ========================================
@@ -198,6 +199,19 @@ function compileRule(rule: DefeasibleRule, index: number): CompiledDefeasibleRul
198
199
  const inputs = (rule.inputs || []).map(compileInputParameter);
199
200
  const when = rule.when ? compileCondition(rule.when) : undefined;
200
201
 
202
+ // Compile decay — only pass through $-prefixed string timestamps
203
+ let compiledDecay: CompiledDefeasibleRule['decay'] | undefined;
204
+ if (rule.decay) {
205
+ const ts = rule.decay.timestamp;
206
+ if (typeof ts === 'string') {
207
+ compiledDecay = {
208
+ timestamp: ts,
209
+ config: rule.decay.config,
210
+ target: rule.decay.target
211
+ };
212
+ }
213
+ }
214
+
201
215
  return {
202
216
  id: rule.id,
203
217
  name: rule.name,
@@ -210,7 +224,8 @@ function compileRule(rule: DefeasibleRule, index: number): CompiledDefeasibleRul
210
224
  credibility: normalizeCredibility(rule.credibility),
211
225
  conclusion: compileConclusion(rule.conclude),
212
226
  defeats: (rule.defeats || []).map(normalizeDefeat),
213
- specificity: countSpecificity(rule)
227
+ specificity: countSpecificity(rule),
228
+ decay: compiledDecay
214
229
  };
215
230
  }
216
231