Bug Fixes:
1. PolicyException naming conflicts:
- Replace Exception with PolicyException in DecisionRecorder.record_exception()
- Update _store_exception_node type annotation to PolicyException
- Fix test imports in test_decision_recorder.py
- Resolves runtime TypeError from conflicting Exception class name
2. Auto-ID masking missing IDs:
- Add auto_generate_id parameter to all model __post_init__ methods
- Update dict-to-model helpers to require IDs (data['decision_id'] vs data.get())
- Set auto_generate_id=False for deserialization to prevent silent UUID generation
- Makes missing IDs visible as KeyError instead of masked with auto-generated UUIDs
Files Changed:
- semantica/context/decision_recorder.py: PolicyException usage fixes
- semantica/context/decision_models.py: Auto-ID control parameter
- semantica/context/decision_query.py: Strict ID requirements
- semantica/context/policy_engine.py: Strict ID requirements
- semantica/context/causal_analyzer.py: Strict ID requirements
- tests/context/test_decision_recorder.py: Import fixes
Impact:
- Resolves PolicyException runtime failures
- Prevents silent data corruption from missing IDs
- Maintains backward compatibility for new object creation
- Improves data integrity for deserialization operations