Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
8a2d15e
Add Taskboard filter state module
RIP21 Aug 20, 2026
879d720
Store Taskboard filter state per project
RIP21 Aug 20, 2026
70f7834
Add Taskboard filter state RPC methods
RIP21 Aug 20, 2026
21893aa
Restore Taskboard filters on open
RIP21 Aug 20, 2026
462b55f
Document Taskboard sticky filters
RIP21 Aug 21, 2026
445e5ac
Stop discarding saved filters on a mid-flight reload
RIP21 Aug 21, 2026
6b97bd8
Add Taskboard filter preset module
RIP21 Aug 21, 2026
37995f1
Store Taskboard filter presets per project
RIP21 Aug 21, 2026
39ba707
Add Taskboard filter preset RPC methods
RIP21 Aug 21, 2026
3ea2b17
Apply Taskboard filter presets from the filter bar
RIP21 Aug 21, 2026
30fffdc
Manage Taskboard filter presets in board preferences
RIP21 Aug 21, 2026
1847f74
Document Taskboard filter presets
RIP21 Aug 21, 2026
91037db
Add bb taskboard preset commands
RIP21 Aug 21, 2026
62e9723
Merge PR #10: configurable compact usage limit
MateoCerquetella Aug 27, 2026
bbdb3b8
Merge PR #11: retain current Taskboard filter persistence
MateoCerquetella Aug 27, 2026
8268ac8
Merge PR #12: named Taskboard filter presets
MateoCerquetella Aug 27, 2026
14ef031
Resolve community PR integration conflicts
MateoCerquetella Aug 27, 2026
9296d03
Merge latest main with Host Monitor
MateoCerquetella Aug 27, 2026
a6912cb
Harden community contribution integration
MateoCerquetella Aug 27, 2026
fb74be3
Bound preset responses and provider reads
MateoCerquetella Aug 27, 2026
0b737bb
Record community PR integration evidence
MateoCerquetella Aug 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 57 additions & 17 deletions .empirical/capabilities/project-view-preferences/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,29 @@ with server-side project configuration or leaking values across projects.

### Requirement: Project-scoped browse memory

Taskboard SHALL store one versioned, validated, device-local browse preference
record per BB project and selected provider, plus an independent Across projects
record. The full board and right panel SHALL share the same project record,
including the active search query.

#### Scenario: Return from issue detail

- **GIVEN** the user entered a search query for project A
- **WHEN** they open an issue and return to either Taskboard surface
- **THEN** project A's query and filtered results remain active
- **AND** project B and Across projects retain their independent queries

#### Scenario: Parse a legacy record

- **WHEN** a valid version-1 record created before search persistence has no
query field
- **THEN** Taskboard preserves its saved filters and supplies an empty query
Taskboard SHALL retain one versioned, validated, device-local browse preference
record per BB project/provider plus the independent Across projects scope. It
SHALL additionally store explicitly named preset snapshots per BB project in the
plugin database. Presets SHALL reuse the complete released browse preference
shape and SHALL apply only on explicit user/CLI action through the ordinary
preference update path.

#### Scenario: Apply a named preset

- **GIVEN** project A has a preset containing query, filters, List/Kanban view,
and collapse overrides
- **WHEN** the user applies it from project A's filter bar
- **THEN** every preset field replaces project A's current browse state
- **AND** the full board and right panel immediately share the result
- **AND** project B and Across projects remain unchanged

#### Scenario: Return later

- **GIVEN** a preset was applied to project A
- **WHEN** the user reloads or returns from issue detail
- **THEN** the existing device-local project preference record restores the
applied state
- **AND** no separate server filter-state writer races with it

### Requirement: Separate create-assignee memory

Expand Down Expand Up @@ -56,3 +62,37 @@ query with its derived selections.
- **WHEN** the user clears filters while viewing project A
- **THEN** project A's query and facets reset
- **AND** project B and Across projects retain their own saved selections

### Requirement: Safe project preset management

Preset names and state SHALL be bounded and strictly validated. Names SHALL be
case-insensitively unique using locale-independent normalization; ordering SHALL
be deterministic and reorder writes SHALL require an exact permutation of the
visible project preset IDs. Corrupt rows SHALL be omitted individually, and
deleting an absent preset SHALL be idempotent.

#### Scenario: Duplicate name

- **WHEN** a user saves a preset whose normalized name already exists in the
same project
- **THEN** the write is rejected without modifying either preset

#### Scenario: Corrupt stored preset

- **WHEN** one stored row fails strict state validation
- **THEN** valid presets still list and can be reordered against the parseable
subset

### Requirement: Preset CLI parity

The Taskboard CLI SHALL list, save, rename, and delete project presets and SHALL
accept `list --preset <name>`. Explicit source/query flags SHALL override the
preset's source/query; remaining preset facets SHALL use the same pure filter
function as the UI.

