3.2 KiB
3.2 KiB
Experiment 60B.61 — Decision Remaining-Material-Factor Detection
Status: PASSED
Objective
Answer: Does the dedicated remaining-material-factor helper work correctly once malformed tests are repaired, without any broader applyValidatedProposal integration?
Answer: YES.
Scope (bounded)
Helper detection experiment only. No closure integration.
Production code added (2 helpers + internal support)
| Export | Role |
|---|---|
hasRemainingMaterialFactors(decisionNodeId, graph) |
Public boolean — true if any unresolved unknown remains material to the decision |
countRemainingMaterialFactors(decisionNodeId, graph) |
Count variant — used internally by hasRemainingMaterialFactors; kept as exported for potential future use |
- Set-based deduplication of factor IDs across routes (no double-count)
- Decision self-count excluded (
node.id === decisionNodeId) - Terminal statuses excluded:
known,resolved,contradicted - Helper-only. No integration into
applyValidatedProposalreturn, no closure logic change.
Supported Routes
| Route | Relationship Path |
|---|---|
| A — hierarchy | parentId chain or childIds membership |
| B — direct dependency | depends_on edge to decision |
| C — consequence | unknown → {affects,may_cause,causes} → option → contained_in → decision |
| D — containment | unknown → contained_in → option → contained_in → decision |
Excluded (returns false)
- Known / resolved / contraduted statuses
supports/measuresweak links- Arbitrary non-approved connectivity (
other) - The decision node itself
- Non-unknown kind nodes (e.g., observations)
Test Suite (14 cases in 60B.61 block)
- Containment-only unresolved factor → true
- Same factor resolved → false
may_causeoption-linked factor → true- Valid direct
depends_onfactor → true; resolved → false - Hierarchy child factor → true
- Supports / measures weak link → false
- Decision node alone does not self-count → false
- Another genuine unresolved hierarchy child remains → true
- Status = known excluded → false
- Status = contradicted excluded → false
- Non-unknown kinds excluded → false
- 60B.56 sufficiency (all factors resolved) → false
- Arbitrary connectivity via
otheredge → false - Additional resolution state within Route B test → false
Regression Preservation
- 60B.43: PASSED
- 60B.11: PASSED
- Pricing prerequisite-first: PASSED
Git Commits
feat(reasoning): detect remaining decision factors
docs: record decision factor detection
WHAT IS NOW GUARANTEED
The helper hasRemainingMaterialFactors(decisionNodeId, graph) correctly identifies unresolved material factors for a decision node across all four approved routes (A–D), with Set-based deduplication and proper terminal-status exclusion. No production behaviour outside the helper itself was changed.
WHAT REMAINS OPEN
Decision-sufficiency closure integration remains a separate next experiment. The helper detects but does not influence any decision-closure logic at this time.