Repository navigation
v0.2.0-beta.1 - Internal Beta
This release advances Suboculo from event logging toward task-level reliability analysis for internal beta usage.
Highlights
- Attempt-based task runs
- Task runs are now derived as attempts, not one perpetual run per root session.
- Attempt boundaries are inferred from:
- session.start
- post-session.end continuation
- inactivity gap (45 minutes)
- Active runs without explicit session.end remain running (no false completed).
- Outcome semantics enforcement
- Structured outcome taxonomy is now enforced on write:
- evaluation_type
- outcome_label
- failure_mode
- failure_subtype
- Backend rejects invalid or inconsistent outcome payloads.
- New taxonomy metadata endpoint supports controlled UI forms.
- Structured outcome taxonomy is now enforced on write:
- Outcome analytics
- Added summary API for task run outcomes with aggregate breakdowns by:
- outcome label
- failure mode
- failure subtype
- evaluation type
- Added filterable Task Runs views for canonical outcome and intervention-related analysis.
- Added summary API for task run outcomes with aggregate breakdowns by:
- Attempt-aware event exploration
- Events API now supports filtering by attempt key.
- Events UI includes an Attempt filter and displays attempt context per event.
Reliability/Data quality improvements
- Claude Code session.start capture now prioritizes hook payload session_id over environment-only fallback, reducing null session IDs.
- Derivation logic ignores malformed session.start without concrete session identity for attempt boundary splitting.
Operational additions
- Added optional cleanup utility for legacy run model rows:
- npm --prefix backend run cleanup:legacy-runs
- removes task_runs with source='derived_session' after migration to attempt model.
Validation status
- Backend smoke suite: passing
- Frontend production build: passing
- Syntax checks: passing
Compatibility note
- Existing historical data is preserved.
- Attempt model is now the canonical source for new task-run analysis (source='derived_attempt').
- Legacy rows may remain until optional cleanup is run.