Files
roboco/panel/src/lib/mock-data.ts
T
Renn FandRenzo F 05a83f45cb feat(auditor): waive_finding verb + findings queue panel
Wire the long-unwired mark_waived repo method to a new auditor-only
flow verb waive_finding, severity-scoped to minor/nit (blocker/major
must be fixed, never waived), requiring a note, with a task.finding_waived
audit event and no task status change. Add the verb to the IntentSpec
table (auto-derived into the auditor manifest), the flow_auditor route,
and the flow_server MCP tool.

Surface open review findings (cross-task, blocking-first) on the
auditor dashboard via ReviewFindingsRepository.list_open_findings and a
new findings field on AuditorDashboard. Restore the panel's 4-card
auditor layout with a new read-only FindingsQueuePanel as the 4th card.
2026-07-14 08:56:55 +02:00

1195 lines
31 KiB
TypeScript

import {
Task,
TaskStatus,
Team,
Complexity,
AgentRole,
NotificationType,
NotificationPriority,
JournalEntryType,
FlagSeverity,
TaskNature,
TaskType,
} from "@/types";
// Simple mock ID generator
let _id = 0;
const mockId = () => `mock-${++_id}`;
// Agent IDs - slugs (not UUIDs) except CEO
export const AGENT_IDS = {
// CEO (human) - only one with UUID
ceo: "00000000-0000-0000-0000-000000000001",
// Board/Management (team=null in seed data)
productOwner: "product-owner",
mainPm: "main-pm",
headMarketing: "head-marketing",
auditor: "auditor",
// Backend Cell
bePm: "be-pm",
beDev1: "be-dev-1",
beDev2: "be-dev-2",
beQa: "be-qa",
beDoc: "be-doc",
// Frontend Cell
fePm: "fe-pm",
feDev1: "fe-dev-1",
feDev2: "fe-dev-2",
feQa: "fe-qa",
feDoc: "fe-doc",
// UX/UI Cell
uxPm: "ux-pm",
uxDev1: "ux-dev-1",
uxDev2: "ux-dev-2",
uxQa: "ux-qa",
uxDoc: "ux-doc",
};
export const TASK_IDS = {
task1: "11111111-1111-1111-1111-111111111111",
task2: "22222222-2222-2222-2222-222222222222",
task3: "33333333-3333-3333-3333-333333333333",
task4: "44444444-4444-4444-4444-444444444444",
task5: "55555555-5555-5555-5555-555555555555",
task6: "66666666-6666-6666-6666-666666666666",
};
// Mock project IDs (all tasks require a project for git workflow)
export const PROJECT_IDS = {
roboco: "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
robocoPanel: "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
};
// Timestamps - computed dynamically to stay relative
const getNow = () => new Date();
const getMinutesAgo = (mins: number) => new Date(Date.now() - mins * 60 * 1000);
const getHoursAgo = (hours: number) =>
new Date(Date.now() - hours * 60 * 60 * 1000);
const getDaysAgo = (days: number) =>
new Date(Date.now() - days * 24 * 60 * 60 * 1000);
// Static references for initial data (these get stale but are used for tasks/etc)
const now = getNow();
const hourAgo = getHoursAgo(1);
const dayAgo = getDaysAgo(1);
const weekAgo = getDaysAgo(7);
// =============================================================================
// MOCK AGENTS - Matching backend seed data exactly
// =============================================================================
interface MockAgent {
id: string;
name: string;
slug: string;
role: AgentRole;
team: Team | null;
}
export const mockAgents: MockAgent[] = [
// Backend Cell
{
id: AGENT_IDS.beDev1,
name: "Backend Developer 1",
slug: "be-dev-1",
role: AgentRole.DEVELOPER,
team: Team.BACKEND,
},
{
id: AGENT_IDS.beDev2,
name: "Backend Developer 2",
slug: "be-dev-2",
role: AgentRole.DEVELOPER,
team: Team.BACKEND,
},
{
id: AGENT_IDS.beQa,
name: "Backend QA",
slug: "be-qa",
role: AgentRole.QA,
team: Team.BACKEND,
},
{
id: AGENT_IDS.bePm,
name: "Backend PM",
slug: "be-pm",
role: AgentRole.CELL_PM,
team: Team.BACKEND,
},
{
id: AGENT_IDS.beDoc,
name: "Backend Documenter",
slug: "be-doc",
role: AgentRole.DOCUMENTER,
team: Team.BACKEND,
},
// Frontend Cell
{
id: AGENT_IDS.feDev1,
name: "Frontend Developer 1",
slug: "fe-dev-1",
role: AgentRole.DEVELOPER,
team: Team.FRONTEND,
},
{
id: AGENT_IDS.feDev2,
name: "Frontend Developer 2",
slug: "fe-dev-2",
role: AgentRole.DEVELOPER,
team: Team.FRONTEND,
},
{
id: AGENT_IDS.feQa,
name: "Frontend QA",
slug: "fe-qa",
role: AgentRole.QA,
team: Team.FRONTEND,
},
{
id: AGENT_IDS.fePm,
name: "Frontend PM",
slug: "fe-pm",
role: AgentRole.CELL_PM,
team: Team.FRONTEND,
},
{
id: AGENT_IDS.feDoc,
name: "Frontend Documenter",
slug: "fe-doc",
role: AgentRole.DOCUMENTER,
team: Team.FRONTEND,
},
// UX/UI Cell (only 1 dev per seed data)
{
id: AGENT_IDS.uxDev1,
name: "UX/UI Developer 1",
slug: "ux-dev-1",
role: AgentRole.DEVELOPER,
team: Team.UX_UI,
},
{
id: AGENT_IDS.uxDev2,
name: "UX/UI Developer 2",
slug: "ux-dev-2",
role: AgentRole.DEVELOPER,
team: Team.UX_UI,
},
{
id: AGENT_IDS.uxQa,
name: "UX/UI QA",
slug: "ux-qa",
role: AgentRole.QA,
team: Team.UX_UI,
},
{
id: AGENT_IDS.uxPm,
name: "UX/UI PM",
slug: "ux-pm",
role: AgentRole.CELL_PM,
team: Team.UX_UI,
},
{
id: AGENT_IDS.uxDoc,
name: "UX/UI Documenter",
slug: "ux-doc",
role: AgentRole.DOCUMENTER,
team: Team.UX_UI,
},
// Board/Management (team=null per seed data)
{
id: AGENT_IDS.mainPm,
name: "Main PM",
slug: "main-pm",
role: AgentRole.MAIN_PM,
team: null,
},
{
id: AGENT_IDS.productOwner,
name: "Product Owner",
slug: "product-owner",
role: AgentRole.PRODUCT_OWNER,
team: null,
},
{
id: AGENT_IDS.headMarketing,
name: "Head of Marketing",
slug: "head-marketing",
role: AgentRole.HEAD_MARKETING,
team: null,
},
{
id: AGENT_IDS.auditor,
name: "Auditor",
slug: "auditor",
role: AgentRole.AUDITOR,
team: null,
},
// CEO (Human - Renzo)
{
id: AGENT_IDS.ceo,
name: "Renzo",
slug: "ceo",
role: AgentRole.CEO,
team: null,
},
];
// =============================================================================
// MOCK TASKS - Full structure matching backend TaskResponse schema
// =============================================================================
export const mockTasks: Task[] = [
{
id: TASK_IDS.task1,
title: "Implement user authentication flow",
description: `## Overview
Implement a complete user authentication system including:
- Login with email/password
- OAuth integration (Google, GitHub)
- Password reset functionality
- Session management
## Technical Requirements
- Use JWT tokens for session management
- Implement refresh token rotation
- Add rate limiting on auth endpoints`,
team: Team.BACKEND,
priority: 1,
sequence: 1,
status: TaskStatus.IN_PROGRESS,
estimated_complexity: Complexity.HIGH,
nature: TaskNature.TECHNICAL,
task_type: TaskType.CODE,
project_id: PROJECT_IDS.roboco,
docs_complete: false,
pr_created: false,
pm_approvals: {},
acceptance_criteria: [
"Users can log in with email/password",
"Users can log in with Google OAuth",
"Password reset emails are sent correctly",
"Sessions expire after 24 hours of inactivity",
],
dependency_ids: [],
blocker_ids: [],
parent_task_id: null,
target_date: null,
created_at: dayAgo.toISOString(),
updated_at: hourAgo.toISOString(),
created_by: AGENT_IDS.productOwner,
assigned_to: AGENT_IDS.beDev1,
claimed_at: dayAgo.toISOString(),
started_at: hourAgo.toISOString(),
completed_at: null,
self_verified: false,
qa_verified: null,
branch_name: "feature/TASK-001-user-auth",
pr_number: null,
pr_url: null,
plan: {
approach: `## Implementation Strategy
1. **Database Schema**: Create users table with proper indexes
2. **Auth Service**: Implement core auth logic
3. **API Endpoints**: Build REST endpoints
4. **OAuth Integration**: Add Google/GitHub providers
5. **Testing**: Write comprehensive tests`,
sub_tasks: [
{
id: mockId(),
title: "Create database migrations",
description: null,
order: 1,
completed: true,
estimated_hours: 2,
notes: null,
},
{
id: mockId(),
title: "Implement auth service",
description: null,
order: 2,
completed: true,
estimated_hours: 4,
notes: null,
},
{
id: mockId(),
title: "Build API endpoints",
description: null,
order: 3,
completed: false,
estimated_hours: 4,
notes: null,
},
{
id: mockId(),
title: "Add OAuth providers",
description: null,
order: 4,
completed: false,
estimated_hours: 3,
notes: null,
},
{
id: mockId(),
title: "Write tests",
description: null,
order: 5,
completed: false,
estimated_hours: 3,
notes: null,
},
],
technical_considerations: [
"Consider using Redis for session storage",
"Implement proper error handling",
"Add request logging for audit trail",
],
risks: [
{
description: "OAuth provider API changes",
severity: "medium",
mitigation: "Use official SDKs and monitor changelogs",
},
],
open_questions: [
{
question: "Should we support 2FA in this iteration?",
answer: "No, defer to Phase 2",
answered_by: AGENT_IDS.productOwner,
answered_at: dayAgo.toISOString(),
},
],
},
progress_updates: [
{
timestamp: hourAgo.toISOString(),
message:
"Completed database migrations and auth service implementation",
agent_id: AGENT_IDS.beDev1,
percentage: 40,
},
],
checkpoints: [],
commits: [
{
hash: "abc123def456",
message: "feat: add user authentication schema",
timestamp: dayAgo.toISOString(),
author_agent_id: AGENT_IDS.beDev1,
},
],
dev_notes: "Using bcrypt with 12 rounds for password hashing.",
qa_notes: null,
auditor_notes: null,
quick_context:
"Currently implementing API endpoints. Auth service is ready.",
},
{
id: TASK_IDS.task2,
title: "Build dashboard components",
description: `Create reusable dashboard components for the CEO command center.
## Components Needed
- Key metrics panel
- Team health cards
- Activity feed
- Quick actions bar`,
team: Team.FRONTEND,
priority: 2,
sequence: 2,
status: TaskStatus.PENDING,
estimated_complexity: Complexity.MEDIUM,
nature: TaskNature.TECHNICAL,
task_type: TaskType.CODE,
project_id: PROJECT_IDS.roboco,
docs_complete: false,
pr_created: false,
pm_approvals: {},
acceptance_criteria: [
"All components are responsive",
"Components follow design system",
"Unit tests cover 80%+ of code",
],
dependency_ids: [],
blocker_ids: [],
parent_task_id: TASK_IDS.task1, // Child of "Implement user authentication flow"
target_date: null,
created_at: dayAgo.toISOString(),
updated_at: dayAgo.toISOString(),
created_by: AGENT_IDS.fePm,
assigned_to: null,
claimed_at: null,
started_at: null,
completed_at: null,
self_verified: false,
qa_verified: null,
branch_name: null,
pr_number: null,
pr_url: null,
plan: null,
progress_updates: [],
checkpoints: [],
commits: [],
dev_notes: null,
qa_notes: null,
auditor_notes: null,
quick_context: null,
},
{
id: TASK_IDS.task3,
title: "Fix pagination bug in task list",
description: `The task list pagination breaks when filtering by status.
## Steps to Reproduce
1. Go to /tasks
2. Filter by "In Progress"
3. Click page 2
4. Filter resets unexpectedly
## Expected Behavior
Pagination should maintain filter state.`,
team: Team.FRONTEND,
priority: 0,
sequence: 3,
status: TaskStatus.CLAIMED,
estimated_complexity: Complexity.LOW,
nature: TaskNature.TECHNICAL,
task_type: TaskType.CODE,
project_id: PROJECT_IDS.roboco,
docs_complete: false,
pr_created: false,
pm_approvals: {},
acceptance_criteria: [
"Pagination maintains filter state",
"URL params reflect current filters",
"No regression in existing functionality",
],
dependency_ids: [],
blocker_ids: [],
parent_task_id: TASK_IDS.task1, // Child of "Implement user authentication flow"
target_date: null,
created_at: hourAgo.toISOString(),
updated_at: hourAgo.toISOString(),
created_by: AGENT_IDS.fePm,
assigned_to: AGENT_IDS.feDev1,
claimed_at: hourAgo.toISOString(),
started_at: null,
completed_at: null,
self_verified: false,
qa_verified: null,
branch_name: "fix/TASK-003-pagination-bug",
pr_number: null,
pr_url: null,
plan: null,
progress_updates: [],
checkpoints: [],
commits: [],
dev_notes: null,
qa_notes: null,
auditor_notes: null,
quick_context: null,
},
{
id: TASK_IDS.task4,
title: "Design new onboarding flow",
description: `Create wireframes and mockups for the new user onboarding experience.
The flow should guide new users through:
- Account setup
- Team configuration
- First task creation`,
team: Team.UX_UI,
priority: 2,
sequence: 4,
status: TaskStatus.AWAITING_QA,
estimated_complexity: Complexity.MEDIUM,
nature: TaskNature.TECHNICAL,
task_type: TaskType.DESIGN,
project_id: PROJECT_IDS.robocoPanel,
docs_complete: false,
pr_created: false,
pm_approvals: {},
acceptance_criteria: [
"Wireframes for all screens",
"Interactive prototype",
"User flow documentation",
],
dependency_ids: [],
blocker_ids: [],
parent_task_id: null,
target_date: null,
created_at: dayAgo.toISOString(),
updated_at: hourAgo.toISOString(),
created_by: AGENT_IDS.uxPm,
assigned_to: AGENT_IDS.uxDev1,
claimed_at: dayAgo.toISOString(),
started_at: dayAgo.toISOString(),
completed_at: hourAgo.toISOString(),
self_verified: true,
qa_verified: null,
branch_name: "feature/TASK-004-onboarding-design",
pr_number: 42,
pr_url: "https://github.com/roboco/roboco/pull/42",
plan: {
approach:
"Create lo-fi wireframes first, then hi-fi mockups after stakeholder approval.",
sub_tasks: [
{
id: mockId(),
title: "User research",
description: null,
order: 1,
completed: true,
estimated_hours: 2,
notes: null,
},
{
id: mockId(),
title: "Lo-fi wireframes",
description: null,
order: 2,
completed: true,
estimated_hours: 2,
notes: null,
},
{
id: mockId(),
title: "Hi-fi mockups",
description: null,
order: 3,
completed: true,
estimated_hours: 3,
notes: null,
},
{
id: mockId(),
title: "Interactive prototype",
description: null,
order: 4,
completed: true,
estimated_hours: 1,
notes: null,
},
],
technical_considerations: [],
risks: [],
open_questions: [],
},
progress_updates: [
{
timestamp: dayAgo.toISOString(),
message: "Completed user research and started wireframes",
agent_id: AGENT_IDS.uxDev1,
percentage: 30,
},
{
timestamp: hourAgo.toISOString(),
message: "Finished all mockups and prototype, submitting for QA",
agent_id: AGENT_IDS.uxDev1,
percentage: 100,
},
],
checkpoints: [],
commits: [],
dev_notes:
"Used Figma for all designs. Prototype link in the team channel.",
qa_notes: null,
auditor_notes: null,
quick_context: "Ready for QA review. All deliverables complete.",
},
{
id: TASK_IDS.task5,
title: "Optimize database queries",
description: `Several API endpoints are slow due to unoptimized queries.
## Affected Endpoints
- GET /tasks (> 500ms)
- GET /dashboard/metrics (> 1s)
## Goal
Reduce response time to < 100ms for all endpoints.`,
team: Team.BACKEND,
priority: 1,
sequence: 5,
status: TaskStatus.BLOCKED,
estimated_complexity: Complexity.HIGH,
nature: TaskNature.TECHNICAL,
task_type: TaskType.CODE,
project_id: PROJECT_IDS.roboco,
docs_complete: false,
pr_created: false,
pm_approvals: {},
acceptance_criteria: [
"All listed endpoints respond in < 100ms",
"Query execution plans are documented",
"No N+1 queries remain",
],
dependency_ids: [],
blocker_ids: [TASK_IDS.task1],
parent_task_id: null,
target_date: null,
created_at: dayAgo.toISOString(),
updated_at: hourAgo.toISOString(),
created_by: AGENT_IDS.bePm,
assigned_to: AGENT_IDS.beDev2,
claimed_at: dayAgo.toISOString(),
started_at: dayAgo.toISOString(),
completed_at: null,
self_verified: false,
qa_verified: null,
branch_name: "perf/TASK-005-db-optimization",
pr_number: null,
pr_url: null,
plan: null,
progress_updates: [
{
timestamp: hourAgo.toISOString(),
message: "Blocked waiting for auth changes to merge",
agent_id: AGENT_IDS.beDev2,
percentage: 10,
},
],
checkpoints: [],
commits: [],
dev_notes: "Need to wait for task #1 to complete before proceeding.",
qa_notes: null,
auditor_notes: null,
quick_context: "Blocked by auth implementation.",
},
{
id: TASK_IDS.task6,
title: "Write API documentation",
description: `Document all public API endpoints using OpenAPI/Swagger.
Include:
- Endpoint descriptions
- Request/response schemas
- Authentication requirements
- Example requests`,
team: Team.BACKEND,
priority: 3,
sequence: 6,
status: TaskStatus.COMPLETED,
estimated_complexity: Complexity.LOW,
nature: TaskNature.TECHNICAL,
task_type: TaskType.DOCUMENTATION,
project_id: PROJECT_IDS.roboco,
docs_complete: true,
pr_created: true,
pm_approvals: { main_pm: true },
acceptance_criteria: [
"All endpoints documented",
"Swagger UI accessible at /docs",
"Examples for each endpoint",
],
dependency_ids: [],
blocker_ids: [],
parent_task_id: null,
target_date: null,
created_at: dayAgo.toISOString(),
updated_at: hourAgo.toISOString(),
created_by: AGENT_IDS.bePm,
assigned_to: AGENT_IDS.beDoc,
claimed_at: dayAgo.toISOString(),
started_at: dayAgo.toISOString(),
completed_at: hourAgo.toISOString(),
self_verified: true,
qa_verified: true,
branch_name: "docs/TASK-006-api-documentation",
pr_number: 38,
pr_url: "https://github.com/roboco/roboco/pull/38",
plan: null,
progress_updates: [],
checkpoints: [],
commits: [
{
hash: "def456789abc",
message: "docs: add OpenAPI documentation",
timestamp: hourAgo.toISOString(),
author_agent_id: AGENT_IDS.beDoc,
},
],
dev_notes: "Used FastAPI's built-in OpenAPI support.",
qa_notes: "Documentation is complete and accurate.",
auditor_notes: null,
quick_context: null,
},
];
// =============================================================================
// MOCK DASHBOARD DATA - Matching backend schemas exactly
// =============================================================================
export const mockDashboardStats = {
total_tasks: mockTasks.length,
tasks_in_progress: mockTasks.filter(
(t) => t.status === TaskStatus.IN_PROGRESS,
).length,
tasks_blocked: mockTasks.filter((t) => t.status === TaskStatus.BLOCKED)
.length,
tasks_completed_today: 1,
active_agents: 3,
};
// Team health - matches backend: [BACKEND, FRONTEND, UX_UI, MARKETING, BOARD]
export const mockTeamHealth = [
{
team: Team.BACKEND,
status: "ok" as const,
active_tasks: 3,
blocked_tasks: 1,
blocked_ratio: 0.33,
completed_this_week: 2,
},
{
team: Team.FRONTEND,
status: "ok" as const,
active_tasks: 2,
blocked_tasks: 0,
blocked_ratio: 0,
completed_this_week: 1,
},
{
team: Team.UX_UI,
status: "slow" as const,
active_tasks: 1,
blocked_tasks: 0,
blocked_ratio: 0,
completed_this_week: 0,
},
{
team: Team.MARKETING,
status: "ok" as const,
active_tasks: 0,
blocked_tasks: 0,
blocked_ratio: 0,
completed_this_week: 0,
},
{
team: Team.BOARD,
status: "ok" as const,
active_tasks: 2,
blocked_tasks: 0,
blocked_ratio: 0,
completed_this_week: 1,
},
];
// Recent activity - matching /dashboard/activity/recent response
// Use getter to ensure fresh timestamps on each access
export const getMockRecentActivity = () => [
{
id: mockId(),
type: "task_update",
timestamp: getMinutesAgo(5).toISOString(),
agent_id: AGENT_IDS.beDev1,
task_id: TASK_IDS.task1,
title: "Implement user authentication flow",
status: "in_progress",
action: "started",
},
{
id: mockId(),
type: "task_update",
timestamp: getMinutesAgo(15).toISOString(),
agent_id: AGENT_IDS.feDev1,
task_id: TASK_IDS.task3,
title: "Fix pagination bug in task list",
status: "claimed",
action: "claimed",
},
{
id: mockId(),
type: "task_update",
timestamp: getMinutesAgo(30).toISOString(),
agent_id: AGENT_IDS.uxDev1,
task_id: TASK_IDS.task4,
title: "Design new onboarding flow",
status: "awaiting_qa",
action: "completed",
},
{
id: mockId(),
type: "task_update",
timestamp: getMinutesAgo(45).toISOString(),
agent_id: AGENT_IDS.beDev2,
task_id: TASK_IDS.task5,
title: "Optimize database queries",
status: "blocked",
action: "blocked",
},
{
id: mockId(),
type: "task_update",
timestamp: getHoursAgo(2).toISOString(),
agent_id: AGENT_IDS.beDoc,
task_id: TASK_IDS.task6,
title: "Write API documentation",
status: "completed",
action: "passed_qa",
},
];
// Legacy export for backwards compatibility
export const mockRecentActivity = getMockRecentActivity();
// Key metrics - matching /dashboard/ceo response
export const mockKeyMetrics = {
velocity_weekly: 5,
completion_rate: 0.75,
documentation_coverage: 0.82,
active_blockers: 1,
};
// Auditor alerts
export const mockAuditorAlerts = {
urgent_count: 0,
warning_count: 1,
last_report_at: dayAgo.toISOString(),
};
// Roadmap progress
export const mockRoadmapProgress = {
current_quarter_progress: 0.65,
high_priority_total: 10,
high_priority_completed: 6,
};
// =============================================================================
// MOCK ORCHESTRATOR DATA - Matching backend OrchestratorStatusResponse
// =============================================================================
// OrchestratorStatus - matching backend schema exactly
export const mockOrchestratorStatus = {
total_agents: 19,
by_state: {
running: 2,
ready: 1,
waiting_long: 1,
idle: 15,
},
waiting_count: 1,
agents: [
{
agent_id: AGENT_IDS.beDev1,
state: "running",
task_id: TASK_IDS.task1,
error_count: 0,
started_at: hourAgo.toISOString(),
waiting_for: null,
},
{
agent_id: AGENT_IDS.feDev1,
state: "ready",
task_id: TASK_IDS.task3,
error_count: 0,
started_at: hourAgo.toISOString(),
waiting_for: null,
},
{
agent_id: AGENT_IDS.beDev2,
state: "waiting_long",
task_id: TASK_IDS.task5,
error_count: 0,
started_at: dayAgo.toISOString(),
waiting_for: "Waiting for task #1 auth implementation",
},
],
};
export const mockWaitingAgents = [
{
agent_id: AGENT_IDS.beDev2,
task_id: TASK_IDS.task5,
waiting_for: "Waiting for task #1 auth implementation",
waiting_since: hourAgo.toISOString(),
context: { blocker_task_id: TASK_IDS.task1 },
},
];
// =============================================================================
// MOCK NOTIFICATIONS - Matching backend NotificationResponse schema
// =============================================================================
export const mockNotifications = [
{
id: mockId(),
type: NotificationType.TASK_ASSIGNMENT,
priority: NotificationPriority.NORMAL,
from_agent: AGENT_IDS.bePm,
to_agents: [AGENT_IDS.beDev1],
subject: "New Task Assigned: Implement user authentication flow",
body: "You have been assigned a new high-priority task. Please review and start work.",
requires_ack: false,
is_acknowledged: false,
is_fully_acknowledged: false,
is_read: true,
related_task_id: TASK_IDS.task1,
timestamp: dayAgo.toISOString(),
expires_at: null,
},
{
id: mockId(),
type: NotificationType.BLOCKER_ESCALATION,
priority: NotificationPriority.HIGH,
from_agent: AGENT_IDS.beDev2,
to_agents: [AGENT_IDS.bePm, AGENT_IDS.mainPm],
subject: "Task Blocked: Optimize database queries",
body: "Task is blocked waiting for authentication implementation to complete.",
requires_ack: true,
is_acknowledged: false,
is_fully_acknowledged: false,
is_read: false,
related_task_id: TASK_IDS.task5,
timestamp: hourAgo.toISOString(),
expires_at: null,
},
{
id: mockId(),
type: NotificationType.REVIEW_REQUEST,
priority: NotificationPriority.NORMAL,
from_agent: AGENT_IDS.uxDev1,
to_agents: [AGENT_IDS.uxQa],
subject: "QA Review Requested: Design new onboarding flow",
body: "The onboarding flow design is complete and ready for QA review.",
requires_ack: true,
is_acknowledged: false,
is_fully_acknowledged: false,
is_read: false,
related_task_id: TASK_IDS.task4,
timestamp: hourAgo.toISOString(),
expires_at: null,
},
{
id: mockId(),
type: NotificationType.BROADCAST,
priority: NotificationPriority.NORMAL,
from_agent: AGENT_IDS.mainPm,
to_agents: mockAgents.map((a) => a.id),
subject: "Weekly Standup Tomorrow",
body: "Reminder: Weekly standup meeting tomorrow at 10:00 AM.",
requires_ack: false,
is_acknowledged: false,
is_fully_acknowledged: false,
is_read: false,
related_task_id: null,
timestamp: hourAgo.toISOString(),
expires_at: null,
},
];
// =============================================================================
// MOCK JOURNALS - Matching backend JournalResponse/JournalEntryResponse schemas
// =============================================================================
export const mockJournals = [
{
id: mockId(),
agent_id: AGENT_IDS.beDev1,
total_entries: 5,
last_entry_at: hourAgo.toISOString(),
latest_summary:
"Working on auth implementation. Good progress on database schema and service layer.",
summary_updated_at: hourAgo.toISOString(),
entries_by_type: {
[JournalEntryType.TASK_REFLECTION]: 2,
[JournalEntryType.DECISION_LOG]: 1,
[JournalEntryType.LEARNING]: 2,
},
created_at: weekAgo.toISOString(),
updated_at: hourAgo.toISOString(),
},
];
export const mockJournalEntries = [
{
id: mockId(),
journal_id: mockJournals[0].id,
type: JournalEntryType.TASK_REFLECTION,
title: "Auth Implementation Progress",
content:
"Completed the database migrations and basic auth service. JWT implementation is clean and follows best practices.",
task_id: TASK_IDS.task1,
session_id: null,
timestamp: hourAgo.toISOString(),
tags: ["auth", "database", "jwt"],
sentiment: "positive",
is_private: false,
created_at: hourAgo.toISOString(),
updated_at: null,
},
{
id: mockId(),
journal_id: mockJournals[0].id,
type: JournalEntryType.DECISION_LOG,
title: "Chose bcrypt over argon2",
content:
"Decided to use bcrypt for password hashing. While argon2 is newer, bcrypt is more widely supported and battle-tested.",
task_id: TASK_IDS.task1,
session_id: null,
timestamp: dayAgo.toISOString(),
tags: ["auth", "security", "decision"],
sentiment: "neutral",
is_private: false,
created_at: dayAgo.toISOString(),
updated_at: null,
},
];
// =============================================================================
// MOCK KANBAN BOARDS - Matching backend KanbanBoard schema
// =============================================================================
export const mockKanbanDevBoard = {
id: mockId(),
title: "Backend Development",
board_type: "dev",
team: Team.BACKEND,
columns: [
{
id: mockId(),
title: "Backlog",
status: TaskStatus.PENDING,
cards: [
{
id: TASK_IDS.task2,
title: "Build dashboard components",
priority: 2,
status: TaskStatus.PENDING,
assignee_name: null,
is_blocked: false,
},
],
card_count: 1,
},
{
id: mockId(),
title: "In Progress",
status: TaskStatus.IN_PROGRESS,
cards: [
{
id: TASK_IDS.task1,
title: "Implement user authentication flow",
priority: 1,
status: TaskStatus.IN_PROGRESS,
assignee_name: "Backend Developer 1",
is_blocked: false,
},
],
card_count: 1,
},
{
id: mockId(),
title: "Blocked",
status: TaskStatus.BLOCKED,
cards: [
{
id: TASK_IDS.task5,
title: "Optimize database queries",
priority: 1,
status: TaskStatus.BLOCKED,
assignee_name: "Backend Developer 2",
is_blocked: true,
},
],
card_count: 1,
},
{
id: mockId(),
title: "Done",
status: TaskStatus.COMPLETED,
cards: [
{
id: TASK_IDS.task6,
title: "Write API documentation",
priority: 3,
status: TaskStatus.COMPLETED,
assignee_name: "Backend Documenter",
is_blocked: false,
},
],
card_count: 1,
},
],
total_cards: 4,
blocked_count: 1,
};
// =============================================================================
// MOCK AUDITOR DATA - Matching backend dashboard.py schemas
// =============================================================================
export const mockAuditorFlags = [
{
id: mockId(),
severity: FlagSeverity.WARNING,
category: "blocked",
title: "Task blocked for extended period",
description:
"Task 'Optimize database queries' has been blocked for over 24 hours.",
related_task_id: TASK_IDS.task5,
related_agent_id: AGENT_IDS.beDev2,
created_at: hourAgo.toISOString(),
resolved_at: null,
notes: null,
},
{
id: mockId(),
severity: FlagSeverity.INFO,
category: "process",
title: "QA queue growing",
description:
"Multiple tasks awaiting QA review. Consider allocating additional QA resources.",
related_task_id: null,
related_agent_id: null,
created_at: dayAgo.toISOString(),
resolved_at: null,
notes: null,
},
];
export const mockAuditorReports = [
{
id: mockId(),
report_type: "daily",
title: "Daily Status Report - " + now.toLocaleDateString(),
summary:
"Overall team productivity is good. One blocker identified in backend team.",
sections: [
{
title: "Completed Tasks",
content: "1 task completed (API documentation)",
},
{ title: "In Progress", content: "2 tasks in progress (auth, bug fix)" },
{ title: "Blockers", content: "1 task blocked (database optimization)" },
],
created_at: hourAgo.toISOString(),
sent_at: null,
},
];
export const mockAuditorDashboard = {
flagged_items: mockAuditorFlags,
metrics: {
total_flags: 2,
unresolved_flags: 2,
tasks_reviewed_today: 1,
avg_review_time_hours: 2.5,
},
audit_queue: [
{
type: "qa_review",
title: "Design new onboarding flow",
task_id: TASK_IDS.task4,
team: Team.UX_UI,
},
],
recent_reports: mockAuditorReports,
findings: [],
};
// Mock mode: dev = mock, production = real backend
export const isMockMode = () => process.env.NODE_ENV === "development";