yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
policy_evaluator.h
Go to the documentation of this file.
1#ifndef YAZE_CLI_SERVICE_POLICY_EVALUATOR_H
2#define YAZE_CLI_SERVICE_POLICY_EVALUATOR_H
3
4#include <memory>
5#include <string>
6#include <vector>
7
8#include "absl/status/status.h"
9#include "absl/status/statusor.h"
10#include "absl/strings/string_view.h"
11
12namespace yaze {
13namespace cli {
14
15// Policy violation severity levels
16enum class PolicySeverity {
17 kInfo, // Informational, doesn't block acceptance
18 kWarning, // Warning, can be overridden
19 kCritical // Critical, blocks acceptance
20};
21
22// Individual policy violation
24 std::string policy_name;
26 std::string message;
27 std::string details; // Additional context
28};
29
30// Result of policy evaluation
32 bool passed; // True if all critical policies passed
33 std::vector<PolicyViolation> violations;
34
35 // Categorized violations
36 std::vector<PolicyViolation> critical_violations;
37 std::vector<PolicyViolation> warnings;
38 std::vector<PolicyViolation> info;
39
40 // Helper methods
41 bool has_critical_violations() const { return !critical_violations.empty(); }
43 return !has_critical_violations() && !warnings.empty();
44 }
45 bool is_clean() const { return violations.empty(); }
46};
47
48// Singleton service for evaluating proposals against policies
50 public:
52
53 // Load policies from disk (.yaze/policies/agent.yaml)
54 absl::Status LoadPolicies(absl::string_view policy_dir = ".yaze/policies");
55
56 // Evaluate a proposal against all loaded policies
57 absl::StatusOr<PolicyResult> EvaluateProposal(absl::string_view proposal_id);
58
59 // Reload policies from disk (for live editing)
60 absl::Status ReloadPolicies();
61
62 // Check if policies are loaded and enabled
63 bool IsEnabled() const { return enabled_; }
64
65 // Get policy configuration path
66 std::string GetPolicyPath() const { return policy_path_; }
67
68 // Get human-readable status
69 std::string GetStatusString() const;
70
71 private:
72 PolicyEvaluator() = default;
73 ~PolicyEvaluator() = default;
74
75 // Non-copyable, non-movable
78
79 // Parse YAML policy file
80 absl::Status ParsePolicyFile(absl::string_view yaml_content);
81
82 // Evaluate individual policy types
83 void EvaluateTestRequirements(absl::string_view proposal_id,
84 PolicyResult* result);
85 void EvaluateChangeConstraints(absl::string_view proposal_id,
86 PolicyResult* result);
87 void EvaluateForbiddenRanges(absl::string_view proposal_id,
88 PolicyResult* result);
89 void EvaluateReviewRequirements(absl::string_view proposal_id,
90 PolicyResult* result);
91
92 // Helper to categorize violations by severity
94
95 bool enabled_ = false;
96 std::string policy_path_;
97 std::string policy_dir_;
98
99 // Parsed policy structures (implementation detail)
100 struct PolicyConfig;
101 std::unique_ptr<PolicyConfig> config_;
102};
103
104} // namespace cli
105} // namespace yaze
106
107#endif // YAZE_CLI_SERVICE_POLICY_EVALUATOR_H
absl::Status ParsePolicyFile(absl::string_view yaml_content)
void EvaluateReviewRequirements(absl::string_view proposal_id, PolicyResult *result)
absl::StatusOr< PolicyResult > EvaluateProposal(absl::string_view proposal_id)
PolicyEvaluator & operator=(const PolicyEvaluator &)=delete
std::unique_ptr< PolicyConfig > config_
static PolicyEvaluator & GetInstance()
void EvaluateTestRequirements(absl::string_view proposal_id, PolicyResult *result)
void CategorizeViolations(PolicyResult *result)
PolicyEvaluator(const PolicyEvaluator &)=delete
std::string GetStatusString() const
void EvaluateForbiddenRanges(absl::string_view proposal_id, PolicyResult *result)
std::string GetPolicyPath() const
absl::Status LoadPolicies(absl::string_view policy_dir=".yaze/policies")
void EvaluateChangeConstraints(absl::string_view proposal_id, PolicyResult *result)
std::vector< PolicyViolation > warnings
bool has_critical_violations() const
bool can_accept_with_override() const
std::vector< PolicyViolation > info
std::vector< PolicyViolation > critical_violations
std::vector< PolicyViolation > violations