@groupby/ai-dev 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/teams/fhr-core/github/pull_request_template.md +19 -0
- package/teams/fhr-core/resources/spec-template.md +22 -0
- package/teams/fhr-core/skills/jira-ticket/SKILL.md +47 -0
- package/teams/fhr-core/skills/plan-spec/SKILL.md +57 -0
- package/teams/fhr-core/skills/refine-spec/SKILL.md +47 -0
- package/teams/fhr-core/skills/tdd-green/SKILL.md +61 -0
- package/teams/fhr-core/skills/tdd-red/SKILL.md +50 -0
- package/teams/fhr-core/skills/tdd-workflow/SKILL.md +51 -0
package/package.json
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
PR TITLE must follow: FHR-<number>: <description>
|
|
3
|
+
Example: FHR-7113: Add AI-first development workflow for FAS
|
|
4
|
+
The pull-request.yml CI check will fail if the format is wrong.
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
## Jira ticket
|
|
8
|
+
|
|
9
|
+
[FHR-XXXX](https://attraqt.atlassian.net/browse/FHR-XXXX)
|
|
10
|
+
|
|
11
|
+
## AI Development Checklist
|
|
12
|
+
|
|
13
|
+
- [ ] Specification file present
|
|
14
|
+
- [ ] Unit tests present and passing
|
|
15
|
+
- [ ] Documentation file present
|
|
16
|
+
- [ ] AI tool used: _Claude Code / Copilot / Agent / Other_
|
|
17
|
+
- [ ] Tests generated/refined with AI (failing tests written before implementation)
|
|
18
|
+
- [ ] AI review pass completed (visible in PR comments)
|
|
19
|
+
- [ ] Repo context files (`CLAUDE.md`, `AGENTS.md`, `architecture.md`, `coding-guidelines.md`, `glossary.md`) still accurate
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# FHR-XXXX TITLE
|
|
2
|
+
|
|
3
|
+
> Task description, including background context, user stories, and so on.
|
|
4
|
+
|
|
5
|
+
## Acceptance Criteria
|
|
6
|
+
|
|
7
|
+
**Functional requirements**
|
|
8
|
+
> - criteria 1
|
|
9
|
+
> - criteria 2
|
|
10
|
+
> - ...
|
|
11
|
+
|
|
12
|
+
**Non-Functional requirements**
|
|
13
|
+
> - criteria 1
|
|
14
|
+
> - criteria 2
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Design and Implementation Plan
|
|
18
|
+
|
|
19
|
+
> Fill with the design and implementation plan.
|
|
20
|
+
> List of user acceptance tests
|
|
21
|
+
> List of unit tests
|
|
22
|
+
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jira-ticket
|
|
3
|
+
description: Fetch a Jira ticket by number using the Atlassian MCP and report a summary. Use when the user says "jira", "ticket", or provides a ticket number like FHR-1234 or FAS-5678.
|
|
4
|
+
tools: mcp__atlassian__getJiraIssue, mcp__atlassian__getAccessibleAtlassianResources
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Jira Ticket Summary
|
|
8
|
+
|
|
9
|
+
Fetch a Jira ticket via the Atlassian MCP and return a structured summary.
|
|
10
|
+
|
|
11
|
+
## Prerequisites
|
|
12
|
+
|
|
13
|
+
The `atlassian` MCP server must be connected and authenticated. If the MCP tools are unavailable, tell the user:
|
|
14
|
+
> The Atlassian MCP isn't connected. Run `/mcp` to connect and authenticate, then try again.
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
|
|
18
|
+
1. **Validate input**: the ticket number comes from `$ARGUMENTS` (e.g. `FHR-6921`). If empty, ask the user for one.
|
|
19
|
+
|
|
20
|
+
2. **Fetch the ticket** with the `mcp__atlassian__getJiraIssue` tool:
|
|
21
|
+
- `cloudId`: `attraqt.atlassian.net`
|
|
22
|
+
- `issueIdOrKey`: the ticket number from `$ARGUMENTS`
|
|
23
|
+
- `responseContentFormat`: `markdown` (so the description comes back as plain text, not ADF JSON)
|
|
24
|
+
- `fields`: `["summary", "status", "assignee", "reporter", "description", "labels", "components", "issuetype", "priority", "issuelinks", "fixVersions"]`
|
|
25
|
+
|
|
26
|
+
If the call fails with a cloudId/site error, call `mcp__atlassian__getAccessibleAtlassianResources` to find the correct cloudId, then retry with that value.
|
|
27
|
+
|
|
28
|
+
3. **Check for errors**: if the tool returns an error (e.g. issue not found, no access), report it clearly and stop.
|
|
29
|
+
|
|
30
|
+
4. **Report** a structured summary using these fields from the response:
|
|
31
|
+
|
|
32
|
+
- **Ticket**: `key` — `fields.summary`
|
|
33
|
+
- **Type / Priority**: `fields.issuetype.name` / `fields.priority.name`
|
|
34
|
+
- **Status**: `fields.status.name`
|
|
35
|
+
- **Assignee**: `fields.assignee.displayName` (or "Unassigned")
|
|
36
|
+
- **Reporter**: `fields.reporter.displayName`
|
|
37
|
+
- **Labels**: `fields.labels[]` joined, or "none"
|
|
38
|
+
- **Components**: `fields.components[].name` joined, or "none"
|
|
39
|
+
- **Fix Version**: `fields.fixVersions[].name`, or "none"
|
|
40
|
+
- **Description**: synthesise `fields.description` into 3–6 readable sentences
|
|
41
|
+
- **Linked tickets**: for each entry in `fields.issuelinks[]`, show the link type and the linked issue key + summary
|
|
42
|
+
|
|
43
|
+
## Notes
|
|
44
|
+
|
|
45
|
+
- Authentication is handled by the MCP's OAuth session — no API tokens or `CONFLUENCE_USER`/`CONFLUENCE_PASS` env vars are needed.
|
|
46
|
+
- Never print the raw JSON. Synthesise a clean human-readable summary from the parsed fields.
|
|
47
|
+
- If the description is empty or null, say "No description provided."
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-spec
|
|
3
|
+
description: Read a spec file and produce a detailed design and implementation plan — with BDD acceptance tests and TDD test cases per task — written into the spec's "Design and Implementation Plan" section, then committed. Use when user references a spec file and wants a plan, implementation design, or test specifications derived from requirements.
|
|
4
|
+
arguments: spec-file
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Plan Spec
|
|
8
|
+
|
|
9
|
+
Turns a refined spec into a concrete design and implementation plan with tests, committed to git.
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/plan-spec suggest-docs/src/main/docs/plans/FHR-XXXX-feature-name.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. **Enter Plan mode** — call `EnterPlanMode` immediately; stay in it while producing the plan
|
|
20
|
+
|
|
21
|
+
2. **Load context**
|
|
22
|
+
- Read the spec file passed as argument
|
|
23
|
+
- Read `glossary.md` from the project root for ubiquitous language
|
|
24
|
+
- Read `architecture.md` from the project root for architecture guidelines
|
|
25
|
+
|
|
26
|
+
3. **Produce the plan**
|
|
27
|
+
- Break the feature into discrete implementation tasks
|
|
28
|
+
- For each task, use this format:
|
|
29
|
+
```
|
|
30
|
+
### Task: <name>
|
|
31
|
+
- [ ] Acceptance tests
|
|
32
|
+
- [ ] Unit tests
|
|
33
|
+
- [ ] Production code
|
|
34
|
+
|
|
35
|
+
**Acceptance tests (BDD)**
|
|
36
|
+
- Given ... When ... Then ...
|
|
37
|
+
|
|
38
|
+
**Unit tests (TDD)**
|
|
39
|
+
- should ... when ...
|
|
40
|
+
```
|
|
41
|
+
- Respect module boundaries and patterns from `architecture.md`
|
|
42
|
+
- Use only domain terms from `glossary.md`
|
|
43
|
+
|
|
44
|
+
4. **Exit Plan mode and write into spec** — call `ExitPlanMode`, then update the spec file
|
|
45
|
+
- Write the full plan under the `## Design and Implementation Plan` section
|
|
46
|
+
- Create the section if it does not already exist
|
|
47
|
+
|
|
48
|
+
5. **Commit**
|
|
49
|
+
- Stage the spec file
|
|
50
|
+
- Commit with message (replace XXXX with the actual ticket number from the spec file): `FHR-XXXX: add design and implementation plan`
|
|
51
|
+
|
|
52
|
+
## Constraints
|
|
53
|
+
|
|
54
|
+
- Do NOT touch any source code
|
|
55
|
+
- Do NOT implement anything — plan only
|
|
56
|
+
- Use only ubiquitous language from the glossary
|
|
57
|
+
- Follow architecture patterns (module boundaries, event bus, DI, interfaces) from `architecture.md`
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: refine-spec
|
|
3
|
+
description: Conduct a structured requirements-refinement interview against a spec file, using the project's ubiquitous language from glossary.md, until scope and acceptance criteria are clear, then update the spec file in place. Use when user references a spec file and wants to clarify requirements, define scope, or sharpen acceptance criteria — but not write code or tests.
|
|
4
|
+
arguments: spec-file
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Refine Spec
|
|
8
|
+
|
|
9
|
+
Requirements-refinement session: interview the user until scope and acceptance criteria are clear, then rewrite the spec in place.
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/refine-spec suggest-docs/src/main/docs/plans/FHR-XXXX-feature-name.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. **Enter Plan mode** — call `EnterPlanMode` immediately; stay in it through the entire interview
|
|
20
|
+
|
|
21
|
+
2. **Load context**
|
|
22
|
+
- Read the spec file passed as argument
|
|
23
|
+
- Read `glossary.md` from the project root for ubiquitous language
|
|
24
|
+
|
|
25
|
+
3. **Assess current state**
|
|
26
|
+
- Identify what is clear, what is vague, and what is missing
|
|
27
|
+
- Flag any terminology that drifts from the glossary
|
|
28
|
+
|
|
29
|
+
4. **Interview loop**
|
|
30
|
+
- Ask focused, one-topic-at-a-time questions (scope, edge cases, acceptance criteria)
|
|
31
|
+
- Use only domain terms from the glossary — never invent synonyms
|
|
32
|
+
- Continue until scope is unambiguous, acceptance criteria are testable, no open questions remain
|
|
33
|
+
|
|
34
|
+
5. **Exit Plan mode and update spec** — call `ExitPlanMode`, then rewrite the spec file in place
|
|
35
|
+
- Preserve original structure; add/update sections as needed
|
|
36
|
+
- Use only ubiquitous language from the glossary
|
|
37
|
+
|
|
38
|
+
6. **Commit**
|
|
39
|
+
- Stage the spec file
|
|
40
|
+
- Commit with message (replace XXXX with the actual ticket number from the spec file): `FHR-XXXX: refine the requirements`
|
|
41
|
+
|
|
42
|
+
## Constraints
|
|
43
|
+
|
|
44
|
+
- Do NOT touch any source code
|
|
45
|
+
- Do NOT discuss unit tests or implementation details
|
|
46
|
+
- Do NOT propose solutions — only clarify requirements
|
|
47
|
+
- Stop interviewing once all sections are clear
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tdd-green
|
|
3
|
+
description: Implement production code (green phase) for the next incomplete task in a spec file's Design and Implementation Plan, writing only enough code to make the failing tests pass, then refactor while keeping tests green, mark the Production code sub-task done, and commit the green and refactor work separately. Use when user references a spec file and wants to implement a feature, or says "green phase", "make tests pass", "tdd green", or "green and refactor".
|
|
4
|
+
arguments: spec-file
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# TDD Green
|
|
8
|
+
|
|
9
|
+
Implements the production code to make the failing tests pass. Run after `/tdd-red`.
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/tdd-green suggest-docs/src/main/docs/plans/FHR-XXXX-feature-name.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. **Load context**
|
|
20
|
+
- Read the spec file passed as argument
|
|
21
|
+
- Read `glossary.md` from the project root for ubiquitous language
|
|
22
|
+
- Read `coding-guidelines.md` from the project root for coding conventions
|
|
23
|
+
- Read `architecture.md` from the project root for module boundaries and patterns
|
|
24
|
+
|
|
25
|
+
2. **Find the next incomplete task**
|
|
26
|
+
- Scan the `## Design and Implementation Plan` section for the first task whose `- [ ] Production code` checkbox is unchecked
|
|
27
|
+
- Work on that task only — do not advance to subsequent tasks
|
|
28
|
+
|
|
29
|
+
3. **Implement production code**
|
|
30
|
+
- Write only enough production code to make the failing tests pass
|
|
31
|
+
- Follow all conventions in `coding-guidelines.md`
|
|
32
|
+
- Respect module boundaries from `architecture.md`
|
|
33
|
+
- Use only domain terms from `glossary.md`
|
|
34
|
+
- This is the **green phase**: no refactoring, no gold-plating — just passing tests
|
|
35
|
+
|
|
36
|
+
4. **Run the tests**
|
|
37
|
+
- Unit tests
|
|
38
|
+
- Acceptance tests (JGiven)
|
|
39
|
+
- All tests must pass before proceeding
|
|
40
|
+
|
|
41
|
+
5. **Commit (green)**
|
|
42
|
+
- Stage all changed production files
|
|
43
|
+
- Commit with message (replace XXXX with the actual ticket number from the spec file): `FHR-XXXX: implement <task name> (green)`
|
|
44
|
+
|
|
45
|
+
6. **Refactor**
|
|
46
|
+
- Remove duplication, clarify intent, simplify structure
|
|
47
|
+
- Do NOT change behaviour; no new logic, no new tests
|
|
48
|
+
- Do NOT modify test code
|
|
49
|
+
- Run all tests; they must remain green. In case of any failure, stop immediately and ask the user what to do next (rollback; make the test pass; ...)
|
|
50
|
+
|
|
51
|
+
7. **Mark task done**
|
|
52
|
+
- In the spec file, check off `- [x] Production code` for the completed task
|
|
53
|
+
|
|
54
|
+
8. **Commit (refactor)**
|
|
55
|
+
- Stage all changed production files and the updated spec file
|
|
56
|
+
- Commit with message (replace XXXX with the actual ticket number from the spec file): `FHR-XXXX: refactor <task name> (refactor)`
|
|
57
|
+
## Constraints
|
|
58
|
+
|
|
59
|
+
- Do NOT modify test code
|
|
60
|
+
- Do NOT advance past the first incomplete task
|
|
61
|
+
- Write the minimum code needed to make tests pass
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tdd-red
|
|
3
|
+
description: Write failing tests (red phase) for the next incomplete task in a spec file's Design and Implementation Plan — acceptance tests (JGiven BDD) and unit tests (JUnit Jupiter) — then mark the Acceptance tests and Unit tests sub-tasks done and commit. Use when user references a spec file and wants to write the failing tests before implementing a feature, or says "red phase", "write tests", or "tdd red".
|
|
4
|
+
arguments: spec-file
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# TDD Red
|
|
8
|
+
|
|
9
|
+
Writes the failing tests for the next incomplete task in the plan. Run after `/plan-spec`.
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
/tdd-red suggest-docs/src/main/docs/plans/FHR-XXXX-feature-name.md
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Workflow
|
|
18
|
+
|
|
19
|
+
1. **Load context**
|
|
20
|
+
- Read the spec file passed as argument
|
|
21
|
+
- Read `glossary.md` from the project root for ubiquitous language
|
|
22
|
+
- Read `coding-guidelines.md` from the project root for test conventions
|
|
23
|
+
|
|
24
|
+
2. **Find the next incomplete task**
|
|
25
|
+
- Scan the `## Design and Implementation Plan` section for the first task whose `- [ ] Acceptance tests` or `- [ ] Unit tests` checkbox is unchecked
|
|
26
|
+
- Work on that task only — do not advance to subsequent tasks
|
|
27
|
+
|
|
28
|
+
3. **Write the tests**
|
|
29
|
+
- Write acceptance tests (JGiven BDD style) and unit tests (JUnit Jupiter) as described for that task in the plan
|
|
30
|
+
- Follow all conventions in `coding-guidelines.md`: EasyMock for mocking, stage classes named `Given*`/`When*`/`Then*`, test methods named as scenario descriptions
|
|
31
|
+
- Use only domain terms from `glossary.md`
|
|
32
|
+
- This is the **red phase**: write only tests, no production code
|
|
33
|
+
|
|
34
|
+
4. **Run the tests**
|
|
35
|
+
- Run unit tests
|
|
36
|
+
- Run acceptance tests (JGiven)
|
|
37
|
+
- Confirm the suite is red (fails) before proceeding
|
|
38
|
+
|
|
39
|
+
5. **Mark task done**
|
|
40
|
+
- In the spec file, check off `- [x] Acceptance tests` and `- [x] Unit tests` for the completed task
|
|
41
|
+
|
|
42
|
+
6. **Commit**
|
|
43
|
+
- Stage all new test files and the updated spec file
|
|
44
|
+
- Commit with message (replace XXXX with the actual ticket number from the spec file): `FHR-XXXX: add failing tests for <task name> (red)`
|
|
45
|
+
|
|
46
|
+
## Constraints
|
|
47
|
+
|
|
48
|
+
- Do NOT write any production code
|
|
49
|
+
- Do NOT advance past the first incomplete task
|
|
50
|
+
- Use only ubiquitous language from the glossary
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tdd-workflow
|
|
3
|
+
description: Drive the full red-green-refactor TDD cycle across every task in a spec file's Design and Implementation Plan — picking the next incomplete task, then running the red, green, and refactor phases for it, then looping to the next task until the plan is complete. Use when user references a spec file and wants to implement the whole plan end to end, or says "run the tdd workflow", "implement the plan", or "tdd workflow".
|
|
4
|
+
arguments: spec-file
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# TDD Workflow
|
|
8
|
+
|
|
9
|
+
Automates the per-task red → green → refactor cycle for an entire plan by orchestrating the
|
|
10
|
+
`tdd-red` and `tdd-green` skills. Run after `/plan-spec`.
|
|
11
|
+
|
|
12
|
+
## Quick start
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/tdd-workflow suggest-docs/src/main/docs/plans/FHR-XXXX-feature-name.md
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Workflow
|
|
19
|
+
|
|
20
|
+
1. **Load context**
|
|
21
|
+
- Read the spec file passed as argument
|
|
22
|
+
- Locate the `## Design and Implementation Plan` section and its list of `### Task:` blocks
|
|
23
|
+
|
|
24
|
+
2. **Pick the next task**
|
|
25
|
+
- Find the first `### Task:` whose checkboxes are not all checked
|
|
26
|
+
(`- [ ] Acceptance tests`, `- [ ] Unit tests`, `- [ ] Production code`)
|
|
27
|
+
- This task is the current task. If every task is fully checked, stop; the plan is complete
|
|
28
|
+
|
|
29
|
+
3. **Red phase (if needed)**
|
|
30
|
+
- If `Acceptance tests` or `Unit tests` is unchecked for the current task, invoke `tdd-red` with the spec file
|
|
31
|
+
- Wait for it to finish before continuing
|
|
32
|
+
|
|
33
|
+
4. **Green/Refactor phase (if needed)**
|
|
34
|
+
- If `Production code` is unchecked for the current task, invoke `tdd-green` with the spec file
|
|
35
|
+
- Wait for it to finish before continuing
|
|
36
|
+
|
|
37
|
+
5. **Loop to the next task**
|
|
38
|
+
- Re-read the spec file and return to step 2
|
|
39
|
+
- Continue until no incomplete task remains
|
|
40
|
+
|
|
41
|
+
6. **Report**
|
|
42
|
+
- Summarise which tasks were implemented and confirm the plan is fully checked off
|
|
43
|
+
|
|
44
|
+
## Constraints
|
|
45
|
+
|
|
46
|
+
- Always run the phases in order (red before green/refactor) for a given task
|
|
47
|
+
- Do NOT start the next task until the current one is fully complete
|
|
48
|
+
- If a phase’s checkbox is already checked for the current task, treat that phase as already complete (do not re-run it)
|
|
49
|
+
- Let each sub-skill enforce its own rules (tests-only in red, minimal code + refactor in green); this skill only sequences them
|
|
50
|
+
- Each invoked sub-skill commits its own work; do not add extra commits between skill invocations
|
|
51
|
+
- Stop and surface the problem if any phase fails (e.g. tests will not pass) rather than advancing
|