Sprint 65: Parallel Pair Upgrades and Queue Optimization — Steps 879-888

Implements priority-aware pair-upgrade queue with starvation prevention:
- PairUpgradeQueue: enqueue/dequeue/getActive sorted by priority (step 879)
- UpgradePriorityPolicy: critical/revenue/coverage/experimental classes (step 880)
- ParallelDispatchOptimizer: schedule N pairs with blocked-pair constraints (step 881)
- StarvationPrevention: detect and promote starved pairs (step 882)
- QueueHealthScorer: stall-rate-based health scoring (step 883)
- RetryBackoffStrategy: exponential backoff with max-attempts guard (step 884)
- whetstone_enqueue_pair_upgrade MCP tool (step 885)
- whetstone_get_upgrade_queue MCP tool with priority sorting (step 886)
- UpgradeQueueObservabilityPanel: snapshot model for queue visibility (step 887)
- Sprint65IntegrationSummary (step 888)

All 10 steps passing (94 tests). Routing rule: critical-tier regressions
preempt all experimental upgrades.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Bill
2026-02-22 18:58:04 -07:00
parent 484d9e3f8c
commit 0282e7ebb7
22 changed files with 932 additions and 0 deletions

View File

@@ -7405,3 +7405,44 @@ target_link_libraries(step877_test PRIVATE nlohmann_json::nlohmann_json unoffici
add_executable(step878_test tests/step878_test.cpp)
target_include_directories(step878_test PRIVATE src)
target_link_libraries(step878_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)
# Sprint 65: Parallel Pair Upgrades and Queue Optimization (Steps 879-888)
add_executable(step879_test tests/step879_test.cpp)
target_include_directories(step879_test PRIVATE src)
target_link_libraries(step879_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)
add_executable(step880_test tests/step880_test.cpp)
target_include_directories(step880_test PRIVATE src)
target_link_libraries(step880_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)
add_executable(step881_test tests/step881_test.cpp)
target_include_directories(step881_test PRIVATE src)
target_link_libraries(step881_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)
add_executable(step882_test tests/step882_test.cpp)
target_include_directories(step882_test PRIVATE src)
target_link_libraries(step882_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)
add_executable(step883_test tests/step883_test.cpp)
target_include_directories(step883_test PRIVATE src)
target_link_libraries(step883_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)
add_executable(step884_test tests/step884_test.cpp)
target_include_directories(step884_test PRIVATE src)
target_link_libraries(step884_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)
add_executable(step885_test tests/step885_test.cpp)
target_include_directories(step885_test PRIVATE src)
target_link_libraries(step885_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)
add_executable(step886_test tests/step886_test.cpp)
target_include_directories(step886_test PRIVATE src)
target_link_libraries(step886_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)
add_executable(step887_test tests/step887_test.cpp)
target_include_directories(step887_test PRIVATE src)
target_link_libraries(step887_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)
add_executable(step888_test tests/step888_test.cpp)
target_include_directories(step888_test PRIVATE src)
target_link_libraries(step888_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)