{
"issueNumber": 228,
"branchName": "feat/228-pre-pr-quality-gate",
"generatedAt": "2026-04-01T22:45:00Z",
"stories": [
{
"id": "S1",
"title": "Add skip-quality-gate directive and task entity column",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"skip-quality-gate is in ALLOWED_DIRECTIVES and VALID_DIRECTIVES",
"TaskEntity has qualityGateOverride boolean column defaulting to false",
"TaskStateService has setQualityGateOverride method",
"DirectiveService handles skip-quality-gate by setting the flag and posting confirmation"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Create pre-pr-gate.sh shared quality gate script",
"priority": 2,
"dependsOn": [],
"acceptanceCriteria": [
"Script runs npm run lint, npm run test, and merge conflict check",
"Script accepts --skip flag to bypass checks and output override note",
"Script outputs structured markdown block with check results",
"Script exits non-zero if any check fails (unless --skip)"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Update deliver-implementation skill and PR description standard",
"priority": 3,
"dependsOn": [
"S1",
"S2"
],
"acceptanceCriteria": [
"deliver-implementation calls pre-pr-gate.sh instead of inline lint/test",
"One fix iteration attempted on gate failure before signaling BLOCKED",
"Quality Checks section included in PR body with commands, results, and conflict status",
"QUALITY_GATE_OVERRIDE env var checked and passed as --skip flag",
"PR description standard documents the Quality Checks section"
],
"passes": false,
"completedAt": null
},
{
"id": "S4",
"title": "Wire override env var through phase-router invocation and write tests",
"priority": 4,
"dependsOn": [
"S1"
],
"acceptanceCriteria": [
"PhaseRouterService passes QUALITY_GATE_OVERRIDE=1 env var when task has qualityGateOverride=true",
"directive.service.spec.ts covers skip-quality-gate handling",
"phase-router.service.spec.ts covers override env passthrough",
"npm run test passes",
"npm run lint passes"
],
"passes": false,
"completedAt": null
}
]
}