feat(recovery,context): tier-2 intent-holder arbiter + remaining-delta pinning + surfaced signal events

- recovery: two-tier repair ladder — owner then arbiter (recovery stage recast
  as intent-holder, holds initial intent, reconciles cross-file contract disputes)
  with independent INTENT_ROUTE_BUDGET; RecoveryRoutingTest coverage
- context: remaining-delta checklist pinning (RemainingDelta{Pinning,Entry}Test)
- surface write-only events (session name, quality signals) into stats/browse
- parseToolArguments lenient-Json fallback for bare-key drift
- tools: ChildProcess seam
This commit is contained in:
2026-07-11 23:56:52 +04:00
parent 3d5e05c1fb
commit 15248cae8a
55 changed files with 1932 additions and 231 deletions
+7 -1
View File
@@ -16,6 +16,7 @@ import (
type SessionSummary struct {
SessionID string `json:"sessionId"`
Status string `json:"status"`
Name string `json:"name"`
Intent string `json:"intent"`
WorkflowID string `json:"workflowId"`
StageCount int `json:"stageCount"`
@@ -222,7 +223,12 @@ func (m Model) sessionListRow(i int) string {
statusCell := lipgloss.NewStyle().Foreground(statusColor(t, s.Status)).Background(t.P.BgPanel).Bold(true).
Render(padRaw(statusLabel(s.Status), 9))
stage := s.WorkflowID
// Prefer the human session name (SessionNamedEvent, intent-derived) over the raw
// workflow id — it's what the operator recognizes a session by.
stage := s.Name
if stage == "" {
stage = s.WorkflowID
}
if s.StageCount > 0 {
stage += " ·" + itoa(s.StageCount) + "stg"
}