-
Notifications
You must be signed in to change notification settings - Fork 14
feat: Added jira prompts #128
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,119 @@ | ||||||
| # Jira Team Context | ||||||
|
|
||||||
| ## User | ||||||
|
|
||||||
| Load your persona from `personas/` to tailor agent behaviour to your role: | ||||||
|
|
||||||
| - **Director / Product Owner** → `personas/director.md` | ||||||
| - **Squad Lead** → `personas/squad-lead.md` | ||||||
| - **Developer / Individual Contributor** → `personas/developer.md` | ||||||
|
|
||||||
| ## Atlassian | ||||||
|
|
||||||
| - **Site:** [warthogs](https://warthogs.atlassian.net) | ||||||
| - **Cloud ID:** `220bceb6-6b32-4813-90eb-68d67c9445db` | ||||||
|
|
||||||
| ## Projects | ||||||
|
|
||||||
| | Project Key | Project Name | | ||||||
| |-------------|---------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | UDENG | Desktop Roadmap | | ||||||
|
|
||||||
| ## Team | ||||||
|
|
||||||
| The authoritative roster of all Desktop team members is maintained in | ||||||
| the GitHub team: | ||||||
| [IS Platform Services: Desktop](https://github.com/orgs/canonical/teams/is-platform-services-desktop) | ||||||
|
|
||||||
| ## Squads | ||||||
|
|
||||||
| | Squad | Project | Jira Team Name (`customfield_10001`) | | ||||||
| |--------------------------|---------|---------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | GNOME Team | UDENG | Desktop \| GNOME | | ||||||
| | Integration Team | UDENG | Desktop \| Integration | | ||||||
| | Apps Team | UDENG | Desktop \| Apps | | ||||||
| | Enterprise Team | UDENG | Desktop \| Enterprise | | ||||||
| | Core Desktop Team | UDENG | Desktop \| Core | | ||||||
| | WSL Team | UDENG | Desktop \| WSL | | ||||||
| | Design Team | UDENG | Desktop \| Design | | ||||||
|
|
||||||
| ## Issue Hierarchy | ||||||
|
|
||||||
| `Objectives > Epics > Stories / Tasks / Spikes` | ||||||
|
|
||||||
| | Issue Type | Timebox | Sized by | Notes | | ||||||
| |------------|---------------|--------------|----------------------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | Objective | LTS Cycle | - | Owned/triaged by director or senior leads | | ||||||
| | Epic | Release Cycle | T-shirt size | Roadmap commitment; max XL per person per cycle | | ||||||
| | Story | Pulse | Story points | Delivers incremental value; fits in one pulse | | ||||||
| | Task | Pulse | Story points | Background/overhead work; may not have parent Epic | | ||||||
| | Spike | Pulse | Story points | Investigation/ideation to break down parent work | | ||||||
|
|
||||||
| ## Key Custom Fields | ||||||
|
|
||||||
| | Field | Jira ID | Notes | | ||||||
| |--------------|---------------------|--------------------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | Team | `customfield_10001` | Squad name (see Squads table) | | ||||||
| | T-shirt size | `customfield_10040` | XS, S, M, L, XL — used on Epics | | ||||||
| | Roadmap Item | `customfield_10615` | Value `"Roadmap Item"` — marks Epic as committed | | ||||||
| | Story Points | `customfield_10016` | Used on Stories, Tasks, Spikes — **Note:** the API returns story points in `customfield_10024` (not `customfield_10016`) in issue responses; use `customfield_10016` in JQL but read `customfield_10024` from results | | ||||||
|
|
||||||
| Note: in JQL, `customfield_NNNNN` is written as `cf[NNNNN]`. | ||||||
|
|
||||||
| > **JQL limitation — Team field filtering:** Filtering by team (`cf[10001]` | ||||||
| > or `"Team[Team]"`) combined with a `sprint =` clause returns no results | ||||||
| > due to a Jira API limitation on this instance. **Workaround:** omit the | ||||||
| > team filter from JQL, fetch all sprint items, then filter locally by | ||||||
| > `customfield_10001.name` in the returned JSON. | ||||||
|
|
||||||
| ## Timeboxes | ||||||
|
|
||||||
| | Timebox | Duration | Jira representation | | ||||||
| |---------------|-----------|-----------------------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | LTS Cycle | ~2 years | FixVersion e.g. `26.04 LTS` | | ||||||
| | Release Cycle | ~6 months | FixVersion e.g. `26.10` | | ||||||
| | Pulse | 2 weeks | Sprint, named `Pulse YYYY#nn` e.g. `Pulse 2025#01` | | ||||||
|
|
||||||
| - Pulse is the internal name for a Jira sprint — all Canonical teams share | ||||||
| the same sprint numbering. `#nn` is the sequential sprint number for the | ||||||
| year. | ||||||
| - Roadmap Items are Epics with `customfield_10615 = "Roadmap Item"` plus a | ||||||
| release label (e.g. `26.10`). | ||||||
| - Uncompleted Roadmap Items are carried over: new label added, FixVersion | ||||||
| updated. | ||||||
|
|
||||||
| ## Issue States | ||||||
|
|
||||||
| `Untriaged` → `Triaged` → `In Progress` → `In Review` → `Done` | ||||||
| (or `Blocked` / `Rejected`) | ||||||
|
|
||||||
| - Parent chain must be marked Triaged before a child can be Triaged. | ||||||
| - Parent chain should be marked In Progress when a child moves to In Progress. | ||||||
| - Parent is Done only when all children are Done. | ||||||
|
|
||||||
| ## Metrics & Targets | ||||||
|
|
||||||
| | Metric | Target | Current (approx.) | | ||||||
| |------------------------------------|--------|-------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | Pulse velocity | ≥ 80% | ~60% | | ||||||
| | Untriaged issues in active timebox | 0% | significant debt | | ||||||
| | Issues without team/component | ~0 | - | | ||||||
| | Epics without t-shirt size | 0 | - | | ||||||
| | Epics without parent Objective | 0 | - | | ||||||
|
|
||||||
| ## Backlog Grooming Owners | ||||||
|
|
||||||
| | Backlog | Who grooms | | ||||||
| |-----------------|-------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | Full backlog | Director + senior leads | | ||||||
| | Product (LTS) | Seniors, architects, SMEs | | ||||||
| | Release (Cycle) | Assigned objective lead, Epic owner | | ||||||
| | Pulse | Everyone / issue owners | | ||||||
|
|
||||||
| ## Practice References | ||||||
|
|
||||||
| For full lifecycle rules, grooming checklists, and interrupt workflows: | ||||||
|
|
||||||
| - Objectives → `practices/objectives.md` | ||||||
| - Epics → `practices/epics.md` | ||||||
| - Pulse items (Stories / Tasks / Spikes) → `practices/pulse.md` | ||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,64 @@ | ||||||
| # Jira Agent Tooling | ||||||
|
|
||||||
| This directory is the working root for AI-assisted Jira workflows on the | ||||||
| Dektop team. Open it as your project folder in OpenCode to get full | ||||||
| agent context, skills, and practices automatically loaded. | ||||||
|
|
||||||
| ## Prerequisites | ||||||
|
|
||||||
| - [OpenCode](https://opencode.ai) installed | ||||||
| - Jira MCP configured for `warthogs.atlassian.net` | ||||||
| - Cloud ID: `220bceb6-6b32-4813-90eb-68d67c9445db` | ||||||
| - The MCP server must be listed in your OpenCode config | ||||||
| (`~/.config/opencode/config.json`) | ||||||
|
|
||||||
| ## Quick Start | ||||||
|
|
||||||
| ```bash | ||||||
| git clone https://github.com/canonical/desktop-engineering | ||||||
| cd desktop-engineering/jira | ||||||
| opencode | ||||||
| ``` | ||||||
|
|
||||||
| On first run, tell the agent your role so it loads the right persona: | ||||||
|
|
||||||
| > "I am a squad lead" — loads `personas/squad-lead.md` | ||||||
| > "I am the director" — loads `personas/director.md` | ||||||
| > "I am a developer" — loads `personas/developer.md` | ||||||
|
|
||||||
| The agent will automatically read `AGENT.md` for team context (Atlassian | ||||||
| config, custom fields, issue hierarchy, metrics targets). | ||||||
|
|
||||||
| ## Available Skills | ||||||
|
|
||||||
| Skills are loaded automatically from `.opencode/skills/`. Each skill provides | ||||||
| the agent with a focused workflow for a specific task. | ||||||
|
|
||||||
| | Skill | Trigger phrases | What it does | | ||||||
| |--------------|-----------------|-----------------------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | *(none yet)* | — | Skills are being developed — see Contributing below | | ||||||
|
|
||||||
| ## Practices | ||||||
|
|
||||||
| Detailed lifecycle rules, grooming checklists, and interrupt workflows: | ||||||
|
|
||||||
| | Document | Covers | | ||||||
| |---------------------------|--------------------------------------------------------------------------------------------------------| | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | `practices/objectives.md` | Objective creation, grooming → Triaged, state transitions, carry-over, interrupts | | ||||||
| | `practices/epics.md` | Epic creation, grooming → Triaged, child items, state transitions, carry-over, interrupts | | ||||||
| | `practices/pulse.md` | Story / Task / Spike creation, sizing, sprint assignment, pulse planning, velocity | | ||||||
|
|
||||||
| ## Personas | ||||||
|
|
||||||
| | File | For | | ||||||
| | -------------------------- | ------------------------------------------------------------------------------------------ | | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
| | `personas/director.md` | Director / Product Owner — LTS Objectives, cross-squad prioritisation, interrupt triage | | ||||||
| | `personas/squad-lead.md` | Squad Leads — Release backlog, Epic ownership, pulse health per squad | | ||||||
| | `personas/developer.md` | Individual Contributors — pulse delivery, Epic ownership, velocity, blockers | | ||||||
|
|
||||||
| ## Contributing | ||||||
|
|
||||||
| - Practice changes (grooming rules, checklists): edit `practices/*.md` and open a PR | ||||||
| - New skills: add a directory under `.opencode/skills/` with a `SKILL.md` and any supporting scripts | ||||||
| - Persona updates: edit `personas/*.md` — keep role-specific context current after each cycle | ||||||
| - Discuss on [`#dekstop-team-eng`](https://chat.canonical.com/canonical/channels/desktop-team-eng) | ||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,140 @@ | ||||||
| # Persona: Developer / Individual Contributor | ||||||
|
|
||||||
| Individual contributors own the delivery of pulse items and the quality of | ||||||
| their assigned Epics. This persona is for any Foundations team member who is | ||||||
| not acting as a squad lead or director. | ||||||
|
|
||||||
| --- | ||||||
|
|
||||||
| ## Primary Responsibilities | ||||||
|
|
||||||
| - **Pulse delivery**: complete assigned Stories, Tasks, and Spikes within the | ||||||
| Pulse; target ≥ 80% of your committed story points done each sprint | ||||||
| - **Own your Epic quality**: for any Epic you own, ensure it meets grooming | ||||||
| criteria before and during the cycle — description, t-shirt size, parent | ||||||
| Objective, team field, and a docs Story child | ||||||
| - **Proactive blocking**: flag blockers to your squad lead the moment they | ||||||
| appear — do not wait until the Pulse review | ||||||
| - **WIP discipline**: finish in-progress items before picking up new ones; | ||||||
| keep your active item count low | ||||||
| - **Triage hygiene**: keep your assigned items free of dangling Untriaged | ||||||
| work — everything in an active Pulse should be Triaged or beyond | ||||||
|
|
||||||
| ## Decision Authority | ||||||
|
|
||||||
| | Decision | Authority | | ||||||
| | -------- | --------- | | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would limit the number of dashes to the bare minimum in MD (three) to take into account people that uses screen readers. This way it would reduce the number of
Suggested change
|
||||||
| | Create a Story / Task / Spike under your Epic | You | | ||||||
| | Estimate story points on your items | You (with squad lead input) | | ||||||
| | Move an item to In Progress / In Review / Done | You | | ||||||
| | Flag an item as Blocked | You — notify squad lead immediately | | ||||||
| | Carry over an item to the next Pulse | You + squad lead awareness | | ||||||
| | Create a new Epic | You + squad lead sign-off to triage it | | ||||||
|
|
||||||
| --- | ||||||
|
|
||||||
| ## Typical Agent Prompts | ||||||
|
|
||||||
| ### My current pulse | ||||||
|
|
||||||
| ``` | ||||||
| Show all my active pulse items in the current sprint — flag any missing | ||||||
| story points, assignee, or parent | ||||||
| ``` | ||||||
|
|
||||||
| ### My Epic health | ||||||
|
|
||||||
| ``` | ||||||
| Assess grooming quality for all Epics assigned to me — flag missing fields | ||||||
| or child items | ||||||
| ``` | ||||||
|
|
||||||
| ### What should I pick up next? | ||||||
|
|
||||||
| ``` | ||||||
| Show all Triaged Stories and Tasks assigned to me that are not yet in a | ||||||
| sprint, ordered by parent Epic priority | ||||||
| ``` | ||||||
|
|
||||||
| ### Carry-over check | ||||||
|
|
||||||
| ``` | ||||||
| Which of my items from the previous Pulse are still open? Should any be | ||||||
| re-estimated or closed? | ||||||
| ``` | ||||||
|
|
||||||
| ### Create a new pulse item | ||||||
|
|
||||||
| ``` | ||||||
| I need to create a Story under Epic FR-XXXX to [description]. Help me write | ||||||
| a well-formed description with Why, Who, What, and How. | ||||||
| ``` | ||||||
|
|
||||||
| ### Check my velocity | ||||||
|
|
||||||
| ``` | ||||||
| What is my pulse velocity for the last 3 sprints? How does it compare to | ||||||
| the 80% target? | ||||||
| ``` | ||||||
|
|
||||||
| ### Blocker | ||||||
|
|
||||||
| ``` | ||||||
| UDENG-XXXX is blocked — [describe blocker]. Help me write a clear blocker | ||||||
| comment and identify who can unblock it. | ||||||
| ``` | ||||||
|
|
||||||
| --- | ||||||
|
|
||||||
| ## Pre-baked JQL Queries | ||||||
|
|
||||||
| ### My active pulse items | ||||||
|
|
||||||
| ``` | ||||||
| assignee = currentUser() AND issuetype in (Story, Task, Spike) | ||||||
| AND sprint in openSprints() AND statusCategory != Done | ||||||
| ORDER BY status ASC | ||||||
| ``` | ||||||
|
|
||||||
| ### My untriaged items | ||||||
|
|
||||||
| ``` | ||||||
| assignee = currentUser() AND status = Untriaged | ||||||
| AND statusCategory != Done ORDER BY created ASC | ||||||
| ``` | ||||||
|
|
||||||
| ### My Epics (owned) | ||||||
| ``` | ||||||
| project in (UDENG) AND issuetype = Epic AND assignee = currentUser() | ||||||
| AND statusCategory != Done ORDER BY status ASC | ||||||
| ``` | ||||||
|
|
||||||
| ### My Epics missing grooming fields | ||||||
|
|
||||||
| ``` | ||||||
| project in (UDENG) AND issuetype = Epic AND assignee = currentUser() | ||||||
| AND statusCategory != Done | ||||||
| AND (cf[10040] is EMPTY OR cf[10001] is EMPTY) | ||||||
| ``` | ||||||
|
|
||||||
| ### Items I own that are blocked | ||||||
|
|
||||||
| ``` | ||||||
| assignee = currentUser() AND status = Blocked ORDER BY updated ASC | ||||||
| ``` | ||||||
|
|
||||||
| ### Items assigned to me not yet in a sprint | ||||||
|
|
||||||
| ``` | ||||||
| assignee = currentUser() AND issuetype in (Story, Task, Spike) | ||||||
| AND sprint is EMPTY AND statusCategory != Done ORDER BY created ASC | ||||||
| ``` | ||||||
|
|
||||||
| --- | ||||||
|
|
||||||
| ## Practice References | ||||||
|
|
||||||
| - Pulse items (your day-to-day): `practices/pulse.md` | ||||||
| - Epic lifecycle (if you own Epics): `practices/epics.md` | ||||||
| - Objective lifecycle (read-only): `practices/objectives.md` | ||||||
| - Team context, custom fields, timeboxes: `AGENT.md` | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be great to load the persona automatically, as you already listed the squad lead, and we know who is the director :p