Refactor sprint 35 score clamping for architecture compliance

This commit is contained in:
Bill
2026-02-17 12:10:36 -07:00
parent 78a4c83f62
commit 3dd2ef2577
6 changed files with 60 additions and 9 deletions

View File

@@ -5,6 +5,7 @@
#include <string>
#include <vector>
#include "ScoreClampUtil.h"
#include "ValidationErrorUtil.h"
struct CanaryAssessment {
@@ -55,8 +56,7 @@ public:
if (a.latencyP95Ms > 300) score += (a.latencyP95Ms - 300) / 5;
if (a.errorBudgetBurn > 100) score += (a.errorBudgetBurn - 100) / 2;
if (a.manualOverride) score = 0;
if (score > 100) return 100;
return score;
return clampToPercent(score);
}
int promotableCount() const {

View File

@@ -1,10 +1,10 @@
#pragma once
// Step 603: Compliance Operational Readiness
#include <algorithm>
#include <string>
#include <vector>
#include "ScoreClampUtil.h"
#include "ValidationErrorUtil.h"
struct ComplianceReadinessSnapshot {
@@ -37,7 +37,7 @@ public:
s.approvedExceptions * 2 -
s.expiringSoon * 3 -
s.openRunbooks * 4;
return std::max(0, std::min(100, score));
return clampToPercent(score);
}
static std::vector<std::string> blockingFindings(const ComplianceReadinessSnapshot& s) {

View File

@@ -5,6 +5,7 @@
#include <string>
#include <vector>
#include "ScoreClampUtil.h"
#include "ValidationErrorUtil.h"
struct EnvironmentGateState {
@@ -56,9 +57,7 @@ public:
int score = (state.passedChecks * 100) / state.requiredChecks;
score += state.manualApprovals * 5;
score -= state.blockingIssues * 20;
if (score < 0) return 0;
if (score > 100) return 100;
return score;
return clampToPercent(score);
}
std::vector<std::string> blockedEnvironments() const {

View File

@@ -0,0 +1,7 @@
#pragma once
inline int clampToPercent(int value) {
if (value < 0) return 0;
if (value > 100) return 100;
return value;
}

View File

@@ -1,10 +1,10 @@
#pragma once
// Step 613: Sprint 35 Operational Readiness
#include <algorithm>
#include <string>
#include <vector>
#include "ScoreClampUtil.h"
#include "ValidationErrorUtil.h"
struct Sprint35ReadinessInput {
@@ -35,7 +35,7 @@ public:
score -= in.onCallCoverageGaps;
score -= in.blockedCanaries * 15;
score -= in.incompletePostmortems * 10;
return std::max(0, std::min(100, score));
return clampToPercent(score);
}
static std::vector<std::string> blockers(const Sprint35ReadinessInput& in) {

View File

@@ -12010,3 +12010,48 @@ freeze, dependency, coverage, canary, and postmortem signals.
- `editor/src/Sprint35OperationalReadiness.h` within header-size limit (`54` <= `600`)
- `editor/tests/step613_test.cpp` within test-file size guidance (`134` lines)
- Header-only architecture and naming conventions remain aligned with `ARCHITECTURE.md`
## Sprint 35 Refactor Pass (Architecture Compliance)
**Status:** PASS
Completed the end-of-sprint refactor and architecture audit for Steps 604-613.
The refactor extracted duplicated score-clamp logic into one shared utility
while preserving behavior.
**Files added:**
- `editor/src/ScoreClampUtil.h` - shared `clampToPercent()` helper for all
sprint scoring modules.
**Files modified:**
- `editor/src/DeploymentPromotionGate.h`
- `editor/src/ComplianceOperationalReadiness.h`
- `editor/src/CanaryPromotionJudge.h`
- `editor/src/Sprint35OperationalReadiness.h`
**Refactor result:**
- Removed repeated manual score clamp branches in sprint modules.
- Kept modules header-only and maintained existing public APIs.
- Preserved runtime behavior; all step tests remained green.
**Verification run (full sprint matrix):**
- `cmake -S editor -B editor/build-native` - PASS
- `cmake --build editor/build-native --target step604_test step605_test step606_test step607_test step608_test step609_test step610_test step611_test step612_test step613_test` - PASS
- `./editor/build-native/step604_test` - PASS (12/12)
- `./editor/build-native/step605_test` - PASS (12/12)
- `./editor/build-native/step606_test` - PASS (12/12)
- `./editor/build-native/step607_test` - PASS (12/12)
- `./editor/build-native/step608_test` - PASS (12/12)
- `./editor/build-native/step609_test` - PASS (12/12)
- `./editor/build-native/step610_test` - PASS (12/12)
- `./editor/build-native/step611_test` - PASS (12/12)
- `./editor/build-native/step612_test` - PASS (12/12)
- `./editor/build-native/step613_test` - PASS (12/12)
- Sprint 35 matrix total: **120/120 passing**
**Architecture gate check:**
- `editor/src/ScoreClampUtil.h` (`7` <= `600`)
- `editor/src/DeploymentPromotionGate.h` (`75` <= `600`)
- `editor/src/ComplianceOperationalReadiness.h` (`58` <= `600`)
- `editor/src/CanaryPromotionJudge.h` (`72` <= `600`)
- `editor/src/Sprint35OperationalReadiness.h` (`54` <= `600`)
- Naming conventions and header-only module constraints remain aligned with `ARCHITECTURE.md`.