{
"issueNumber": 543,
"branchName": "rc/atlassian-integration",
"generatedAt": "2026-04-23T17:11:22Z",
"stories": [
{
"id": "S1",
"title": "Add JIRA_* env vars to Joi schema and .env.example",
"priority": 1,
"dependsOn": [],
"acceptanceCriteria": [
"configValidationSchema includes JIRA_OAUTH_CLIENT_ID, JIRA_OAUTH_CLIENT_SECRET, JIRA_OAUTH_REFRESH_TOKEN, JIRA_SITE_URL, JIRA_CLOUD_ID, JIRA_PROJECT_KEY, JIRA_BOT_USERNAME as optional strings",
".env.example documents all seven JIRA_* vars with placeholders",
"App boots cleanly with none of the JIRA_* vars set"
],
"passes": false,
"completedAt": null
},
{
"id": "S2",
"title": "Create JiraOAuthAuthProvider extending AtlassianOAuthAuthProvider with unit tests",
"priority": 2,
"dependsOn": [
"S1"
],
"acceptanceCriteria": [
"Class declares `readonly platform = 'jira'` and passes `https://auth.atlassian.com/oauth/token` to the base class",
"getBotUsername() returns JIRA_BOT_USERNAME from ConfigService",
"getBotUsername() throws a descriptive error when JIRA_BOT_USERNAME is missing",
"Spec covers: platform id, happy-path bot username, missing-config error, token endpoint forwarding",
"If #541 is not yet merged, a minimal atlassian-oauth-auth.provider.ts stub is added locally per AGENTS.md Wave N guidance"
],
"passes": false,
"completedAt": null
},
{
"id": "S3",
"title": "Create JiraModule with gated useFactory and update CLAUDE.md",
"priority": 3,
"dependsOn": [
"S2"
],
"acceptanceCriteria": [
"JiraModule registers PLATFORM_AUTH_PROVIDER via useFactory returning JiraOAuthAuthProvider only when config.get('JIRA_OAUTH_CLIENT_ID') is truthy",
"Module exports PLATFORM_AUTH_PROVIDER",
"CLAUDE.md Key modules list mentions the new atlassian module",
"npm run lint and npm run test pass with zero warnings"
],
"passes": false,
"completedAt": null
}
]
}