Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
129 commits
Select commit Hold shift + click to select a range
591dc7a
Use indexed task thread lifecycle lookups
SawyerHood Sep 7, 2026
e752954
Fix project directory picker scroll reset (#3251)
ymichael Sep 8, 2026
081e2e3
Fix local Markdown images with shared preview and file-serving routin…
ymichael Sep 8, 2026
7eb9dd5
Fix branch picker empty-state spacing (#3252)
ymichael Sep 8, 2026
aabc61c
Share native and plugin question forms with compact interaction UI (#…
ymichael Sep 8, 2026
d5103c4
Use file icon for Files settings (#3256)
ymichael Sep 8, 2026
8db914a
Preserve reasoning summary and body after completion (#3109)
ymichael Sep 8, 2026
0628951
Keep late thinking on its originating history page (#3110)
ymichael Sep 8, 2026
c426b26
Make Theme Preview tooltip delay test deterministic (#3258)
ymichael Sep 8, 2026
e3b3c0f
Fix Docs table autosave jsdom geometry (#3259)
ymichael Sep 8, 2026
d2dc1cf
fix(pi): resume at requested cwd when the session's directory was rem…
fgrehm Sep 8, 2026
aa7d245
Keep rendered diff cards during refresh (#3255)
ymichael Sep 8, 2026
30ac8be
Preview palettes on hover in Settings → Appearance (#3108)
vznh Sep 8, 2026
e3456a4
fix(account-pool): isolate upstream connections from shared HTTP/2 se…
hemaaanth Sep 8, 2026
d9f2ac5
feat(app): repair incomplete streaming Markdown (#3193)
smsunarto Sep 8, 2026
e038786
Unify thinking rows and add a diagnostic events setting (#3250)
ymichael Sep 8, 2026
9ea8862
fix(account-pool): synchronize short-hold session retries (#3262)
ymichael Sep 8, 2026
8444c29
test(account-pool): bound affinity eviction coverage (#3270)
ymichael Sep 8, 2026
5f55895
Environment providers: plugins own where threads run (#3227)
ymichael Sep 8, 2026
426ed78
fix(host): contain proxy resets and distinguish reconnect interruptio…
SawyerHood Sep 8, 2026
0604728
fix(provider-pi): deliver dynamic tool results to Bun-based pi (#3095)
fgrehm Sep 8, 2026
be567d4
Display reasoning choices as wrapping pills (#3282)
SawyerHood Sep 8, 2026
f7d28f2
fix(provider-pi): surface Pi extension dialogs as answerable bb inter…
fgrehm Sep 8, 2026
cb3aaf5
Fix archiving of nested thread descendants (#3272)
ymichael Sep 8, 2026
8ed6c45
Remove the outer card from Plugin marketplaces (#3285)
ymichael Sep 8, 2026
51f4c92
Fix iOS link confirmation in Mobile E2E (#2938)
ymichael Sep 8, 2026
c3fcea1
Retain large event outputs, render generated images, and migrate lega…
ymichael Sep 8, 2026
ebe9d9d
Fix Codex subagent events leaking into the main feed (#3286)
SawyerHood Sep 8, 2026
31da836
Link needs-configuration banners to plugin settings (#3287)
ymichael Sep 8, 2026
e66989d
Make resource toolbars responsive on compact screens (#3288)
ymichael Sep 8, 2026
0bb45e7
Invoke selected Pi-native skills through native commands (#3253)
IlyaM Sep 8, 2026
0a1d73a
Retry transient desktop startup probes (#3293)
ymichael Sep 8, 2026
124cf2e
Make Machines row chevrons open machine details (#3294)
ymichael Sep 8, 2026
a57f0f5
Keep older timeline details expandable after late completions (#3291)
ymichael Sep 8, 2026
0c20f7a
Stabilize timed-out Codex construction cleanup (#3290)
ymichael Sep 8, 2026
c7e6b9d
Reject extra values passed to plugin config unset (#3298)
ymichael Sep 8, 2026
eaf8304
Clear stale compact panel selection on close (#3300)
ymichael Sep 8, 2026
18de6a3
fix(app): cancel debounced values on unmount (#3297)
ymichael Sep 8, 2026
d3311ee
Add a Projects settings page with drag reordering and a per-project d…
SawyerHood Sep 8, 2026
bb26b4f
Revalidate local Markdown images through the host daemon (#3295)
ymichael Sep 8, 2026
05b44c4
Stabilize provider installation deadline test (#3296)
ymichael Sep 8, 2026
dc99b8e
Restore stale on-demand diff loading (#3309)
ymichael Sep 8, 2026
69ce68b
Fix Account Pool dropping Codex replies from conversation history (#3…
ymichael Sep 8, 2026
4749527
Test Account Pool family failover after inline retry (#3308)
ymichael Sep 8, 2026
e45c8d5
Account Pooler: serve Codex over plain HTTPS and drop the WebSocket r…
SawyerHood Sep 9, 2026
a3ac7a5
feat: add controls for agent guidance and bundled skills (#3311)
SawyerHood Sep 9, 2026
ca72b97
Preview palettes on compact menu focus (#3315)
ymichael Sep 9, 2026
56a4e45
Narrow streaming directive bypass (#3316)
ymichael Sep 9, 2026
c44be73
Close streaming inline code before emphasis (#3317)
ymichael Sep 9, 2026
8b6172d
Bound compact environment picker labels (#3319)
ymichael Sep 9, 2026
8dea8d9
Add Account Pool usage refresh CLI (#3322)
ymichael Sep 9, 2026
cb61153
Avoid repeated Pi child startup in skill command tests (#3302)
ymichael Sep 9, 2026
5998d2e
Test Pi Bun delivery in packages CI (#3318)
ymichael Sep 9, 2026
6670944
Fix lost environment launch rechecks (#3320)
ymichael Sep 9, 2026
23c0b36
Report the active Account Pool blocking reset (#3324)
ymichael Sep 9, 2026
682f0d2
Apply later-turn provider environment to Pi and ACP (#3299)
ymichael Sep 9, 2026
06f0796
Show queued message senders (#3326)
ymichael Sep 9, 2026
eb12900
Show Account Pool usage limits on mobile (#3328)
ymichael Sep 9, 2026
1f4e9e5
Fix generated images in Codex, Account Pool, and thread history (#3327)
ymichael Sep 9, 2026
daed578
Mute finished failed tool rows in timeline (#3331)
ymichael Sep 9, 2026
4ae0a7c
Fix notification drawer mobile width (#3332)
ymichael Sep 9, 2026
3c524bf
Unify web Project settings and fix compact row layout (#3329)
ymichael Sep 9, 2026
210645b
Fix compact popover and menu content widths (#3343)
ymichael Sep 9, 2026
24a8e53
Approve MacHatter1 for pull requests (#3346)
SawyerHood Sep 9, 2026
46a1865
Show navigation chevrons on touch devices (#3344)
ymichael Sep 9, 2026
2d6146a
test(account-pool): isolate routing fixture from external I/O (#3345)
ymichael Sep 9, 2026
a86e829
Fix project and plugin startup races (#3183)
MacHatter1 Sep 9, 2026
e13605d
Fix scrolling in machine picker menus (#3347)
SawyerHood Sep 9, 2026
8be2be7
Fix model search icon overlap in plugin composers (#3349)
SawyerHood Sep 9, 2026
6b27e64
Use Discord and GitHub logos in Community settings (#3348)
ymichael Sep 9, 2026
0a2d412
Remove gap above plugin configuration banner (#3350)
ymichael Sep 9, 2026
b88f3c2
Improve image preview sizing and lightbox support (#3351)
ymichael Sep 9, 2026
4ef10c0
Add plugin settings loading skeleton (#3353)
ymichael Sep 9, 2026
8acdb4a
Show environment picker loading state (#3354)
ymichael Sep 9, 2026
3ee01ae
Add server-backed UI preference registry with revisioned writes (#3303)
SawyerHood Sep 9, 2026
f5b9fe7
Sync sidebar organization, ordering, and navigation preferences throu…
SawyerHood Sep 9, 2026
eccf01e
Sync collapsed sidebar rows and sections through the server (#3305)
SawyerHood Sep 9, 2026
2027003
Fix iOS message sending and touch latency (#3356)
SawyerHood Sep 9, 2026
0b4115a
Share host response test fixtures (#3360)
ymichael Sep 9, 2026
4ed2743
Preserve thread title pills in narrow sidebars and headers (#3361)
brsbl Sep 9, 2026
3948232
Quiet the sidebar plugin loading state (#3364)
SawyerHood Sep 9, 2026
47d46b4
Approve noih to contribute pull requests (#3365)
SawyerHood Sep 9, 2026
35f2d32
Keep background remote refreshes from prompting for credentials (#2738)
noih Sep 9, 2026
2e5f34b
fix(browser-automation): launch owned Chrome with --no-sandbox (#3367)
SawyerHood Sep 9, 2026
7ac21e3
Deflake Account Pool kebab action test (#3368)
ymichael Sep 9, 2026
9f99314
Preserve overlapping thread provisioning advances (#3355)
ymichael Sep 9, 2026
9697f34
Import cookies from installed browsers into the BB browser (#3366)
SawyerHood Sep 9, 2026
1685147
Compact reasoning controls in the model picker (#3363)
brsbl Sep 9, 2026
3bf69b9
Remove plugin sidebar startup loading placeholders (#3373)
SawyerHood Sep 10, 2026
56549ba
Fix desktop browser discovery for remote servers (#3374)
SawyerHood Sep 10, 2026
f4b82af
Adjust model reasoning with Left and Right arrow keys (#3376)
SawyerHood Sep 10, 2026
cb74e89
Use shared dialogs for Account Pooler panels (#3377)
SawyerHood Sep 10, 2026
1854189
Keep browser automation reveals in the focused thread (#3378)
SawyerHood Sep 10, 2026
6473370
Guard client fork eligibility with source archive state (#3379)
bb-slop-cop[bot] Sep 10, 2026
04f4e6a
Make error toasts readable and keep notification details open (#3372)
ymichael Sep 10, 2026
a315e16
Include hidden entries in host file listings with server-owned exclus…
andrewkchan Sep 10, 2026
cb8d716
Balance Machines list padding (#3391)
ymichael Sep 10, 2026
fb328d6
Attach provisioning environments before setup (#3392)
ymichael Sep 10, 2026
40ed14c
Defer environment availability checks to thread creation (#3393)
ymichael Sep 10, 2026
1bc80e1
Split Plugins and Skills into separate workspaces (#3384)
brsbl Sep 10, 2026
1cf7dd0
Emit pending events for committed plugin interactions (#3398)
bb-slop-cop[bot] Sep 10, 2026
be0e155
Prevent handled title events from submitting through the dialog short…
bb-slop-cop[bot] Sep 10, 2026
8ac123f
Keep project header controls visible on touch screens (#3352)
bb-slop-cop[bot] Sep 10, 2026
e352bf4
Restore Installed plugins in Settings alongside Plugins (#3416)
SawyerHood Sep 10, 2026
e08fdbd
Keep reasoning controls reachable in mobile model picker (#3417)
ymichael Sep 10, 2026
f07f230
Fix stray tooltips after touch drawer dismissal (#3419)
ymichael Sep 10, 2026
6dd0651
Prevent touch submit from starting voice input (#3420)
ymichael Sep 10, 2026
a8a084a
Keep environment picker open during composer updates (#3421)
ymichael Sep 10, 2026
126888f
Prevent terminal backpressure from blocking service logs (#3394)
ymichael Sep 10, 2026
cac2d51
Persist follow-up reasoning through the model override path (#3267)
bb-slop-cop[bot] Sep 10, 2026
53262cd
Simplify Account Pooler sign-in dialog (#3423)
ymichael Sep 10, 2026
c155224
Ship message editing as a standard feature (#3424)
ymichael Sep 10, 2026
deab88c
Remove unused Claude idle process setting (#3425)
ymichael Sep 10, 2026
8d2a028
Fix timeline pagination with snapshot-bound conversation groups (#3325)
ymichael Sep 10, 2026
74d3603
Reduce event-history query work and bound cleanup batches (#3427)
ymichael Sep 10, 2026
a8181f5
Advertise the Linux desktop app on the landing page (#3426)
SawyerHood Sep 10, 2026
e02f6e6
Fix Docs vault loading with complete host records (#3428)
SawyerHood Sep 10, 2026
de93612
Unify thread-list header actions and nested view controls (#3402)
brsbl Sep 10, 2026
839ceef
Move threads between sidebar sections from row actions (#2887)
brsbl Sep 10, 2026
459e9f1
Fix slow file mentions by pruning Git-ignored paths (#3430)
ymichael Sep 10, 2026
10bacbc
Skip pnpm install in env setup when node_modules already matches (#3433)
SawyerHood Sep 10, 2026
b28e99a
Accept Ctrl+Enter as the modifier submit shortcut on non-Mac keyboard…
SawyerHood Sep 10, 2026
2efc051
Show cached Account Pooler usage while status loads (#3440)
SawyerHood Sep 10, 2026
c02aa6f
Probe environment provider availability per machine in the background…
SawyerHood Sep 10, 2026
7ba69eb
Preview thread-storage and Markdown artifacts inline (#3439)
SawyerHood Sep 10, 2026
b54ffb2
Fix command palette IME key handling (#3415)
kongenpei Sep 10, 2026
f41d564
fix(app): register custom themes before starting diff workers (#3111)
smsunarto Sep 10, 2026
b89d9ab
Verify indexed Tasks lifecycle queries and fan-out
ymichael Sep 10, 2026
beda4d2
Merge remote-tracking branch 'origin/slopcop/issue-3210' into bb/revi…
ymichael Sep 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
38 changes: 36 additions & 2 deletions .bb-env-setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,30 @@ run_step() {
else
exit_code=$?
log "Warning: ${step_name} failed (exit ${exit_code}); continuing provisioning"
return 0
return 1
fi
}

# Hash of the inputs that decide what `pnpm install` would do. Stored inside
# node_modules so it travels with an installed tree (copy-on-write
# environments) and disappears with it (fresh worktrees).
INSTALL_STAMP="node_modules/.bb-env-setup-install-hash"
INSTALL_INPUTS="pnpm-lock.yaml pnpm-workspace.yaml package.json .npmrc"

install_inputs_hash() {
if command -v sha256sum >/dev/null 2>&1; then
hash_cmd="sha256sum"
elif command -v shasum >/dev/null 2>&1; then
hash_cmd="shasum -a 256"
else
return 1
fi
for input in ${INSTALL_INPUTS}; do
if [ -f "${input}" ]; then
printf '%s\n' "${input}"
${hash_cmd} < "${input}"
fi
done | ${hash_cmd} | cut -d ' ' -f 1
}

if ! command -v pnpm >/dev/null 2>&1; then
Expand All @@ -29,4 +51,16 @@ if [ ! -f package.json ]; then
exit 0
fi

run_step "pnpm install" pnpm install
current_hash="$(install_inputs_hash 2>/dev/null || true)"

if [ -n "${current_hash}" ] && [ -f "${INSTALL_STAMP}" ] && [ -d node_modules/.pnpm ]; then
if [ "$(cat "${INSTALL_STAMP}" 2>/dev/null)" = "${current_hash}" ]; then
log "Skipping pnpm install: node_modules already matches the lockfile"
exit 0
fi
fi

if run_step "pnpm install" pnpm install && [ -n "${current_hash}" ]; then
printf '%s\n' "${current_hash}" > "${INSTALL_STAMP}"
fi
exit 0
42 changes: 22 additions & 20 deletions .bb/skills/verify-bb/features/projects-environments.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,30 +13,32 @@ command’s `--help` before mutation. Use fresh browser snapshots for controls.

## Source

- `apps/app/src/views/ProjectSettingsView.tsx`
- `apps/app/src/views/ProjectDetailSettingsView.tsx`
- `apps/app/src/components/project/ProjectActionsMenu.tsx`
- `apps/cli/src/commands/project.ts`
- `apps/cli/src/commands/environment.ts`

Legacy `/projects/:projectId/settings` bookmarks redirect with history replacement to `/settings/projects/:projectId`, preserving query and hash. Check the sidebar, project actions, header, and machine checkout links against the same detail page.

## Feature recipes

| Feature | Drive | Observable success |
| --- | --- | --- |
| Create and rename projects | Run the local-project recipe, then rename through the project actions menu and reload; compare project show/update. | Project identity remains stable while its name changes. |
| Multiple sources and default source | Add a synthetic source on a second disposable host, change its path/default flag, then remove it with project source operations. Each host permits one source and the source host is immutable. | Sources persist, the intended default is selected, and the remaining source is still usable. |
| Git remote projects | Create a local-path project, then clone a disposable remote onto a second host using project source add --clone and the UI source controls. | Clone/provisioning uses the requested remote and branch; invalid remote errors do not create a usable fake checkout. |
| Recent repository import | On a disposable host home with synthetic recent repos, run the offered import action and inspect project list. | Only discovered candidates are imported; duplicates and missing paths are handled. Do not use real recent repos as fixtures. |
| Local versus managed worktree | Create one thread with Work locally and one with a new worktree and selected base branch. | Environment path, branch, and lifecycle match the selection; edits in the managed worktree do not affect the original checkout. |
| Reuse and switch environments | Select an existing environment for another thread; use environment update for display name/merge-base changes; test path switching separately through the thread environment-directory action after reading help. | Both thread details identify the intended environment; invalid paths fail without silently changing scope. |
| Environment status and branch discovery | Compare Info panel with environment show/status/branches and project branches for the same source. | Branch, dirty state, host, and path agree; disconnected or missing workspaces show an actionable error. |
| Diff views and selected patches | Open Diff with tracked edits, additions, renames, and deletions; use environment diff/diff-files/diff-file/diff-patch. | File lists, old/new contents, line numbers, and selected patches match git diff including untracked changes as supported. |
| Commit | Prepare a fixture containing only changes intended for a commit; invoke the UI/CLI Commit action and inspect git show and the clean diff. | The action stages all workspace changes with git add -A; the resulting commit contains the fixture changes. |
| Pull requests | With a disposable authenticated remote PR, inspect environment pull-request show; exercise ready, draft, and merge only in that test repo. | Forge state agrees with UI/CLI; missing auth/checks/conflicts produce explicit failures. Never run this on a user PR for documentation. |
| Archive environment threads | Create threads in two managed worktree environments and invoke environment archive-threads for one; try a local environment separately. | Only the selected managed environment’s active threads are archived; local environments are rejected with HTTP409. |
| Project attachments and history | Upload/download a synthetic file with project attachment; compare bytes; inspect project history and workspace file/path/content commands. | Returned content and history belong to the chosen project/host; missing files report failure. |
| Execution defaults | Set project defaults for environment/provider/model/permissions, open a new root draft and override one choice before sending. | Resolved defaults populate once, explicit draft choices win, and thread details reflect the actual execution options. |
| Clone destination and folder discovery | Browse an empty test host directory and inspect suggested clone path, path existence and invalid destination feedback. | Folder and clone suggestions target the chosen host; existing paths are not overwritten by a failed clone. |
| Delete project | Delete a disposable project through its confirmation flow, then inspect projects and its threads. | Deletion scope matches the confirmation; cancel leaves all state intact. |
| Feature | Drive | Observable success |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Create and rename projects | Run the local-project recipe, then rename through the project actions menu and reload; compare project show/update. | Project identity remains stable while its name changes. |
| Multiple sources and default source | Add a synthetic source on a second disposable host, change its path/default flag, then remove it with project source operations. Each host permits one source and the source host is immutable. | Sources persist, the intended default is selected, and the remaining source is still usable. |
| Git remote projects | Create a local-path project, then clone a disposable remote onto a second host using project source add --clone and the UI source controls. | Clone/provisioning uses the requested remote and branch; invalid remote errors do not create a usable fake checkout. |
| Recent repository import | On a disposable host home with synthetic recent repos, run the offered import action and inspect project list. | Only discovered candidates are imported; duplicates and missing paths are handled. Do not use real recent repos as fixtures. |
| Local versus managed worktree | Create one thread with Work locally and one with a new worktree and selected base branch. | Environment path, branch, and lifecycle match the selection; edits in the managed worktree do not affect the original checkout. |
| Reuse and switch environments | Select an existing environment for another thread; use environment update for display name/merge-base changes; test path switching separately through the thread environment-directory action after reading help. | Both thread details identify the intended environment; invalid paths fail without silently changing scope. |
| Environment status and branch discovery | Compare Info panel with environment show/status/branches and project branches for the same source. | Branch, dirty state, host, and path agree; disconnected or missing workspaces show an actionable error. |
| Diff views and selected patches | Open Diff with tracked edits, additions, renames, and deletions; use environment diff/diff-files/diff-file/diff-patch. | File lists, old/new contents, line numbers, and selected patches match git diff including untracked changes as supported. |
| Commit | Prepare a fixture containing only changes intended for a commit; invoke the UI/CLI Commit action and inspect git show and the clean diff. | The action stages all workspace changes with git add -A; the resulting commit contains the fixture changes. |
| Pull requests | With a disposable authenticated remote PR, inspect environment pull-request show; exercise ready, draft, and merge only in that test repo. | Forge state agrees with UI/CLI; missing auth/checks/conflicts produce explicit failures. Never run this on a user PR for documentation. |
| Archive environment threads | Create threads in two managed worktree environments and invoke environment archive-threads for one; try a local environment separately. | Only the selected managed environment’s active threads are archived; local environments are rejected with HTTP409. |
| Project attachments and history | Upload/download a synthetic file with project attachment; compare bytes; inspect project history and workspace file/path/content commands. | Returned content and history belong to the chosen project/host; missing files report failure. |
| Execution defaults | Set project defaults for environment/provider/model/permissions, open a new root draft and override one choice before sending. | Resolved defaults populate once, explicit draft choices win, and thread details reflect the actual execution options. |
| Clone destination and folder discovery | Browse an empty test host directory and inspect suggested clone path, path existence and invalid destination feedback. | Folder and clone suggestions target the chosen host; existing paths are not overwritten by a failed clone. |
| Delete project | Delete a disposable project through its confirmation flow, then inspect projects and its threads. | Deletion scope matches the confirmation; cancel leaves all state intact. |

## Evidence and cleanup

Expand All @@ -49,8 +51,8 @@ recipe. External writes require a disposable test target and task authorization.

## Maintenance notes

- Create a local project, then use its project actions menu → Rename and reload; compare source project show/update. Project settings contains source controls, not Rename. Source: `apps/app/src/components/project/ProjectActionsMenu.tsx:87; apps/cli/src/commands/project.ts:530`.
- Use two disposable hosts: each project permits one source per host. Select host when adding; update path/default with source operations. Move between hosts by adding/removing sources, not by changing a source host. Source: `apps/cli/src/commands/project.ts:574; apps/app/src/views/ProjectSettingsView.tsx:173`.
- Create a local project, then use its project actions menu → Rename and reload; compare source project show/update. Project settings opens Settings → Projects → project detail, including rename, checkouts, thread defaults, project information, and deletion. Source: `apps/app/src/components/project/ProjectActionsMenu.tsx:87; apps/cli/src/commands/project.ts:530`.
- Use two disposable hosts: each project permits one source per host. Select host when adding; update path/default with source operations. Move between hosts by adding/removing sources, not by changing a source host. Source: `apps/cli/src/commands/project.ts:574; apps/app/src/views/ProjectDetailSettingsView.tsx`.
- Create a project from a local path, then use project source add --clone --remote-url <disposable-remote> --target-path <fresh-path> on a second host. project create does not accept a remote URL. Source: `apps/cli/src/commands/project.ts:487; apps/cli/src/commands/project.ts:574`.
- Await provisioning with thread show; its JSON wraps thread and environment. Initial spawn may have environmentId null. Source: `apps/cli/src/commands/thread/spawn.ts; apps/cli/src/commands/environment.ts:301`.
- Reuse an environment with thread spawn --environment. environment update supports display name and merge-base override only. Test path switching with the supported thread environment-directory action separately. Source: `apps/cli/src/commands/environment.ts:579; apps/cli/src/commands/thread/spawn.ts`.
Expand Down
2 changes: 1 addition & 1 deletion .bb/skills/verify-bb/features/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ command’s `--help` before mutation. Use fresh browser snapshots for controls.
| File openers and local editor | Configure file/directory defaults, extension-specific openers, and local editor integration; open a fixture through each. | Chosen handler and line/path are correct; reset/default fallbacks remain usable. |
| Voice configuration | Load microphones, select one, configure the available AI service, and transcribe a harmless fixture. | Choice is applied to recording/transcription; missing browser permission or service is clearly reported. |
| Usage and AI services | Inspect Usage limits, settings usage, and settings ai-services; compare provider-reported windows and service selections. | Unavailable data remains unavailable rather than zero; configured services are resolved by their owning plugin. |
| Experiments | Exercise changelogPreview, editMessages, mobileApp, sidebarProgressiveDisclosure, and timelineWindowing on/off in isolated data. | Only the named feature gate changes; disabled routes/actions fail or disappear as designed; state restores. |
| Experiments | Exercise changelogPreview, mobileApp, sidebarProgressiveDisclosure, and timelineWindowing on/off in isolated data. | Only the named feature gate changes; disabled routes/actions fail or disappear as designed; state restores. |
| Debug events | Toggle Show unhandled provider events and render a trusted unsupported-event fixture. | The diagnostic row visibility follows the toggle without changing persisted event data. |
| Community and update surfaces | Open Community links, version/update view, changelog, and CLI skills status. | Destinations and installed/latest status are correct; viewing does not perform an update. |
| Configuration reload | Change an owned test configuration value and invoke settings reload. | The running app observes supported reloadable values and reports invalid configuration without losing working state. |
Expand Down
2 changes: 1 addition & 1 deletion .bb/skills/verify-bb/features/timeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ command’s `--help` before mutation. Use fresh browser snapshots for controls.
| Tool work and errors | Expand command output, file changes, grouped tool calls, nested agents, and a provider error. | Arguments/results and failure details correspond to the correct call and are readable after reload. |
| Images and media | Open an attachment image/lightbox, zoom or dismiss, and load a missing asset. | Correct media opens and missing content shows an error; closing restores the thread. |
| Copy, selection, Add to chat | Copy a whole message and selected text, add a quote to the composer, then remove it. | Clipboard/quote content matches the selection, without hidden tool payloads or duplicate context. |
| Edit accepted message | With Edit messages enabled and a supporting provider, replace a user message and rerun. | History is rewound from the intended checkpoint; later content is not treated as unchanged. |
| Edit accepted message | With a supporting provider, replace a user message and rerun. | History is rewound from the intended checkpoint; later content is not treated as unchanged. |
| Checkpoint fork and handoff | Fork at a chosen message and separately from current context; select workspace reuse/new workspace as offered. | Fork contains the correct prefix and parent relationship and executes in the chosen environment. |
| Side chat | Follow plugin-side-chat for selected-message forks and Send to main. | Main history remains untouched until an explicit send-back queues content. |
| File links and external links | Open an absolute file link with a line number, thread-storage attachment, and HTTP link. | Correct file/line/source opens; external/embedded browser policy is respected. |
Expand Down
2 changes: 2 additions & 0 deletions .github/APPROVED_CONTRIBUTORS
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,5 @@ danielbachhuber
aivanov93
MayankBansal12
vznh
MacHatter1
noih
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,12 @@ jobs:
pnpm-version: ${{ env.PNPM_VERSION }}
cache-prefix: test-${{ matrix.shard }}

- name: Setup Bun
if: ${{ matrix.shard == 'packages' }}
uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76
with:
bun-version: "1.3.14"

- name: Test
run: pnpm exec turbo run test ${{ matrix.filter }} --cache-dir=.turbo/cache --output-logs=new-only --concurrency=4 ${{ matrix.args }}

Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,5 @@ provider-recordings/raw/
**/provider-corpus/**
!apps/server/test/provider-corpus/**
!scripts/provider-corpus/**
.builtin-server-test-*/
.builtin-host-test-*/
6 changes: 5 additions & 1 deletion apps/app/.ladle/config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ function formatNetworkUrls(serverUrl) {

/** @type {import("@ladle/react").UserConfig} */
export default {
stories: ["src/**/*.stories.tsx", "../../plugins/workflows/**/*.stories.tsx"],
stories: [
"src/**/*.stories.tsx",
"../../plugins/workflows/**/*.stories.tsx",
"../../plugins/ask-user-question/*.stories.tsx",
],
defaultStory: "",
viteConfig: "./.ladle/vite.config.ts",
host: "0.0.0.0",
Expand Down
Loading
Loading