{
"issueNumber": 347,
"branchName": "rc/multi-tenant",
"generatedAt": "2026-04-08T12:00:00Z",
"stories": [
{
"id": "S1",
"title": "Create CredentialManager interface, types, injection token, and CredentialError class",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"credential-manager.interface.ts exports CredentialManager interface, PlatformCredentials, LLMCredentials, and CREDENTIAL_MANAGER Symbol",
"credential-error.ts exports CredentialError extending Error with name='CredentialError'",
"tsc --noEmit passes"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Implement EnvCredentialManager and CredentialModule",
"priority": 2,
"dependsOn": [
"S1"
],
"acceptanceCriteria": [
"EnvCredentialManager implements CredentialManager interface",
"getPlatformCredentials returns GITHUB_TOKEN (or HUMAN_PAT fallback) and GITHUB_WEBHOOK_SECRET",
"getPlatformCredentials throws CredentialError when neither GITHUB_TOKEN nor HUMAN_PAT is set",
"getLLMCredentials returns ANTHROPIC_API_KEY or empty string",
"credentialPath parameter is accepted but ignored",
"CredentialModule provides CREDENTIAL_MANAGER token and exports it",
"tsc --noEmit passes"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Write unit tests and verify all quality checks pass",
"priority": 3,
"dependsOn": [
"S2"
],
"acceptanceCriteria": [
"env-credential-manager.spec.ts covers: happy path, HUMAN_PAT fallback, missing token error, missing ANTHROPIC_API_KEY",
"npm run test passes",
"npm run lint passes",
"No existing files modified"
],
"passes": false,
"completedAt": null
}
]
}