missions: phase-completion summary card (Claude Opus 4.8 synthesized)
New phase_summarizer background worker fires on any mission_phase
transition to a terminal state (completed/failed). Aggregates every
topology_runs.checkpoint.outputs[] + mission_tasks + mission_artifacts
bound to that phase and asks Claude Opus 4.8 to produce a structured
JSON card:
{ narrative, metrics, sources, tooling, next_actions }
Rendered inline on the mission page under each completed phase via
new PhaseSummaryCard component. Metrics grid is kind-specific:
research surfaces insights/sources/int_cards/artifacts, coding
surfaces cards_picked_up/commits/tests/issues, benchmark surfaces
regressions/improvements, security surfaces findings-by-severity.
New table: mission_phase_summaries (migration 0060), unique per
phase_id — regenerates on retry.
New endpoint: GET /api/missions/{id}/phases/{phase_id}/summary.
Model overridable via CLAWMATES_SUMMARIZER_MODEL. Reuses the
ANTHROPIC_API_KEY prod already carries for mission_refiner.
This commit is contained in:
@@ -293,6 +293,10 @@ async fn run() -> Result<(), String> {
|
||||
// runtime containers 30 min after the mission reaches a terminal
|
||||
// state so operators have a window to pull final artifacts.
|
||||
cm_api::mission_runtime::spawn_sweeper(pool.clone(), std::time::Duration::from_secs(30 * 60));
|
||||
// Phase completion summarizer: reads terminal-state phases and
|
||||
// asks Claude Opus 4.8 to synthesize a "what got done" card that
|
||||
// the UI renders under the phase.
|
||||
cm_api::phase_summarizer::spawn(pool.clone());
|
||||
// PDF renderer worker (Slice 6): watches mission_artifacts for
|
||||
// MD entries with render_pdf_status='pending', calls the
|
||||
// configured LLM (default Gemini 2.5 Flash) for styled HTML,
|
||||
|
||||
Reference in New Issue
Block a user