feat(shipote): collision detection + stats history server-side (fase O)
- Flow socket names usan pipeline_id full (ULID 26 chars) + edge_idx. Cero colisiones entre pipelines (ULID es único global). Fallback con suffix -N si el path existe (cap 1000 retries). - WorkspaceState.stats_history (VecDeque cap 64) — workspace_stats appendea cada call. API workspace_stats_history(id, tail). Protocol WorkspaceStatsHistory. Shell pide history al primer probe → sparkline hidratada al boot, sobrevive restart del shell. 84 tests pasan (ente-incarnate 16, nouser-core 27, shipote-card 8, shipote-core 25, shipote-discern 5, yahweh-provider-fs 3). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -110,6 +110,14 @@ pub enum Request {
|
||||
/// Reporte de quotas (rlimits declarados vs uso actual).
|
||||
WorkspaceQuota { workspace: shipote_card::WorkspaceId },
|
||||
|
||||
/// History de samples del workspace (server-side). Sobrevive
|
||||
/// restart del shell. `tail`: cantidad de samples desde el final
|
||||
/// (0 = todo).
|
||||
WorkspaceStatsHistory {
|
||||
workspace: shipote_card::WorkspaceId,
|
||||
tail: usize,
|
||||
},
|
||||
|
||||
/// Resumen completo de un workspace: stats + quota + commands +
|
||||
/// flow sockets en una sola roundtrip. Reduce N×4 requests del
|
||||
/// shell a N×1.
|
||||
@@ -210,6 +218,10 @@ pub enum Response {
|
||||
info: QuotaReportInfo,
|
||||
},
|
||||
|
||||
WorkspaceStatsHistory {
|
||||
samples: Vec<WorkspaceStatsInfo>,
|
||||
},
|
||||
|
||||
WorkspaceFullSummary {
|
||||
stats: WorkspaceStatsInfo,
|
||||
quota: QuotaReportInfo,
|
||||
|
||||
Reference in New Issue
Block a user