{
"meta": {
"agent": "planner",
"task_id": "42",
"title": "Exclude agent-core-e2e issues from Control Center (global filter)",
"created_at": "2026-04-01T12:00:00Z"
},
"inputs": [
{
"name": "GitHub issue #42",
"type": "context",
"ref": "AgentSDE/agent-core-control-center#42",
"notes": "Exclude e2e repo items from all CC UI surfaces"
},
{
"name": "Pipeline page (reference impl)",
"type": "file",
"ref": "app/pipeline/page.tsx",
"notes": "Already implements excludeRepo + Show e2e toggle"
},
{
"name": "AGENTS.md",
"type": "context",
"ref": "AGENTS.md",
"notes": "No test runner; verification via lint + build only"
}
],
"outputs": [
{
"name": "plan.md",
"type": "plan",
"format": "md",
"content": "Implementation plan for global e2e filtering"
}
],
"files": [
{
"path": "lib/constants.ts",
"action": "create",
"reason": "Shared E2E_REPO, E2E_REPOS, VIEWER_BASE constants"
},
{
"path": "lib/api/jobs.ts",
"action": "modify",
"reason": "Add excludeRepo to JobFilters and query builder"
},
{
"path": "lib/api/events.ts",
"action": "modify",
"reason": "Add excludeRepo to EventFilters and query builder"
},
{
"path": "lib/api/tasks.ts",
"action": "modify",
"reason": "Import E2E_REPO from shared constants"
},
{
"path": "app/pipeline/page.tsx",
"action": "modify",
"reason": "Import shared constants, remove local duplicates"
},
{
"path": "app/pipeline/[taskId]/page.tsx",
"action": "modify",
"reason": "Import shared constants, remove local duplicates"
},
{
"path": "app/jobs/page.tsx",
"action": "modify",
"reason": "Add excludeRepo default filter and Show e2e toggle"
},
{
"path": "app/events/page.tsx",
"action": "modify",
"reason": "Add excludeRepo default filter and Show e2e toggle"
},
{
"path": "app/agents/page.tsx",
"action": "modify",
"reason": "Client-side e2e filtering with toggle"
},
{
"path": "app/dashboard/page.tsx",
"action": "modify",
"reason": "Exclude e2e from metrics/task widgets"
}
],
"steps": [
{
"id": "S1",
"summary": "Create shared constants module and update API filter interfaces",
"acceptance": [
"lib/constants.ts exports E2E_REPO, E2E_REPOS, and VIEWER_BASE",
"JobFilters and EventFilters interfaces include excludeRepo?: string",
"getJobs() and getEvents() serialize excludeRepo to query params"
],
"depends_on": []
},
{
"id": "S2",
"summary": "Consolidate pipeline pages to use shared constants",
"acceptance": [
"app/pipeline/page.tsx imports from lib/constants.ts, no local E2E_REPO/E2E_REPOS/VIEWER_BASE",
"app/pipeline/[taskId]/page.tsx imports from lib/constants.ts, no local E2E_REPOS/VIEWER_BASE",
"Existing pipeline filtering behavior unchanged"
],
"depends_on": [
"S1"
]
},
{
"id": "S3",
"summary": "Add e2e exclusion to jobs, events, agents, and dashboard pages",
"acceptance": [
"Jobs page excludes e2e by default with Show e2e toggle",
"Events page excludes e2e by default with Show e2e toggle",
"Agents page filters out e2e tasks client-side by default with toggle",
"Dashboard excludes e2e data where feasible"
],
"depends_on": [
"S1"
]
},
{
"id": "S4",
"summary": "Verify lint and build pass",
"acceptance": [
"npm run lint exits 0 with zero warnings",
"npm run build exits 0 with no errors"
],
"depends_on": [
"S2",
"S3"
]
}
],
"risks": [
{
"risk": "Backend jobs/events/metrics APIs may not support excludeRepo query param",
"mitigation": "Fall back to client-side filtering; API param is additive and ignored if unsupported"
},
{
"risk": "Dashboard metrics are pre-aggregated and cannot be filtered by repo",
"mitigation": "Document as known gap; filter only task-level widgets client-side"
}
],
"assumptions": [
"The backend agent-core API already supports excludeRepo on the tasks endpoint (confirmed by existing pipeline page usage)",
"Adding excludeRepo to jobs/events API calls is safe even if the backend ignores unknown query params"
],
"open_questions": []
}