{
"issueNumber": 247,
"branchName": "feat/issue-167",
"generatedAt": "2026-04-02T12:00:00Z",
"stories": [
{
"id": "S1",
"title": "Create integration test file with NestJS test module wiring both InternalAdapterService and DirectiveService against in-memory SQLite",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"File exists at test/integration/blocked-persistent-gated-refine.integration.spec.ts",
"Test module uses real TypeORM with in-memory SQLite and real TaskEntity repository",
"External I/O (GitHub API, job queue, dispatch) is mocked"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Implement four test cases: gated transition, refine acceptance, refine rejection, and idempotent re-block",
"priority": 2,
"dependsOn": [
"S1"
],
"acceptanceCriteria": [
"Test: BLOCKED:PERSISTENT sets status=gated, gatePhase, gateReason",
"Test: applyDirective('refine') on gated task succeeds (clears gate, enqueues refine)",
"Test: applyDirective('refine') on non-gated task is rejected",
"Test: re-firing BLOCKED:PERSISTENT on already-gated task is idempotent",
"All tests include inline comments referencing #243 and #237"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Run tests and lint to verify all pass",
"priority": 3,
"dependsOn": [
"S2"
],
"acceptanceCriteria": [
"npm run test -- --testPathPattern=blocked-persistent-gated-refine passes",
"npm run lint reports zero warnings"
],
"passes": false,
"completedAt": null
}
]
}