v3/@claude-flow/guidance/docs/adrs/ADR-G019-first-class-uncertainty.md
Status: Accepted Date: 2026-02-01 Author: Guidance Control Plane Team
The existing memory and gate systems treat every value as equally certain. A memory entry written from a reliable API response has the same standing as one inferred from a single ambiguous log line. When agents act on low-confidence data, they produce confident-looking outputs that may be wrong. There is no way to express "I think this is true but I'm not sure" or "two pieces of evidence disagree."
Introduce UncertaintyLedger and UncertaintyAggregator:
Belief Tracking:
supporting or opposing, each with a weight (0-1) and source| Status | Condition |
|---|---|
confirmed | confidence >= 0.95, no opposing evidence |
probable | confidence >= 0.8, opposing ratio < 0.3 |
uncertain | confidence >= 0.5, opposing ratio < 0.3 |
contested | opposing evidence ratio >= 0.3 |
refuted | opposing evidence ratio >= 0.7 |
unknown | no evidence |
Confidence Mechanics:
recomputeConfidence(): point = supportingWeight / totalWeight, spread = 0.3 / sqrt(evidenceCount)addEvidence() recomputes confidence and re-derives status automaticallydecayAll(timestamp): confidence decays linearly over time at a configurable rateisActionable(id): returns false if confidence.point < minConfidenceForAction thresholdAggregation:
aggregate(ids): geometric mean of confidence points (penalizes low-confidence beliefs heavily)worstCase(ids): minimum confidence across a setbestCase(ids): maximum confidence across a setanyContested(ids) / allConfirmed(ids): status-based queriesInference Chains:
dependsOn arrayspropagateUncertainty(id): propagates confidence drops through dependency chainsgetInferenceChain(id): returns the full dependency graph for audit