Skip to content

Activity tab + Bolts intent picker#86

Open
dnapoleon wants to merge 1 commit into
fabriqaai:mainfrom
dnapoleon:feature/bolts-intent-picker
Open

Activity tab + Bolts intent picker#86
dnapoleon wants to merge 1 commit into
fabriqaai:mainfrom
dnapoleon:feature/bolts-intent-picker

Conversation

@dnapoleon

@dnapoleon dnapoleon commented Jun 9, 2026

Copy link
Copy Markdown

Take it or leave it. I needed a more organized way to see it.

Summary

  • New Activity tab split out of the Bolts tab as a peer (Activity → Bolts → Specs → Overview). Fills the whole pane; resize handle and persisted height removed.
  • Intent picker on the Bolts tab replaces the static "Current/Next Intent" display. Dropdown lists every intent in the workspace; backend-active intent marked (current). Selection is in-session, not persisted across reloads.
  • Per-intent progress bar — percent complete and breakdown (in-progress / queued / blocked) now reflect only the selected intent. Backend computes stats from the full bolt arrays so older completions still count.
  • Filtered Up Next — only queued/blocked bolts for the selected intent.
  • Filtered Completions (now titled "Completions") — only completions for the selected intent. Removed the global 10-completion cap so per-intent lists are accurate. Globally-recent completions remain available via the Activity tab.
  • Styling tweaks — smaller picker font (12px / 600), inner container with 4px breathing room around the picker + progress block, removed the orange top border on the Bolts tab for consistency with sibling tabs.

Backend plumbing

  • QueuedBoltData, ActiveBoltData, CompletedBoltData each gained intent, intentNumber, intentName fields, resolved by matching the bolt's raw intent string against state.intents by number, name, combined \${number}-\${name}, and folder basename (covers full-folder-name conventions like 007-platform-tenant-access).
  • boltsData postMessage payload now includes boltIntents: { number, name }[] and intentStats: Record<string, BoltStats>.
  • Webview app.ts splits the legacy activity fields off the incoming bolts payload into dedicated state used by the Activity tab.

Test plan

  • `npm run compile` clean (extension + webview)
  • `npm test` — all 412 tests pass
  • F5 the extension against a real workspace and confirm:
    • Tab order is Activity, Bolts, Specs, Overview
    • Activity tab fills the pane; filter + open-file still work
    • Bolts tab has the intent dropdown; current intent is marked (current)
    • Switching intents updates the progress bar, Up Next, and Completions consistently
    • Intents with only old completed bolts (pushed past the previous 10-cap) now show accurate progress

🤖 Generated with Claude Code

…p of the tab bar

- New tab order: Activity → Bolts → Specs → Overview
- Activity tab fills the whole pane (removed the resizable bottom strip and persisted height)
- Bolts tab's scrollable content now extends to the bottom of the pane

Intent picker on the Bolts tab — replaces the "Current/Next Intent" display
- Dropdown lists every intent in the workspace; backend-active intent is marked (current)
- Selecting an intent updates the view immediately (in-session, no persistence across reloads)
- Default selection on first load is the backend's current/queued intent

Per-intent progress bar
- Percent complete now reflects only the selected intent (done / total bolts for this intent)
- Backend computes per-intent stats from the full bolt arrays (before display truncation), so older completions still count
- Breakdown line ("X in progress, Y queued, Z blocked") is also scoped to the selected intent

Filtered Up Next — shows only queued/blocked bolts belonging to the selected intent

Filtered Completions (now titled just "Completions")
- Shows completed bolts for the selected intent
- Removed the global 10-completion cap on the backend so per-intent lists are accurate
- Globally-recent completions are still available in the Activity tab

Styling tweaks on the picker
- Smaller dropdown font (12px / 600 weight)
- Inner <div class="container"> adds 4px of breathing room around the picker + progress block
- Removed the orange top border on the Bolts tab for visual consistency with other tabs

Backend plumbing
- QueuedBoltData, ActiveBoltData, CompletedBoltData each gained intent, intentNumber, intentName fields, resolved by looking the bolt's raw intent string up against state.intents (matches against number, name, combined ${number}-${name}, and folder basename — covers SAMX's full-folder-name convention)
- boltsData postMessage payload now includes boltIntents: { number, name }[] and intentStats: Record<string, BoltStats>
- Webview app.ts splits activity fields off the incoming bolts payload into dedicated state used by the Activity tab

Tests — fixture objects in webviewMessaging.test.ts and webviewProvider.test.ts updated to include the new fields; all 412 tests pass.
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.

1 participant