2.6 KiB
2.6 KiB
ProhibitedPatternAnalyzer (Static Purity Analysis)
Module
Policy
Status
IMPLEMENTED
Description
Static purity analysis detecting prohibited patterns (ambient IO, clock access, etc.) in evaluation code.
Implementation Details
- ProhibitedPatternAnalyzer:
src/Policy/StellaOps.Policy.Engine/DeterminismGuard/ProhibitedPatternAnalyzer.cs- Regex-based detection of non-deterministic patterns in source code
- Prohibited pattern categories:
- Wall-clock access:
DateTime.Now,DateTime.UtcNow,DateTimeOffset.Now,DateTimeOffset.UtcNow - Random number generation:
Random,RandomNumberGenerator - Network access:
HttpClient,WebRequest,TcpClient,UdpClient - Filesystem access:
File.,Directory.,Path.GetTempPath
- Wall-clock access:
- Line-by-line scanning with comment line skipping (lines starting with
//or///) - Returns list of
ProhibitedPatternMatchwith line number, pattern name, matched text
- DeterminismGuardService:
src/Policy/StellaOps.Policy.Engine/DeterminismGuard/DeterminismGuardService.csAnalyzeSource(sourceCode)invokes ProhibitedPatternAnalyzer to find violationsCreateScope()creates a determinism guard scope for runtime monitoringValidateContext<T>()validates evaluation context for determinism- Combines ProhibitedPatternAnalyzer (static) and RuntimeDeterminismMonitor (runtime)
- RuntimeDeterminismMonitor:
src/Policy/StellaOps.Policy.Engine/DeterminismGuard/RuntimeDeterminismMonitor.cs-- runtime monitoring companion - GuardedPolicyEvaluator:
src/Policy/StellaOps.Policy.Engine/Gates/Determinization/DeterminizationGate.cs-- gate that uses determinism guards in evaluation pipeline
E2E Test Plan
- Analyze source code containing
DateTime.Now; verify prohibited pattern detected with correct line number - Analyze source code containing
new Random(); verify prohibited pattern detected - Analyze source code containing
HttpClient; verify network access pattern detected - Analyze source code containing
File.ReadAllText; verify filesystem pattern detected - Analyze source code with prohibited pattern in a comment line (
// DateTime.Now); verify NOT detected (comment skipped) - Analyze clean source code with no prohibited patterns; verify empty results
- Analyze source code with multiple violations on different lines; verify all detected with correct line numbers
- Verify DeterminismGuardService.AnalyzeSource returns results from ProhibitedPatternAnalyzer
- Create determinism guard scope; use TimeProvider instead of DateTime.Now; verify no violations