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(
55 absl::string_view policy_dir = ".yaze/policies");
56
57 // Evaluate a proposal against all loaded policies
58 absl::StatusOr<PolicyResult> EvaluateProposal(
59 absl::string_view proposal_id);
60
61 // Reload policies from disk (for live editing)
62 absl::Status ReloadPolicies();
63
64 // Check if policies are loaded and enabled
65 bool IsEnabled() const { return enabled_; }
66
67 // Get policy configuration path
68 std::string GetPolicyPath() const { return policy_path_; }
69
70 // Get human-readable status
71 std::string GetStatusString() const;
72
73 private:
74 PolicyEvaluator() = default;
75 ~PolicyEvaluator() = default;
76
77 // Non-copyable, non-movable
80
81 // Parse YAML policy file
82 absl::Status ParsePolicyFile(absl::string_view yaml_content);
83
84 // Evaluate individual policy types
85 void EvaluateTestRequirements(absl::string_view proposal_id,
86 PolicyResult* result);
87 void EvaluateChangeConstraints(absl::string_view proposal_id,
88 PolicyResult* result);
89 void EvaluateForbiddenRanges(absl::string_view proposal_id,
90 PolicyResult* result);
91 void EvaluateReviewRequirements(absl::string_view proposal_id,
92 PolicyResult* result);
93
94 // Helper to categorize violations by severity
96
97 bool enabled_ = false;
98 std::string policy_path_;
99 std::string policy_dir_;
100
101 // Parsed policy structures (implementation detail)
102 struct PolicyConfig;
103 std::unique_ptr<PolicyConfig> config_;
104};
105
106} // namespace cli
107} // namespace yaze
108
109#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)
Main namespace for the application.
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