#### Scenario: List with explicit override

- **GIVEN** preset `My work` stores query `bug` and source `linear`
- **WHEN** the user runs `bb taskboard list --preset "My work" --query urgent`
- **THEN** `urgent` overrides the preset query
- **AND** the preset's remaining facets still narrow results
33 changes: 33 additions & 0 deletions .empirical/capabilities/usage-tracker-compact-display/spec.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Usage Tracker Compact Display Specification

## Purpose

Define which provider usage window appears in the compact sidebar reading.

## Requirements

### Requirement: Configurable compact limit

Usage Tracker SHALL let the user select Weekly or Five-hour as the compact
sidebar limit. Weekly SHALL be the default for new, legacy, missing, and unknown
preference values. The compact percentage and progress bar SHALL update when the
setting changes without hiding either window from expanded details.

#### Scenario: Preferred window is available

- **GIVEN** Weekly is selected and both windows are reported
- **WHEN** the compact provider reading renders
- **THEN** its percentage and progress bar use the weekly window
- **AND** expanded details still show both weekly and five-hour windows

#### Scenario: Preferred window is missing

- **GIVEN** Five-hour is selected but only the weekly window is reported
- **WHEN** the compact provider reading renders
- **THEN** it falls back to the weekly window rather than showing no limit

#### Scenario: Legacy value is loaded

- **WHEN** stored or RPC preference data omits or provides an unknown compact
limit
- **THEN** Usage Tracker normalizes the effective value to Weekly
13 changes: 10 additions & 3 deletions .empirical/context/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,12 @@
- `plugins/taskboard/contract.ts` and companion schemas define the strict JSON
wire model. `store.ts` owns append-only SQLite migrations and cached work.
`sources/` contains the GitHub, Linear, and Jira adapters behind one interface.
- `browse-preferences.ts` owns the observable device-local current view;
`filter-presets.ts` validates complete named snapshots while `store.ts` owns
their project-scoped SQLite CRUD/order and `server.ts` exposes RPC/CLI plus
realtime invalidation.
- `plugins/usage-tracker` is independent and owns its own server, app, provider
usage model, tests, and assets.
usage model, compact-limit preference, tests, and assets.
- `plugins/machine-monitor/server.ts` owns fleet refresh, last-good snapshots,
thresholds, and host-targeted process orchestration. `host.ts` collects a
strict privacy-bounded telemetry/process projection on an enrolled machine;
Expand All @@ -43,8 +47,11 @@
request, caches the returned item, and inserts a Taskboard mention into the
BB composer. The external provider is never written before confirmation.
6. A background service refreshes configured projects; the external tracker
remains authoritative when cache and live state differ.
7. Host Monitor asks BB for enrolled hosts, samples only connected targets via
remains authoritative when cache and live state differ.
7. Named presets never auto-apply. UI application provider-checks a preset,
atomically replaces the current project `BrowsePreferences`, and lets the
existing observable store synchronize full/right-panel surfaces.
8. Host Monitor asks BB for enrolled hosts, samples only connected targets via
the authenticated host-worker boundary, validates every response, and keeps
the last good reading when a target becomes stale, fails, or disconnects.
Process lists are fetched only for the explicitly opened host and stop
Expand Down
4 changes: 4 additions & 0 deletions .empirical/context/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ Commands below are verified from workspace and plugin manifests.
- `npm run types:refresh --workspace bb-plugin-taskboard` followed by
`npm install` — deliberate SDK declaration pin refresh when the minimum BB
release changes.
- `bb taskboard presets list|save|rename|delete` — manage named presets for the
current or explicitly selected BB project.
- `bb taskboard list --preset <name>` — apply a named preset to CLI listing;
explicit `--source` and `--query` flags take precedence.

## Verification evidence

Expand Down
6 changes: 3 additions & 3 deletions .empirical/context/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

Generated from bounded repository metadata.

- Repository: bb-plugins
- Source fingerprint: sha256:c10945040eafc31d2860d5258d0c9a0e6843abf05e6e91927f384331f3be7fec
- Included files: 145
- Repository: bb-plugins-taskboard-dev
- Source fingerprint: sha256:227dd1f413a7fbde5332a3aa37aada62b4bcfe1dbc0de2e8dba7c58781784a7a
- Included files: 148
- Roots: .agents, .bb, .claude, .codex, .cursor, .gemini, ., .github, .windsurf, demos, plugins
- Manifests: package.json, plugins/machine-monitor/package.json, plugins/taskboard/package.json, plugins/usage-tracker/package.json
- Primary docs: README.md, plugins/machine-monitor/README.md, plugins/taskboard/README.md, plugins/usage-tracker/README.md
Expand Down
Loading
Loading