Step 523: add sprint 26 integration summary and closure gate
This commit is contained in:
@@ -3586,4 +3586,13 @@ target_link_libraries(step522_test PRIVATE
|
||||
tree_sitter_javascript tree_sitter_typescript
|
||||
tree_sitter_java tree_sitter_rust tree_sitter_go)
|
||||
|
||||
add_executable(step523_test tests/step523_test.cpp)
|
||||
target_include_directories(step523_test PRIVATE src)
|
||||
target_link_libraries(step523_test PRIVATE
|
||||
nlohmann_json::nlohmann_json
|
||||
unofficial::tree-sitter::tree-sitter
|
||||
tree_sitter_python tree_sitter_cpp tree_sitter_elisp
|
||||
tree_sitter_javascript tree_sitter_typescript
|
||||
tree_sitter_java tree_sitter_rust tree_sitter_go)
|
||||
|
||||
# Step 12: Dear ImGui shell scaffolding created (main.cpp exists but not built due to dependencies)
|
||||
|
||||
90
editor/src/Sprint26IntegrationSummary.h
Normal file
90
editor/src/Sprint26IntegrationSummary.h
Normal file
@@ -0,0 +1,90 @@
|
||||
#pragma once
|
||||
// Step 523: Sprint 26 Integration + Summary
|
||||
|
||||
#include "Phase26aIntegration.h"
|
||||
#include "ThemeTokenSystemV2.h"
|
||||
#include "SignatureVisualIdentity.h"
|
||||
#include "ControlLibraryRestyle.h"
|
||||
#include "IconTypographyHarmonizer.h"
|
||||
#include "ModifierEdgeNotation.h"
|
||||
#include "CompletionOverlayUXHardening.h"
|
||||
#include "NotificationStatusRefresh.h"
|
||||
#include "CrossPanelConsistencySweep.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
struct Sprint26Summary {
|
||||
bool phase26aPass = false;
|
||||
bool tokenSystemPass = false;
|
||||
bool visualIdentityPass = false;
|
||||
bool controlsPass = false;
|
||||
bool typographyPass = false;
|
||||
bool modifierEdgePass = false;
|
||||
bool overlayPass = false;
|
||||
bool notificationPass = false;
|
||||
bool panelConsistencyPass = false;
|
||||
bool sprintPass = false;
|
||||
std::vector<std::string> notes;
|
||||
};
|
||||
|
||||
class Sprint26IntegrationSummary {
|
||||
public:
|
||||
static Sprint26Summary build() {
|
||||
Sprint26Summary s;
|
||||
|
||||
auto p26a = Phase26aIntegration::run();
|
||||
s.phase26aPass = p26a.pass;
|
||||
|
||||
auto tokens = ThemeTokenSystemV2::baseBlackStone();
|
||||
s.tokenSystemPass = ThemeTokenSystemV2::validateAA(tokens) &&
|
||||
!ThemeTokenSystemV2::hasHardcodedPurple(tokens);
|
||||
|
||||
auto grad = SignatureVisualIdentity::blackSurfaceGradient(true);
|
||||
auto link = SignatureVisualIdentity::electricBlueLink(true, 0.2f);
|
||||
s.visualIdentityPass = grad.size() == 3 &&
|
||||
SignatureVisualIdentity::isElectricBlue(link);
|
||||
|
||||
auto idle = ControlLibraryRestyle::styleFor(ControlKind::Button, 1.0f, false);
|
||||
auto pressed = ControlLibraryRestyle::styleFor(ControlKind::Button, 1.0f, true);
|
||||
s.controlsPass = ControlLibraryRestyle::hasClearPressedSignal(idle, pressed) &&
|
||||
ControlLibraryRestyle::validContrast(idle);
|
||||
|
||||
auto ty = IconTypographyHarmonizer::darkSurfaceTypography(1.0f);
|
||||
auto ic = IconTypographyHarmonizer::iconProfileFor(1.0f, false);
|
||||
s.typographyPass = IconTypographyHarmonizer::harmonized(ty, ic);
|
||||
|
||||
auto glyph = ModifierEdgeNotation::buildGlyph('P', true, true, false, false, true);
|
||||
s.modifierEdgePass = ModifierEdgeNotation::activeEdgeCount(glyph.edges) == 2 &&
|
||||
glyph.fallbackText == "Ctrl+Shift+P";
|
||||
|
||||
CompletionOverlayState overlay;
|
||||
overlay.dismissed = true;
|
||||
overlay.lastTriggerToken = "foo";
|
||||
auto reopened = CompletionOverlayUXHardening::onTrigger(overlay, "bar", false);
|
||||
s.overlayPass = reopened.visible && !reopened.dismissed;
|
||||
|
||||
auto noteStyle = NotificationStatusRefresh::styleFor(NotifyLevel::Critical);
|
||||
s.notificationPass = noteStyle.defaultDurationMs == 0.0f &&
|
||||
NotificationStatusRefresh::readable(noteStyle);
|
||||
|
||||
PanelVisualContract base{"base", 12, 6, 1, "v2", "v2"};
|
||||
std::vector<PanelVisualContract> panels = {
|
||||
{"explorer", 12, 6, 1, "v2", "v2"},
|
||||
{"editor", 12, 6, 1, "v2", "v2"},
|
||||
{"status", 12, 6, 1, "v2", "v2"}
|
||||
};
|
||||
auto sweep = CrossPanelConsistencySweep::run(panels, base);
|
||||
s.panelConsistencyPass = sweep.pass;
|
||||
|
||||
s.sprintPass = s.phase26aPass && s.tokenSystemPass && s.visualIdentityPass &&
|
||||
s.controlsPass && s.typographyPass && s.modifierEdgePass &&
|
||||
s.overlayPass && s.notificationPass && s.panelConsistencyPass;
|
||||
|
||||
s.notes.push_back("Sprint 26 integration summary generated");
|
||||
s.notes.push_back(s.sprintPass
|
||||
? "Sprint 26 complete: UX foundations, visual language, and hardening gates pass"
|
||||
: "Sprint 26 incomplete: one or more integration gates failed");
|
||||
return s;
|
||||
}
|
||||
};
|
||||
92
editor/tests/step523_test.cpp
Normal file
92
editor/tests/step523_test.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
// Step 523: Sprint 26 Integration + Summary (8 tests)
|
||||
|
||||
#include "Sprint26IntegrationSummary.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
static int passed = 0, failed = 0;
|
||||
#define TEST(name) { std::cout << " " << #name << "... "; }
|
||||
#define PASS() { std::cout << "PASS\n"; ++passed; }
|
||||
#define FAIL(msg) { std::cout << "FAIL: " << msg << "\n"; ++failed; }
|
||||
#define CHECK(cond, msg) if (!(cond)) { FAIL(msg); return; } else {}
|
||||
|
||||
static Sprint26Summary runNow() {
|
||||
return Sprint26IntegrationSummary::build();
|
||||
}
|
||||
|
||||
void test_phase26a_gate_passes() {
|
||||
TEST(phase26a_gate_passes);
|
||||
auto s = runNow();
|
||||
CHECK(s.phase26aPass, "phase 26a should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_visual_system_gates_pass() {
|
||||
TEST(visual_system_gates_pass);
|
||||
auto s = runNow();
|
||||
CHECK(s.tokenSystemPass, "token system should pass");
|
||||
CHECK(s.visualIdentityPass, "visual identity should pass");
|
||||
CHECK(s.controlsPass, "control restyle should pass");
|
||||
CHECK(s.typographyPass, "typography harmonization should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_modifier_edge_system_passes() {
|
||||
TEST(modifier_edge_system_passes);
|
||||
auto s = runNow();
|
||||
CHECK(s.modifierEdgePass, "modifier-edge system should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_overlay_hardening_passes() {
|
||||
TEST(overlay_hardening_passes);
|
||||
auto s = runNow();
|
||||
CHECK(s.overlayPass, "overlay hardening should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_notification_refresh_passes() {
|
||||
TEST(notification_refresh_passes);
|
||||
auto s = runNow();
|
||||
CHECK(s.notificationPass, "notification refresh should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_panel_consistency_passes() {
|
||||
TEST(panel_consistency_passes);
|
||||
auto s = runNow();
|
||||
CHECK(s.panelConsistencyPass, "panel consistency should pass");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_sprint_pass_flag_true() {
|
||||
TEST(sprint_pass_flag_true);
|
||||
auto s = runNow();
|
||||
CHECK(s.sprintPass, "sprint pass flag should be true");
|
||||
PASS();
|
||||
}
|
||||
|
||||
void test_notes_include_completion_statement() {
|
||||
TEST(notes_include_completion_statement);
|
||||
auto s = runNow();
|
||||
CHECK(s.notes.size() >= 2, "expected summary notes");
|
||||
CHECK(s.notes[1].find("Sprint 26") != std::string::npos,
|
||||
"expected Sprint 26 completion statement");
|
||||
PASS();
|
||||
}
|
||||
|
||||
int main() {
|
||||
std::cout << "Step 523: Sprint 26 Integration + Summary\n";
|
||||
|
||||
test_phase26a_gate_passes(); // 1
|
||||
test_visual_system_gates_pass(); // 2
|
||||
test_modifier_edge_system_passes(); // 3
|
||||
test_overlay_hardening_passes(); // 4
|
||||
test_notification_refresh_passes(); // 5
|
||||
test_panel_consistency_passes(); // 6
|
||||
test_sprint_pass_flag_true(); // 7
|
||||
test_notes_include_completion_statement(); // 8
|
||||
|
||||
std::cout << "\nResults: " << passed << "/" << (passed + failed) << " passed\n";
|
||||
return failed == 0 ? 0 : 1;
|
||||
}
|
||||
39
progress.md
39
progress.md
@@ -8489,3 +8489,42 @@ histograms and normalization helpers for rapid alignment.
|
||||
- `editor/src/CrossPanelConsistencySweep.h` within header-size limit (`81` <= `600`)
|
||||
- `editor/tests/step522_test.cpp` within test-file size guidance (`152` lines)
|
||||
- Header-only architecture and naming conventions remain aligned with `ARCHITECTURE.md`
|
||||
|
||||
### Step 523: Sprint 26 Integration + Summary
|
||||
**Status:** PASS (8/8 tests)
|
||||
|
||||
Implements the Sprint 26 closure gate by integrating Phase 26a reliability,
|
||||
visual token + identity systems, control/typography harmonization,
|
||||
modifier-edge shortcuts, overlay hardening, notification semantics, and
|
||||
cross-panel consistency into a single summary signal.
|
||||
|
||||
**Files added:**
|
||||
- `editor/src/Sprint26IntegrationSummary.h` - sprint integration summary module:
|
||||
- aggregates Step 514-522 validation signals
|
||||
- computes final Sprint 26 pass flag
|
||||
- emits Sprint completion summary notes
|
||||
- `editor/tests/step523_test.cpp` - 8 tests covering:
|
||||
- phase and domain gate pass signals
|
||||
- final sprint pass synthesis
|
||||
- completion-note emission
|
||||
|
||||
**Files modified:**
|
||||
- `editor/CMakeLists.txt` - `step523_test` target
|
||||
|
||||
**Verification run:**
|
||||
- `cmake -S editor -B editor/build-native` - PASS
|
||||
- `cmake --build editor/build-native --target step523_test` - PASS
|
||||
- `./editor/build-native/step523_test` - PASS (8/8)
|
||||
- `./editor/build-native/step522_test` - PASS (12/12) regression coverage
|
||||
|
||||
**Architecture gate check:**
|
||||
- `editor/src/Sprint26IntegrationSummary.h` within header-size limit (`90` <= `600`)
|
||||
- `editor/tests/step523_test.cpp` within test-file size guidance (`92` lines)
|
||||
- Header-only architecture and naming conventions remain aligned with `ARCHITECTURE.md`
|
||||
|
||||
**Sprint 26 totals (509-523):**
|
||||
- **Steps completed:** 15
|
||||
- **New tests in this sprint plan:** 172/172 passing
|
||||
- **Phase 26a (509-514):** 68/68 passing
|
||||
- **Phase 26b (515-519):** 60/60 passing
|
||||
- **Phase 26c (520-523):** 44/44 passing
|
||||
|
||||
Reference in New Issue
Block a user