Skip to content

feat(fleet-metrics): add autonomous fleet metrics dashboard page - #29

Merged
ErikBjare merged 1 commit into
masterfrom
feat/fleet-metrics-dashboard
Aug 3, 2026
Merged

ErikBjare merged 1 commit into
masterfrom
feat/fleet-metrics-dashboard

Conversation

@TimeToBuildBob

Copy link
Copy Markdown
Owner

Summary

  • Adds /fleet-metrics/ static dashboard page showing Bob's fleet-level metrics over the last 30 days
  • Self-contained HTML (no external dependencies) generated from state/sessions/sessions.db
  • Shows: session volume/day, productive rate, deliverables count, avg quality score, and model×harness productivity breakdown

What's on the page

Headline tiles — 30-day totals: sessions, productive %, deliverables, avg quality score

Sessions/day bar chart — daily session count (light blue) with productive overlay (green) and quality score trend line (indigo)

Model × harness table — productivity rate and LLM judge score per model+harness combination, colored by harness (blue=claude-code, amber=codex, green=gptme)

Generator

Lives in the brain repo at scripts/generate-fleet-metrics-dashboard.py. Regenerate with:

python3 /home/bob/bob/scripts/generate-fleet-metrics-dashboard.py generate

The script queries state/sessions/sessions.db directly — no manual numbers, no hardcoded values.

Why

A live, data-backed public dashboard of fleet metrics is a differentiated artifact that demonstrates capability rather than describing it. Distinguishes this project from the typical "AI blog post" pattern.

Static HTML dashboard showing Bob's fleet-level metrics over the last 30 days:
- Headline stat tiles (sessions, productive rate, deliverables, quality score)
- Sessions/day bar chart with productive overlay and quality score trend
- Model × harness productivity table (prod rate + LLM judge score per combo)

Generated by scripts/generate-fleet-metrics-dashboard.py reading from
state/sessions/sessions.db. Regenerate with:
  python3 /home/bob/bob/scripts/generate-fleet-metrics-dashboard.py generate
@ErikBjare
ErikBjare merged commit 0151ff8 into master Aug 3, 2026
1 check passed
@ErikBjare

Copy link
Copy Markdown
Collaborator

@TimeToBuildBob I merged it, but seems like nothing updates it?

@TimeToBuildBob

Copy link
Copy Markdown
Owner Author

Fixed the missing update path. The page was generated once for the PR, but nothing scheduled or published subsequent snapshots.

I wired it into the existing daily dashboard timer (bob-session-cost-dashboard.timer): it now regenerates fleet-metrics/index.html, publishes both dashboards from an isolated website worktree, and retries push races. I ran the full service manually and verified:

The durable fix is in brain commit 9da7bca979.

@ErikBjare

Copy link
Copy Markdown
Collaborator

@TimeToBuildBob It looks okay I guess, but it reduces all GPT-5.6 versions (luna, terra, sol) into just "5.6" and for DeepSeek flash and pro variants into a single "DeepSeek V4".

@TimeToBuildBob

Copy link
Copy Markdown
Owner Author

Fixed in brain commit 76d87265bb. The model labels now preserve variant names:

  • GPT-5.6-sol, GPT-5.6-terra, GPT-5.6-luna each show distinctly (arm suffix preserved)
  • DeepSeek V4 Flash and DeepSeek V4 Pro are labeled separately
  • Two API routes for the same arm (e.g. direct vs openrouter deepseek-flash) are merged into one row rather than appearing as duplicates

Updated page at https://timetobuildbob.com/fleet-metrics/

@ErikBjare

Copy link
Copy Markdown
Collaborator

@TimeToBuildBob From it:

Harness:Model 	Productive rate 	% 	Score 	Sessions
claude-code:Sonnet 4.6 	
	87.0% 	0.55 	4,101
gptme:GPT-5.6-sol (sub) 	
	79.5% 	— 	806
claude-code:Haiku 4.5 	
	98.9% 	— 	555
gptme:GPT-5.6-sol 	
	90.4% 	0.55 	385
codex:GPT-5.5 	
	98.4% 	0.51 	380
codex:GPT-5.4 	
	96.0% 	0.52 	199
gptme:DeepSeek V4 Flash 	
	73.2% 	0.46 	183
claude-code:Haiku (old) 	
	82.2% 	0.53 	135
claude-code:Sonnet (old) 	
	100.0% 	— 	66
codex:GPT-5.6-sol 	
	68.8% 	0.46 	64
claude-code:Fable 5 	
	98.4% 	0.70 	63
gptme:GPT-5.5 	
	76.2% 	0.53 	63

What's up with the — scores? Should be fixed.

TimeToBuildBob added a commit that referenced this pull request Aug 3, 2026
Monitoring and project-monitoring sessions are never LLM-judged by design.
Including them produced misleading '—' quality score rows for models like
claude-code:Haiku 4.5 and gptme:GPT-5.6-sol (sub) that only run as PM slots.
Now filtering to autonomous/worker/operator/etc. — only sessions where
llm_judge_score can be populated.

Fixes the '—' scores Erik flagged in PR #29.
@TimeToBuildBob

Copy link
Copy Markdown
Owner Author

Fixed. Root cause: the model×harness table was including all run types, but monitoring/PM sessions are never LLM-judged by design — haiku-4-5 and openai-subscription/gpt-5.6-sol are used exclusively as PM slots, so they had hundreds of sessions with no quality scores.

Added a run_type exclusion filter to the SQL query (monitoring, project-monitoring, email, voice-post-call, etc.). Only autonomous/worker/operator sessions remain in the table — the ones that actually receive llm_judge_score.

Generator fix: brain 25e64a05fe, live on the site now (aceae4f).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants