PQAP Dashboard Verification Plan
Created: 2025-12-25
Target: localhost:8080
Purpose: Comprehensive verification of all dashboard data feeds and views after recent fixes
Executive Summary
This verification plan coordinates parallel checks across all PQAP dashboard pages to ensure:
1. All data displays correctly after recent fixes
2. Cross-page data consistency is maintained
3. No regressions in existing functionality
Recent Fixes Being Verified
- Signals Page - TIME and DIRECTION columns now show proper values
- Dashboard Page - Data consistency with Trades page (paper trading as source of truth)
- Position Display - Field name transformations from raw data to template
Verification Tasks
TASK GROUP A: Dashboard Page (localhost:8080/dashboard)
Priority: HIGH
Dependencies: None (can run in parallel with B, C, D, E)
A1: Portfolio Stats Card Verification
| Element |
Expected Behavior |
Check |
| Portfolio Value |
Shows paper trading total_value (e.g., $100+) |
[ ] |
| Total P&L |
Shows paper trading total_pnl, colored green/red |
[ ] |
| Today's P&L |
Shows daily_pnl value (may be 0 if no daily tracking) |
[ ] |
| Active Positions |
Count matches actual open positions list |
[ ] |
| Win Rate |
Percentage from strategy wins/total_trades |
[ ] |
| Total Trades |
Sum of all strategy trades |
[ ] |
A2: P&L Chart Verification
| Element |
Expected Behavior |
Check |
| Chart canvas |
Renders if > 1 data point exists |
[ ] |
| Empty state |
Shows "Collecting data" if insufficient data |
[ ] |
| Labels |
Show date format MM/DD |
[ ] |
| Values |
Show dollar amounts |
[ ] |
A3: Active Positions Section
| Element |
Expected Behavior |
Check |
| Position cards |
Each has: market_title, side badge, size, entry, current, unrealized P&L |
[ ] |
| Side badge |
Shows LONG (green) or SHORT (red) based on position.side |
[ ] |
| Unrealized P&L |
Colored appropriately (positive=green, negative=red) |
[ ] |
| Empty state |
Shows "No active positions yet" if positions array is empty |
[ ] |
A4: Recent Trades Section
| Element |
Expected Behavior |
Check |
| Trade items |
Show market_title or outcome_name as fallback |
[ ] |
| Trade meta |
Shows strategy_id and timestamp (first 16 chars) |
[ ] |
| Trade value |
Formatted as dollar amount |
[ ] |
| Trade P&L |
Shows +/- with appropriate coloring |
[ ] |
| Limit |
Shows last 5 trades only |
[ ] |
A5: Strategy Status Table
| Element |
Expected Behavior |
Check |
| Strategy ID |
Primary identifier in bold |
[ ] |
| Name |
Shows below strategy_id in gray |
[ ] |
| Status badge |
"Active" (green) or "Inactive" (red), plus "Auto-disabled" if applicable |
[ ] |
| Capital |
Shows allocated_capital formatted |
[ ] |
| P&L |
Shows total_pnl with color coding |
[ ] |
| Trades |
Shows total_trades count |
[ ] |
| Win Rate |
Shows percentage |
[ ] |
| 24h Signals |
Format: "X (Y exec)" |
[ ] |
TASK GROUP B: Trades Page (localhost:8080/trades)
Priority: HIGH
Dependencies: None
B1: Tab Navigation
| Element |
Expected Behavior |
Check |
| Positions tab |
Active by default, highlighted |
[ ] |
| Trade History tab |
Clickable, switches content |
[ ] |
| Tab switching |
Content changes appropriately |
[ ] |
B2: Positions Tab - Key Metrics
| Element |
Expected Behavior |
Check |
| Total Value |
Matches dashboard portfolio value |
[ ] |
| Return |
Shows return_pct with % symbol |
[ ] |
| Cash/Positions |
Shows available_capital / position_value |
[ ] |
| Total Trades |
Matches dashboard total_trades |
[ ] |
B3: Positions Tab - Open Positions Table
| Element |
Expected Behavior |
Check |
| Market column |
Shows market_question |
[ ] |
| Outcome column |
Shows outcome name |
[ ] |
| Size column |
Formatted number |
[ ] |
| Entry column |
Price with 4 decimal places |
[ ] |
| Current column |
Price with 4 decimal places |
[ ] |
| P&L column |
Unrealized P&L with color |
[ ] |
| Closed filter |
Positions with closed=True are hidden |
[ ] |
B4: Positions Tab - Recent Trades Preview
| Element |
Expected Behavior |
Check |
| Time column |
Timestamp first 19 chars |
[ ] |
| Strategy column |
Strategy ID |
[ ] |
| Side column |
BUY/SELL with direction class |
[ ] |
| Outcome column |
Outcome name |
[ ] |
| Size/Price/Value |
Formatted numbers |
[ ] |
| Limit |
Shows last 20 trades |
[ ] |
B5: Trade History Tab - Summary Stats
| Element |
Expected Behavior |
Check |
| Total Trades |
Count of filtered trades |
[ ] |
| Total P&L |
Sum of P&L with coloring |
[ ] |
| Win Rate |
Percentage |
[ ] |
| Total Fees |
Sum of fees |
[ ] |
B6: Trade History Tab - Filters
| Element |
Expected Behavior |
Check |
| Strategy dropdown |
Lists all available strategies |
[ ] |
| Side dropdown |
BUY/SELL options |
[ ] |
| Date From/To |
Date picker inputs |
[ ] |
| Apply Filters |
Submits form, reloads with filters |
[ ] |
| Reset |
Clears all filters |
[ ] |
| Export CSV |
Downloads CSV file |
[ ] |
B7: Trade History Tab - Trades Table
| Element |
Expected Behavior |
Check |
| Time |
Formatted datetime |
[ ] |
| Strategy |
Strategy ID in bold |
[ ] |
| Market |
Market title (truncated if long) |
[ ] |
| Side badge |
BUY (green) / SELL (red) |
[ ] |
| Price/Size/Fee/P&L |
Formatted numbers |
[ ] |
| Pagination |
Shows page X of Y, Previous/Next buttons |
[ ] |
B8: Portfolio Chart
| Element |
Expected Behavior |
Check |
| Chart renders |
Fetches from /api/paper/history |
[ ] |
| Time range selector |
Options: 1h, 6h, 12h, 24h, 48h, All |
[ ] |
| Chart updates |
Responds to time range changes |
[ ] |
TASK GROUP C: Signals Page (localhost:8080/signals)
Priority: CRITICAL (Recent fixes)
Dependencies: None
C1: Summary Stats Cards
| Element |
Expected Behavior |
Check |
| Total Signals |
Count of all signals |
[ ] |
| Executed |
Count where executed=1 (green) |
[ ] |
| Rejected |
Count where rejected_reason exists (red) |
[ ] |
| Pending |
Count of non-executed, non-rejected |
[ ] |
C2: Signals Table - TIME Column (FIX VERIFICATION)
| Element |
Expected Behavior |
Check |
| Timestamp display |
Shows actual timestamp, NOT "-" |
[ ] |
| Format |
First 19 characters of timestamp or created_at |
[ ] |
| Fallback |
Uses created_at if timestamp is null |
[ ] |
C3: Signals Table - DIRECTION Column (FIX VERIFICATION)
| Element |
Expected Behavior |
Check |
| Direction badge |
Shows BUY (green) or SELL (red), NOT "UNKNOWN" |
[ ] |
| Data source |
Uses signal_type field, uppercased |
[ ] |
| Badge styling |
Correct CSS class applied |
[ ] |
C4: Signals Table - Other Columns
| Element |
Expected Behavior |
Check |
| Strategy |
Shows strategy_id |
[ ] |
| Confidence |
Shows strength as percentage if <= 1, raw value otherwise |
[ ] |
| Market ID |
Truncated if > 20 chars, with title tooltip |
[ ] |
| Executed badge |
"Yes" (green) or "No" (gray) |
[ ] |
| Rejected Reason |
Shows reason or "-" |
[ ] |
| Element |
Expected Behavior |
Check |
| Info text |
"Showing X-Y of Z items" |
[ ] |
| Page size |
25 rows per page |
[ ] |
| Previous/Next |
Disabled appropriately at bounds |
[ ] |
| Page numbers |
With ellipsis for large sets |
[ ] |
TASK GROUP D: Markets Page (localhost:8080/markets)
Priority: MEDIUM
Dependencies: None
D1: Stats Section
| Element |
Expected Behavior |
Check |
| Total Markets |
Shows total_markets count |
[ ] |
| Showing |
Shows markets array length (max 100) |
[ ] |
D2: Markets Table
| Element |
Expected Behavior |
Check |
| Question column |
Market question text (truncated) |
[ ] |
| YES Price |
Price value |
[ ] |
| NO Price |
Price value |
[ ] |
| Sum |
YES + NO price sum |
[ ] |
| 24h Volume |
Volume figure |
[ ] |
| Actions |
"View" link to Polymarket if slug exists |
[ ] |
| Arb highlight |
Row highlighted if sum < 0.98 |
[ ] |
| Element |
Expected Behavior |
Check |
| Page controls |
Same as Signals page pagination |
[ ] |
| 25 rows per page |
Default page size |
[ ] |
TASK GROUP E: Strategies Page (localhost:8080/strategies)
Priority: MEDIUM
Dependencies: None
E1: Summary Stats
| Element |
Expected Behavior |
Check |
| Total Strategies |
Count of strategies |
[ ] |
| Active Strategies |
Count of enabled strategies |
[ ] |
| Total P&L |
Sum of all strategy P&L with coloring |
[ ] |
| Avg Win Rate |
Average win rate percentage |
[ ] |
E2: Strategy Cards
| Element |
Expected Behavior |
Check |
| Card border |
Green (active), gray (inactive), orange (auto-disabled) |
[ ] |
| Strategy ID |
Header text |
[ ] |
| Version/Name |
Shows version and name |
[ ] |
| Toggle switch |
Checkbox state matches enabled |
[ ] |
| Status badge |
Correct badge type and text |
[ ] |
E3: Strategy Card Stats
| Element |
Expected Behavior |
Check |
| Allocated Capital |
Formatted dollar amount |
[ ] |
| P&L |
With color coding |
[ ] |
| Total Trades |
Count |
[ ] |
| Win Rate |
Percentage |
[ ] |
| Wins/Losses |
Colored counts |
[ ] |
| Last Trade |
Formatted timestamp or "Never" |
[ ] |
E4: Signal Chart
| Element |
Expected Behavior |
Check |
| 24h summary |
"X (Y executed)" format |
[ ] |
| Bar chart |
24 bars representing hours |
[ ] |
| Bar height |
Proportional to signal count |
[ ] |
| Element |
Expected Behavior |
Check |
| Edit Capital |
Opens modal |
[ ] |
| Disable |
Triggers disable API call |
[ ] |
| Toggle switch |
Enables/disables strategy |
[ ] |
TASK GROUP F: Cross-Page Data Consistency
Priority: CRITICAL
Dependencies: Complete A, B first
F1: Portfolio Value Consistency
| Check |
Pages to Compare |
Expected |
| Total Value |
Dashboard vs Trades (Positions tab) |
MUST MATCH |
| Source |
Both use paper_trading_provider |
Same data source |
F2: Position Count Consistency
| Check |
Pages to Compare |
Expected |
| Open Positions |
Dashboard (count) vs Trades (table rows) |
MUST MATCH |
| Filter logic |
Both exclude closed positions |
Same filtering |
F3: P&L Consistency
| Check |
Pages to Compare |
Expected |
| Total P&L |
Dashboard vs Trades summary |
MUST MATCH |
| Per Strategy |
Dashboard table vs Strategies page |
MUST MATCH |
F4: Trade Count Consistency
| Check |
Pages to Compare |
Expected |
| Total Trades |
Dashboard vs Trades (summary) |
MUST MATCH |
| Sum of strategies |
Dashboard table sum vs displayed total |
MUST MATCH |
F5: Win Rate Consistency
| Check |
Pages to Compare |
Expected |
| Portfolio Win Rate |
Dashboard vs calculated from strategies |
MUST MATCH |
| Strategy Win Rates |
Dashboard table vs Strategies page |
MUST MATCH |
Data Source Reference
Paper Trading Provider (Source of Truth for Positions/Trades)
# Returns:
{
"summary": {
"total_value": float,
"total_pnl": float,
"return_pct": float,
"starting_capital": float,
"available_capital": float,
"position_value": float,
"open_positions": int,
"total_trades": int,
"unrealized_pnl": float
},
"positions": [...],
"trades": [...]
}
Strategy Controller (Source of Truth for Strategy Metrics)
# get_strategy_status returns:
{
"strategy_id": str,
"name": str,
"version": str,
"enabled": bool,
"auto_disabled": bool,
"auto_disable_reason": str | None,
"allocated_capital": float,
"performance": {
"total_trades": int,
"total_pnl": float,
"wins": int,
"losses": int,
"win_rate": float
},
"signals_24h": {...},
"last_signal_at": str | None,
"last_trade_at": str | None
}
Signals Provider
# Each signal:
{
"signal_id": str,
"strategy_id": str,
"market_id": str,
"signal_type": str, # "BUY" or "SELL"
"strength": str | float,
"executed": int, # 0 or 1
"rejected_reason": str | None,
"timestamp": str, # or created_at
"created_at": str
}
Verification Execution Plan
Phase 1: Parallel Page Checks (Can run simultaneously)
- Agent A: Execute Task Groups A, F (Dashboard + Cross-page)
- Agent B: Execute Task Group B (Trades page)
- Agent C: Execute Task Group C (Signals page - CRITICAL)
- Agent D: Execute Task Groups D, E (Markets + Strategies)
Phase 2: Integration Verification
After Phase 1 completes:
1. Collate all F (cross-page consistency) results
2. Identify any discrepancies
3. Report findings
Expected Verification Time
- Phase 1: 5-10 minutes per agent (parallel)
- Phase 2: 5 minutes (sequential)
- Total: ~15 minutes
Success Criteria
Critical (Must Pass)
- [ ] Signals page TIME column shows actual timestamps
- [ ] Signals page DIRECTION shows BUY/SELL badges
- [ ] Dashboard and Trades page portfolio values match
- [ ] Position counts are consistent across pages
- [ ] No JavaScript console errors on any page
High Priority (Should Pass)
- [ ] All pagination works correctly
- [ ] All charts render (or show proper empty states)
- [ ] Strategy enable/disable toggles function
- [ ] Filter forms submit and apply correctly
Medium Priority (Nice to Have)
- [ ] Auto-refresh timers working
- [ ] Export CSV downloads successfully
- [ ] All tooltips display correctly
- [ ] Responsive layout on smaller screens
Issue Reporting Template
For any failures, use this format:
Page: [Page Name]
Task: [Task ID]
Element: [Element Name]
Expected: [Expected Behavior]
Actual: [What Actually Happened]
Screenshot: [If applicable]
Console Errors: [Any JS errors]
Post-Verification Actions
- All Pass: Update research_log.md with verification completion
- Critical Failures: Create fix tasks, re-verify after fixes
- Minor Issues: Log for future improvement, not blocking