js-rigor: possibilistic validity layer (Cella FVN labels, conflict mass, validification)
Adds an epistemic validity layer in the spirit of the zig-contour fusion
spec: every check result now carries a validity block {label, operator,
regime, sources, conflictMass, validifiedPossibility, nonMaxitive}.
- Relations accept a validity label (default heuristic = unlabeled input).
- Labels propagate through fusion: identity/max preserve the weakest
source label (max is already valid under arbitrary dependence); min
(conjunctive: intersection, chain, TTU, multi_hop, parent) is
approximate at best, surfaces the conflict mass (1 - possibility) that
was previously dropped, and exposes the arbitrary-regime validification
min(1, K*gamma); product-style operators (exclusion, defeasible) and
interior OWA averaging are always heuristic, with nonMaxitive flagged.
- Reliability and validity are now explicitly distinct: reliability stays
the scalar confidence adaptation; validity tracks the epistemic label.
- The hottest paths attach a shared frozen default block instead of
allocating (perf A/B shows no regression: ~300k ops/s direct both ways).
- Pre-existing fixes surfaced while wiring: the array-form logical config
dropped top-level aggregator/owaWeights (average union compiled as max),
and _createStandardResult dropped unknown fields (validity never
survived rule results).
New campaign validity-parity.test.js pins the label taxonomy, conflict
mass, validification, weakest-propagation, and the reliability/validity
separation. Suites: rigor 203/0, full 803/741/0.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { OWAFusion } from '../../utils/OWAFusion.js';
|
||||
import { buildValidity, normalizeValidity, DEFAULT_VALIDITY } from '../../core/validity.js';
|
||||
import { BilatticeOrderings } from '../../qualitative/BilatticeOrderings.js';
|
||||
import { QualitativeCapacity } from '../../qualitative/QualitativeCapacity.js';
|
||||
import { QualitativeScale } from '../../qualitative/QualitativeScale.js';
|
||||
@@ -134,11 +135,24 @@ export class BaseRule {
|
||||
* Create standardized rule result with collected values
|
||||
* @protected
|
||||
*/
|
||||
_defaultValidity() {
|
||||
return DEFAULT_VALIDITY;
|
||||
}
|
||||
|
||||
_validity(operator, sources = [], sourceLabels = [], K = 1, possibility = 0) {
|
||||
return buildValidity({ operator, sources, sourceLabels, K, possibility });
|
||||
}
|
||||
|
||||
_relationValidity(rel) {
|
||||
return normalizeValidity(rel && rel.validity !== undefined ? rel.validity : null);
|
||||
}
|
||||
|
||||
_createStandardResult(authResult, collectedValues = []) {
|
||||
const result = {
|
||||
// AUTHORIZATION
|
||||
possibility: authResult.possibility || 0,
|
||||
reliability: authResult.reliability !== undefined ? authResult.reliability : 1.0,
|
||||
validity: authResult.validity || DEFAULT_VALIDITY,
|
||||
|
||||
// BINARY MODE FIELDS
|
||||
possibility_allow: authResult.possibility_allow !== undefined ? authResult.possibility_allow : (authResult.possibility || 0),
|
||||
|
||||
Reference in New Issue
Block a user