- Decision tracking system with comprehensive lifecycle management
- Advanced KG algorithms and vector store features
- Enhanced context module with unified AgentContext
- Production-ready architecture with validation
- Fixed test suite issues for release readiness
- 113+ tests passing across core modules
- Add 'from datetime import datetime' import in e-commerce examples
- Change 'max_results=5' to 'limit=5' for find_precedents_by_scenario calls
- Fix docs/reference/context.md e-commerce example
- Fix semantica/context/context_usage.md e-commerce example
- Ensure documentation examples are self-contained and copy-paste ready
- Match actual API parameter names for correct behavior
- All 62 tests still passing successfully
- Add _normalize_timestamp helper to handle various timestamp formats
- Support datetime, int/float (epoch), str (ISO with optional Z), None/invalid
- Update get_causal_chain to use timestamp normalization
- Update find_precedents to use timestamp normalization
- Update add_decision to normalize timestamps before storage
- Prevent float timestamps from breaking Decision.to_dict() and .isoformat()
- Ensure consistent datetime objects in all Decision instances
- All 62 tests still passing successfully
- Fix ContextGraph.find_similar_decisions to call find_precedents_by_scenario instead of find_precedents
- Fix AgentContext.find_precedents to call find_precedents_by_scenario instead of find_precedents
- Update method calls to use correct scenario-based precedent search API
- Prevent TypeError from mismatched method signatures (ID-based vs scenario-based)
- Ensure backward compatibility and proper delegation to hybrid search functionality
- All 62 tests still passing successfully
- Fix add_decision to handle both None and empty string decision_id values
- Change from 'decision.decision_id is not None' to 'decision.decision_id'
- Ensures empty string decision_id also triggers UUID generation like None
- Prevents nodes with empty string keys in the graph
- Aligns ContextGraph behavior with Decision model's __post_init__ method
- Ensures compliance with PR Rule 3: Robust Error Handling and Edge Case Management
- All 62 tests still passing successfully
- Add null/None checks before calling node_type.lower() in add_causal_relationship
- Add type validation before calling node_type.lower() in get_causal_chain
- Add type validation before calling node_type.lower() in find_precedents
- Fix _add_internal_node to handle missing/invalid node_type attributes
- Prevent AttributeError crashes when node_type is None or non-string
- Ensure compliance with PR Rule 3: Robust Error Handling and Edge Case Management
- All 62 tests still passing successfully
- Fix method name conflicts: add_decision -> add_decision_simple, find_precedents -> find_precedents_by_scenario
- Fix Decision ID handling: align tests with Decision model UUID generation behavior
- Fix AgentContext integration: proper handling of context_graph backend in get_causal_chain
- Fix Policy engine: remove invalid auto_generate_id parameter from deserialization
- Fix node type consistency: handle lowercase 'decision' type across all methods
- Fix timestamp handling: proper conversion for string and datetime objects
- Update documentation: correct method names and Decision model usage in examples
- All 62 Context Graph tests passing successfully
- Production ready with comprehensive verification
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
- Replace conflicting Exception class name with PolicyException in decision_models.py
- Update all test imports to use PolicyException instead of Exception
- Fix auto ID generation to handle empty strings, not just None
- Resolves import errors in decision tracking test suites
- Maintains backward compatibility while fixing naming conflicts
Fixes: PolicyException naming conflicts preventing test execution
Tests: All decision model tests now pass (19/19)
- Fixed limit=5 to top_k=5 to match find_similar_nodes() signature
- Fixed tuple handling: similar_nodes returns List[Tuple[str, float]] not dicts
- Fixed node.get() to proper tuple unpacking for similarity scores
- Updated logging to use structured logging (logger.exception)
- Restores structural similarity functionality for precedent ranking
- Fixes find_precedents() to use proper structural similarity calculations
- Fixed get_context_insights() to use new config keys (decision_tracking, kg_algorithms, vector_store_features)
- Fixed enhance_agent_context_with_decisions() to use new config key (decision_tracking)
- Ensures feature flags work correctly across all code paths
- Prevents decision enhancements from being skipped when enabled
- Fixes misreporting of feature enablement in insights
- Maintains consistency between config initialization and usage
- Fixed get_node() to find_node() - method didn't exist
- Fixed properties={} to **properties parameter unpacking
- Fixed add_node() calls to use keyword arguments instead of properties dict
- Fixed add_edge() calls to use keyword arguments instead of properties dict
- Ensures decision entities, categories, and edges are properly created
- Prevents silent failures in graph enrichment for recorded decisions
- Restores full decision graph functionality for record_decision()
- Renamed decision-specific method to _calculate_decision_content_similarity
- Preserves node-based _calculate_content_similarity for find_similar_nodes()
- Updates method call to use renamed method
- Fixes core node-similarity functionality that was broken
- Ensures both node similarity and decision similarity work correctly
- Prevents find_similar_nodes() from calling wrong method signature
- Maintains backward compatibility for all similarity features
- Added validation for all required fields (category, scenario, reasoning, outcome)
- Added confidence range validation (0.0 to 1.0)
- Added type checking for all parameters
- Added length limits to prevent data corruption
- Added entity list validation with individual item checks
- Added metadata dictionary validation
- Added kwargs validation for additional fields
- Added input sanitization (trimming, type conversion)
- Ensures compliance with security-first input validation requirements
- Prevents malicious/corrupted data from affecting graph operations and analytics
- Fixed agent_context.py: Use logger.exception() instead of raw exception in logs
- Fixed context_graph.py: Use logger.exception() for secure structured logging
- Fixed policy_engine.py: Replaced 10 instances of raw exception logging with structured logging
- Fixed decision_recorder.py: Replaced 8 instances of raw exception logging with structured logging
- Ensures compliance with secure logging practices (Rule 5: Generic Secure Logging Practices)
- Maintains detailed exception information in internal logs while protecting user-facing outputs
- Prevents potential sensitive data leakage through log messages