Skip to content

ADR-019: Unified Workspace Filtering & Aggregate Metrics — Tracking Issue #645

@amiable-dev

Description

@amiable-dev

Summary

Tracking issue for ADR-019 implementation. Introduces shared device + mode filters between Signal Flow and Events panels, collapsible filter panes, link/unlink toggle, reusable filter components, aggregate metrics store for compact mode, and unmapped event tagging.

ADR: ADR-019-unified-workspace-filtering-and-aggregate-metrics.md
Mockups: signal-flow-v3-mockups.html (tabs S3, S4, Combined)
Total Estimate: 27–37 hours across 7 phases

Decisions

# Decision Status
D1 Three-Tier Filter Architecture (shared / panel-local / view-specific) 🔲
D2 Link/Unlink Toggle with visual indicator 🔲
D3 Collapsible Unified Filter Pane 🔲
D4 Promote DeviceStatusPills to shared filter widget 🔲
D5 Mode Filter — new shared control 🔲
D6 Extract TypeFilterChips reusable component 🔲
D7 Remove eventDeviceFilter store (breaking change) 🔲
D8 Aggregate Metrics Store (signalFlowMetrics.js) 🔲
D9 Signal Flow consumes signalPulseStore directly 🔲
D10 Unmapped Events — filter chip in Signal Flow 🔲
D11 Keyboard Shortcuts (F, Shift+F, D, L, 0–9) 🔲
D12 Events Sidebar — mode indicator + unmapped tagging 🔲

Phase Breakdown

Phase 1: Shared Filter Store & Migration (6–8h)

  • 1A: Create workspaceFilters.js shared filter store → D1, D2
  • 1B: Migrate DeviceStatusPills to activeDeviceFilter with multi-select → D4, D7
  • 1C: Migrate filteredEvents to Set-based device filter, remove eventDeviceFilter → D7

Phase 2: Collapsible Filter Panes (4–6h)

  • 2A: FilterSummaryBar component + collapse state persistence → D3
  • 2B: Wire collapsible panes in Events + Signal Flow → D3, D11

Phase 3: Link/Unlink Toggle (3–4h)

  • 3A: LinkToggle component + link/unlink state machine → D2, D11

Phase 4: Type Filter Component & Mode Filter (4–5h)

  • 4A: Extract TypeFilterChips reusable component → D6, D10
  • 4B: Shared mode filter with live/pinned indicator → D5, D12.1

Phase 5: Aggregate Metrics Store (4–6h)

  • 5A: Create signalFlowMetrics.js derived store → D8, D9
  • 5B: Wire compact mode UI to deviceMetrics → D8

Phase 6: Events Sidebar Enhancements (3–4h)

  • 6A: Unmapped event tagging in Events stream → D12.2

Phase 7: Integration Testing (3–4h)

  • 7A: Integration tests + regression verification → All

Dependency Graph

1A ──→ 1B ──→ 1C
 │      │
 ├──→ 2A ──→ 2B
 │
 ├──→ 3A
 │
 ├──→ 4A
 ├──→ 4B
 │
 ├──→ 5A ──→ 5B
 │
 └──→ 6A (also depends on 1C, 4B)
                    ↓
                   7A (depends on all)

Phases 2 and 3 can run in parallel after Phase 1.
Phases 4 and 5 can run in parallel.
Phase 6 depends on Phase 1 and Phase 4.

External Dependencies

  • ADR-015 Phase 2 (Signal Pulse): signalPulseStore for runtime metrics in compact mode. Without it, Phase 5 shows structural metrics only (graceful degradation).
  • ADR-014 (Mapping Feedback): mappingFireState / mappingFireCount — unchanged, consumed by Signal Flow expanded view.
  • ADR-017 (Unified Mapping): + Map CTA on unmapped rows opens MappingEditor.

Metadata

Metadata

Assignees

No one assigned

    Labels

    adr-019ADR-019: Unified Workspace Filtering & Aggregate MetricstrackingTracking/meta issue

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions