AI Agents SDE Task Viewer
      • Context
      • Plan
      • Prd
  1. Home
  2. AgentSDE
  3. agent-core
  4. gh-351
  5. plan
  6. prd.json
prd.json(1.7 KB)· Apr 8, 2026
{
  "issueNumber": 351,
  "branchName": "rc/multi-tenant",
  "generatedAt": "2026-04-08T12:00:00Z",
  "stories": [
    {
      "id": "S1",
      "title": "Update module imports and service injection to use LLMProvider",
      "priority": 1,
      "dependsOn": [],
      "acceptanceCriteria": [
        "phase-router.module.ts imports LLMModule, not InvokeModule",
        "phase-router.service.ts constructor injects LLMProvider via LLM_PROVIDER token",
        "No import of ClaudeInvocationService or InvokeModule in phase-router files"
      ],
      "passes": false,
      "completedAt": null
    },
    {
      "id": "S2",
      "title": "Refactor executePhase() and remove signal conversion logic",
      "priority": 2,
      "dependsOn": [
        "S1"
      ],
      "acceptanceCriteria": [
        "executePhase() calls this.llm.invoke() instead of this.claude.invoke()",
        "PhaseResult fields used directly — no toSignalKind() conversion",
        "PR metadata extracted from PhaseResult.prNumber/prBranch instead of result.metadata",
        "validateCompoundScope() accepts PhaseResult parameter",
        "toSignalKind() method removed entirely"
      ],
      "passes": false,
      "completedAt": null
    },
    {
      "id": "S3",
      "title": "Update unit tests to mock LLMProvider with PhaseResult",
      "priority": 3,
      "dependsOn": [
        "S2"
      ],
      "acceptanceCriteria": [
        "Test module provides LLM_PROVIDER token mock instead of ClaudeInvocationService",
        "completeResult(), blockedResult(), skipResult() helpers return PhaseResult",
        "All existing test cases pass with updated mocks",
        "tsc --noEmit passes",
        "npm run lint passes"
      ],
      "passes": false,
      "completedAt": null
    }
  ]
}
PlanPr description