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:
@@ -54,6 +54,18 @@ data class TierApprovalStatsDto(
|
||||
val avgWaitMs: Long,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class QualityStatsDto(
|
||||
val sourceFetches: Long = 0,
|
||||
val lowQualityExtractions: Long = 0,
|
||||
val extractionQualityRate: Double = 1.0,
|
||||
val retrievedHits: Long = 0,
|
||||
val droppedHits: Long = 0,
|
||||
val retrievalPrecision: Double = 1.0,
|
||||
val briefDriftCount: Long = 0,
|
||||
val capabilityGapCount: Long = 0,
|
||||
)
|
||||
|
||||
@Serializable
|
||||
data class StatsReportDto(
|
||||
val sessionId: String,
|
||||
@@ -75,6 +87,7 @@ data class StatsReportDto(
|
||||
val avgApprovalWaitMs: Long = 0,
|
||||
val perTier: List<TierApprovalStatsDto> = emptyList(),
|
||||
val failures: FailureMetricsDto = FailureMetricsDto(),
|
||||
val quality: QualityStatsDto = QualityStatsDto(),
|
||||
val inferencePct: Double = 0.0,
|
||||
val toolPct: Double = 0.0,
|
||||
val approvalWaitPct: Double = 0.0,
|
||||
@@ -146,6 +159,17 @@ fun renderStats(report: StatsReportDto): String {
|
||||
"stage: ${f.stageFailures} workflow: ${f.workflowFailures}"
|
||||
lines += ""
|
||||
|
||||
val q = report.quality
|
||||
lines += "Signal quality"
|
||||
lines += " extraction: %d fetched, %d low-quality (%.0f%% clean)".format(
|
||||
Locale.ROOT, q.sourceFetches, q.lowQualityExtractions, q.extractionQualityRate * 100.0,
|
||||
)
|
||||
lines += " retrieval: %d kept, %d filtered (%.0f%% precision)".format(
|
||||
Locale.ROOT, q.retrievedHits, q.droppedHits, q.retrievalPrecision * 100.0,
|
||||
)
|
||||
lines += " brief drift: ${q.briefDriftCount} capability gaps: ${q.capabilityGapCount}"
|
||||
lines += ""
|
||||
|
||||
lines += "Time accounting (% of session wall time)"
|
||||
lines += " inference: %.1f%% tools: %.1f%% approval-wait: %.1f%% other: %.1f%%".format(
|
||||
Locale.ROOT,
|
||||
|
||||
Reference in New Issue
Block a user