dev-analysis
Generate SPDD enriched context from a Jira story, with review loop and git commit. For developers in a repository.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Generate SPDD enriched context from a Jira story, with review loop and git commit. For developers in a repository.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Generate INVEST-compliant user story and create it directly in Jira. For product owners creating requirements without technical knowledge.
Review a PR produced by dev-implement — AI-scored findings against REASONS canvas and Jira ACs, interactive manual testing, and gated merge/reject/request-changes flow. For tech leads reviewing a developer's implementation. Jira transitions to "Done" on merge.
Generate REASONS canvas from a Jira story + analysis doc, with review loop, then TDD code generation, lint, build, and PR update. For developers in a repository.
| name | dev-analysis |
| description | Generate SPDD enriched context from a Jira story, with review loop and git commit. For developers in a repository. |
| metadata | {"type":"skill"} |
Generate a strategic-level enriched context document (SPDD Phase 0) from a Jira user story. Fetches the story via Atlassian MCP, explores the codebase concept-by-concept, produces an analysis document, submits it for developer review with an iterative loop, and commits to git with a PR.
Entry point: Use when a developer has a Jira story key and needs to generate the enriched context analysis before building the REASONS canvas.
Prerequisites: Must be run from within a git repository with the project codebase present. Requires git credentials and GitHub/Atlassian MCP access.
Ask for:
1. Jira issue key (e.g., OB-401)
If not provided, ask the user:
"Which Jira issue key should I analyze? (e.g., OB-123)"
Verify the key format matches ^[A-Z]+-\d+$.
Detect Jira cloud ID from session context (should be available from prior Jira MCP operations). If not in session, ask:
2. Jira cloud domain (e.g., gds-digital-transformation.atlassian.net)
Success criterion: Have a valid Jira key and cloud ID.
Call mcp__atlassian__getJiraIssue:
cloudId: {detected or provided}
issueIdOrKey: {user-provided key}
fields: ["summary", "description", "issuetype", "created", "assignee", "components", "labels"]
Extract from the returned issue:
OB-401)Success criterion: Issue fetched and story content available.
List and read existing files in the project to establish naming conventions and prevent duplication:
a. If spdd/analysis/ exists:
GGQPA-XXX or use real keys like OB-), naming conventions, existing concept inventoriesb. If spdd/prompt/ exists:
Output: Context on naming patterns, prior analysis scope, and architectural conventions discovered.
Bootstrap understanding of the project quickly (do NOT read exhaustively).
a. Primary build/dependency file (ONE file only):
package.json, pom.xml, build.gradle, requirements.txt, go.mod, Cargo.toml (whichever exists)b. Directory structure:
src/, lib/, app/, services/, controllers/, etc.c. Main configuration file (ONE file only):
application.yml, .env, .env.example, next.config.js, webpack.config.js, etc.Output: Tech stack, project structure, infrastructure decisions.
Analyze the story (summary + description + acceptance criteria) without touching code yet:
a. Domain nouns — entity/concept names likely to map to code:
b. Action verbs — operations likely to map to endpoints or services:
c. API surfaces — any explicitly mentioned paths or endpoints:
POST /api/submissions, GET /dashboardd. Technical hints — mentioned technologies, patterns, domain terms:
e. Data/System boundaries — what systems integrate?
Output: A curated list of 5–10 search concepts that will guide codebase exploration.
Search for and read schema/entity definitions matching the extracted concepts (if the project uses a database).
a. Schema files (migrations, ORM definitions):
db/migrations/, schema/, models/, entities/submissions references repositories, read repositories too)b. If using ORM (TypeScript/Node, Java Hibernate, Python SQLAlchemy, etc.):
Output: List of data entities relevant to the story, with key attributes and relationships.
Search the codebase for implementations matching the extracted concepts.
a. By file name:
*Submission*, *Dashboard*, *Repository*, etc.b. By directory/package structure:
src/services/ exists, look there)c. One-hop dependencies:
SubmissionService, and it injects RepositoryClient, read that tood. Architecture conventions:
Output: Existing implementations for the concept area, coding style, architecture patterns in use.
If spdd/analysis/ or spdd/prompt/ exist:
Output: Prior architectural decisions and risk patterns relevant to this story.
Synthesize findings from Steps 4–8 into a conceptual model:
### Domain Concept Identification
#### Existing Concepts (from codebase)
- [ConceptName]: [business purpose] — [current role in system]
Attributes/methods: [key ones from code exploration]
Relationships: [which other concepts it relates to]
[... repeat for each existing concept relevant to the story ...]
#### New Concepts Required
- [ConceptName]: [business purpose] — [how it relates to existing concepts]
Why new: [rationale from story requirements]
[... repeat ...]
#### Key Business Rules
- [Rule]: [which concepts it governs]
Existing implementation: [if found in codebase]
Gaps: [if not yet implemented]
[... repeat ...]
Quality standards:
Determine the high-level solution direction for this story:
### Strategic Approach
#### Solution Direction
[High-level description of how to solve this story, drawing on the architecture and patterns discovered]
Example: "Implement a REST API endpoint that aggregates submission metrics from the existing metrics repository, then render them in a new React dashboard component. Leverage existing time-series querying patterns."
#### Key Design Decisions
- [Decision]: [trade-offs] → [recommendation and rationale]
Example:
- Real-time data update mechanism: WebSocket (low latency, higher complexity) vs. polling (simpler, higher latency)
→ Polling every 15–30 seconds meets the AC requirement for "visible within 1 minute" and aligns with existing polling patterns in the dashboard layer
[... repeat for each major design decision ...]
#### Alternatives Considered
- [Alternative approach]: [why rejected]
Example:
- Generating the dashboard as a static site: rejected because story requires real-time updates and drill-down interactivity
Quality standards:
Surface everything that could cause problems:
### Risk & Gap Analysis
#### Requirement Ambiguities
- [Ambiguity]: [what needs clarification]
Impact: [why it matters]
Example:
- AC1 specifies "real-time" but AC2 specifies "update every 15–30 seconds" — these are technically different. Clarify: does "real-time" in AC1 mean sub-second or is 15–30s acceptable?
[... repeat ...]
#### Edge Cases
- [Scenario]: [why it matters for implementation]
Example:
- What happens if metrics API is temporarily unavailable? Dashboard currently shows stale data; clarify acceptable fallback behavior.
[... repeat ...]
#### Technical Risks
- [Risk]: [potential impact and mitigation direction]
Example:
- High-volume metrics (1,000+ submissions/minute) could overwhelm the charting library if polling fetches all data points. Mitigation: aggregate data points per minute before sending to frontend, or implement virtual scrolling in the chart.
[... repeat ...]
#### Acceptance Criteria Coverage
| AC# | Description | Addressable with proposed approach? | Gaps/Notes |
|-----|-------------|-------------------------------------|-----------|
| 1 | Real-time volume display | Yes | Need to clarify "real-time" definition |
| 2 | Error rate trend | Yes | Requires error classification logic in metrics layer |
| ... | ... | ... | ... |
Quality standards:
Combine all analysis into a final document and immediately persist it to disk so it is not lost if the session is interrupted.
{JIRA}-{TIMESTAMP}-[Analysis]-{description}.md
Where:
OB-401) or GGQPA-XXX if key not reliably extractableYYYYMMDDHHmm format (e.g., 202606161430)real-time-sbom-submission-dashboard)Example: OB-401-202606161430-[Analysis]-real-time-sbom-submission-dashboard.md
# SPDD Analysis: [Derived Title from Jira Summary]
**Original Jira Issue:** [{KEY}](https://[cloudId]/browse/{KEY})
**Issue Summary:** [One-line from Jira summary]
**Issue Type:** Story / Task / Bug
**Created:** [date from Jira]
---
## Original Jira Story
[COMPLETE Jira description — unmodified verbatim, including all acceptance criteria]
---
## Domain Concept Identification
[Output from Step 9]
---
## Strategic Approach
[Output from Step 10]
---
## Risk & Gap Analysis
[Output from Step 11]
IMPORTANT:
mkdir -p spdd/analysis
Write the complete enriched context document to spdd/analysis/{filename}.md.
This ensures the analysis is never lost even if the session ends unexpectedly.
Show the complete enriched context document to the developer:
✅ Analysis Generated
[Display full document in a code block or formatted text]
---
**Happy with this, or describe changes you'd like?**
Examples of feedback I can handle:
- "Make the risk section more specific about the high-volume scenario"
- "Drop the alternative about static site generation"
- "Add a note about caching strategy"
- "Clarify the relationship between concepts X and Y"
Wait for feedback.
Accept natural language feedback and regenerate affected sections only:
a. If developer provides feedback:
spdd/analysis/{filename}.md) with the revised contentb. If developer confirms (e.g., "LGTM", "looks good", "yes"):
c. If developer asks for more changes:
Key: Preserve the review loop until developer explicitly confirms. Accept multiple rounds of refinement. Every revision is saved to disk immediately.
a. Create and checkout branch:
git checkout -b spdd/{JIRA-KEY}-analysis
Example: git checkout -b spdd/OB-401-analysis
b. Stage the file:
git add spdd/analysis/{filename}.md
c. Commit (conventional commit format, no Claude attribution):
git commit -m "docs(spdd): add analysis for {JIRA-KEY}"
Example: git commit -m "docs(spdd): add analysis for OB-401"
d. Push with upstream (leveraging user's push.autosetupremote = true):
git push
e. Create Pull Request via mcp__github__create_pull_request:
title: "[{JIRA-KEY}] SPDD analysis"
head: "spdd/{JIRA-KEY}-analysis"
base: "main" (or infer from repo default)
body: [see Step 16]
Construct the PR description:
## SPDD Analysis: {Jira Summary}
**Jira Issue:** [{KEY}](https://[cloudId]/browse/{KEY})
**Story Type:** [Story / Task / Bug]
---
### Key Design Decisions
{Extract 3–5 most important decisions from the Strategic Approach section}
Example:
- Real-time updates via polling every 15–30s (not WebSocket) to keep implementation simple and align with existing patterns
- Drill-down reveals repo-level breakdown and error type breakdown in a modal dialog
- Error rate threshold highlighting (>5%) to draw attention to elevated error periods
---
### Primary Risks & Mitigations
{Extract 2–3 most critical risks from the Risk & Gap Analysis section}
Example:
- High-volume metrics could overwhelm the charting library → aggregate per-minute before frontend
- Metrics API availability — dashboard shows stale data on unavailability (needs UX clarification)
---
### Analysis File
[File name and path: `spdd/analysis/{filename}.md`]
---
Generated via dev-analysis skill.
a. Fetch available transitions for the issue via mcp__atlassian__getTransitionsForJiraIssue:
cloudId: [from session]
issueIdOrKey: {JIRA-KEY}
Extract transition names and IDs (e.g., "To Do" → "In Progress", "Ready" → "In Review")
b. Automatically transition to In Progress:
mcp__atlassian__transitionJiraIssue with that transition ID — no prompt neededc. Add Jira comment via mcp__atlassian__addCommentToJiraIssue:
cloudId: [from session]
issueIdOrKey: {JIRA-KEY}
commentBody: [see Step 18]
contentFormat: "markdown"
Construct a brief summary comment:
✅ **SPDD Analysis complete**
Analysis file: `spdd/analysis/{filename}.md`
Pull Request: [View PR on GitHub]({PR URL})
**Key Decisions:** [2–3 bullet points from Strategic Approach]
**Next Step:** Review the PR, merge when ready. Then run the SPDD canvas generation.
Return to developer:
✅ Analysis and PR created successfully!
📋 Summary:
- Jira Issue: {KEY} - {Summary}
→ {Jira URL}
- Analysis File: spdd/analysis/{filename}.md
- Pull Request: {PR URL}
- Status Transitioned: In Progress ✅ (or "No matching transition found — skipped" if none available)
🔗 Next Steps:
- Review the PR and merge when ready
- Run the dev-implement skill to generate the REASONS Canvas
- Then /spdd-generate to write the implementation
💬 Feedback on the analysis? Ask for revisions anytime.
This skill is the dev-side Phase 0 — bridges Jira (product source of truth) to git (technical source of truth):
Jira Story (created by po-story)
↓
dev-analysis skill (you are here)
↓
spdd/analysis/{KEY}-*.md (enriched context)
↓
[Merge PR]
↓
dev-implement skill (future)
↓
spdd/prompt/{KEY}-*.md (REASONS Canvas)
↓
/spdd-generate (Phase 2 command)
↓
Implementation code