{
"issueNumber": 41,
"branchName": "feat/41-centralize-viewer-urls",
"generatedAt": "2026-04-01T12:00:00Z",
"stories": [
{
"id": "S1",
"title": "Add vitest test framework and configure path alias",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"vitest is in devDependencies",
"npm test runs vitest",
"@ path alias resolves correctly in tests"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Create lib/viewer.ts with centralized E2E_REPOS, getArtefactsSubdir, and getViewerUrl",
"priority": 2,
"dependsOn": [],
"acceptanceCriteria": [
"E2E_REPOS defined once in lib/viewer.ts",
"getArtefactsSubdir returns tasks/e2e for e2e repos, tasks/production otherwise",
"getViewerUrl composes full viewer URL",
"Source-of-truth comment references agent-core ArtefactsService.getArtefactsSubdir"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Add unit tests for viewer helper in lib/viewer.test.ts",
"priority": 3,
"dependsOn": [
"S1",
"S2"
],
"acceptanceCriteria": [
"Test asserts tasks/e2e for agent-core-e2e",
"Test asserts tasks/production for a production repo",
"Test handles owner/repo format",
"npm test passes"
],
"passes": false,
"completedAt": null
},
{
"id": "S4",
"title": "Refactor all three page components to use shared viewer helper",
"priority": 4,
"dependsOn": [
"S2"
],
"acceptanceCriteria": [
"No local E2E_REPOS or viewerUrl definitions remain in page components",
"All viewer links use getViewerUrl from lib/viewer",
"npm run lint passes",
"npm run build passes"
],
"passes": false,
"completedAt": null
}
]
}