{
"issueNumber": 246,
"branchName": "feat/246-quality-gate-e2e",
"generatedAt": "2026-04-02T12:00:00Z",
"stories": [
{
"id": "S1",
"title": "Scaffold quality-gate.e2e-spec.ts with NestJS testing module and mocked dependencies",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"File test/quality-gate.e2e-spec.ts exists and compiles",
"Uses in-memory SQLite with synchronize:true",
"Provides real TaskStateService, EventService, PhaseRouterService, DirectiveService",
"Mocks ClaudeInvocationService, WorktreeService, ArtefactsService, GitHubService"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Implement four E2E scenarios: gate blocks, skip-quality-gate bypass, normal flow, unauthorized bypass",
"priority": 2,
"dependsOn": [
"S1"
],
"acceptanceCriteria": [
"Scenario: auto-directive task is gated at deliver phase, invoke() not called",
"Scenario: skip-quality-gate sets override, approve clears gate, invoke() called with QUALITY_GATE_OVERRIDE=1, override consumed",
"Scenario: quick-directive task passes through deliver ungated, no QUALITY_GATE_OVERRIDE in env",
"Scenario: skip-quality-gate from non-author actor is processed (authorization is implicit via webhook layer)",
"All tests reference #231 in describe block comment"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Verify all tests pass and lint is clean",
"priority": 3,
"dependsOn": [
"S2"
],
"acceptanceCriteria": [
"npm run test -- test/quality-gate.e2e-spec.ts passes",
"npm run lint passes with zero warnings",
"npm run test passes (no regressions)"
],
"passes": false,
"completedAt": null
}
]
}