opencastle 0.32.12 → 0.33.0

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.
Files changed (115) hide show
  1. package/LICENSE +21 -93
  2. package/README.md +5 -3
  3. package/package.json +2 -2
  4. package/src/dashboard/dist/data/convoys/demo-api-v2.json +3 -3
  5. package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +4 -4
  6. package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +12 -12
  7. package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +3 -3
  8. package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +1 -1
  9. package/src/dashboard/dist/data/convoys/demo-docs-update.json +7 -7
  10. package/src/dashboard/dist/data/convoys/demo-perf-opt.json +4 -4
  11. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  12. package/src/dashboard/public/data/convoys/demo-api-v2.json +3 -3
  13. package/src/dashboard/public/data/convoys/demo-auth-revamp.json +4 -4
  14. package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +12 -12
  15. package/src/dashboard/public/data/convoys/demo-data-pipeline.json +3 -3
  16. package/src/dashboard/public/data/convoys/demo-deploy-ci.json +1 -1
  17. package/src/dashboard/public/data/convoys/demo-docs-update.json +7 -7
  18. package/src/dashboard/public/data/convoys/demo-perf-opt.json +4 -4
  19. package/src/orchestrator/customizations/stack/sanity-config.md +43 -0
  20. package/src/orchestrator/customizations/stack/supabase-config.md +53 -0
  21. package/src/orchestrator/plugins/astro/REFERENCE.md +5 -0
  22. package/src/orchestrator/plugins/astro/SKILL.md +22 -29
  23. package/src/orchestrator/plugins/chrome-devtools/REFERENCE.md +9 -0
  24. package/src/orchestrator/plugins/chrome-devtools/SKILL.md +10 -55
  25. package/src/orchestrator/plugins/contentful/REFERENCE.md +16 -0
  26. package/src/orchestrator/plugins/contentful/SKILL.md +69 -29
  27. package/src/orchestrator/plugins/convex/REFERENCE.md +9 -0
  28. package/src/orchestrator/plugins/convex/SKILL.md +13 -1
  29. package/src/orchestrator/plugins/cypress/REFERENCE.md +5 -0
  30. package/src/orchestrator/plugins/cypress/SKILL.md +29 -93
  31. package/src/orchestrator/plugins/figma/REFERENCE.md +18 -0
  32. package/src/orchestrator/plugins/figma/SKILL.md +41 -66
  33. package/src/orchestrator/plugins/jira/REFERENCE.md +9 -0
  34. package/src/orchestrator/plugins/jira/SKILL.md +26 -114
  35. package/src/orchestrator/plugins/linear/SKILL.md +42 -109
  36. package/src/orchestrator/plugins/netlify/REFERENCE.md +33 -0
  37. package/src/orchestrator/plugins/netlify/SKILL.md +34 -64
  38. package/src/orchestrator/plugins/nextjs/REFERENCE.md +73 -0
  39. package/src/orchestrator/plugins/nextjs/SKILL.md +49 -138
  40. package/src/orchestrator/plugins/notion/SKILL.md +26 -168
  41. package/src/orchestrator/plugins/notion/TEMPLATES.md +88 -0
  42. package/src/orchestrator/plugins/nx/REFERENCE.md +10 -0
  43. package/src/orchestrator/plugins/nx/SKILL.md +12 -12
  44. package/src/orchestrator/plugins/playwright/REFERENCE.md +12 -0
  45. package/src/orchestrator/plugins/playwright/SKILL.md +33 -98
  46. package/src/orchestrator/plugins/prisma/REFERENCE.md +42 -0
  47. package/src/orchestrator/plugins/prisma/SKILL.md +18 -68
  48. package/src/orchestrator/plugins/resend/REFERENCE.md +61 -0
  49. package/src/orchestrator/plugins/resend/SKILL.md +23 -137
  50. package/src/orchestrator/plugins/sanity/SKILL.md +50 -3
  51. package/src/orchestrator/plugins/slack/REFERENCE.md +24 -0
  52. package/src/orchestrator/plugins/slack/SKILL.md +36 -111
  53. package/src/orchestrator/plugins/strapi/REFERENCE.md +35 -0
  54. package/src/orchestrator/plugins/strapi/SKILL.md +60 -24
  55. package/src/orchestrator/plugins/supabase/REFERENCE.md +9 -0
  56. package/src/orchestrator/plugins/supabase/SKILL.md +44 -16
  57. package/src/orchestrator/plugins/teams/REFERENCE.md +36 -0
  58. package/src/orchestrator/plugins/teams/SKILL.md +35 -85
  59. package/src/orchestrator/plugins/trello/REFERENCE.md +9 -0
  60. package/src/orchestrator/plugins/trello/SKILL.md +25 -97
  61. package/src/orchestrator/plugins/turborepo/REFERENCE.md +9 -0
  62. package/src/orchestrator/plugins/turborepo/SKILL.md +13 -1
  63. package/src/orchestrator/plugins/vercel/SKILL.md +45 -52
  64. package/src/orchestrator/plugins/vitest/SKILL.md +10 -14
  65. package/src/orchestrator/prompts/create-skill.prompt.md +62 -20
  66. package/src/orchestrator/prompts/generate-convoy.prompt.md +6 -0
  67. package/src/orchestrator/prompts/generate-prd.prompt.md +4 -0
  68. package/src/orchestrator/skills/accessibility-standards/REFERENCE.md +34 -0
  69. package/src/orchestrator/skills/accessibility-standards/SKILL.md +6 -3
  70. package/src/orchestrator/skills/agent-hooks/HOOKS-REFERENCE.md +48 -0
  71. package/src/orchestrator/skills/agent-hooks/SKILL.md +41 -65
  72. package/src/orchestrator/skills/agent-memory/KNOWLEDGE-GRAPH.md +49 -0
  73. package/src/orchestrator/skills/agent-memory/SKILL.md +30 -67
  74. package/src/orchestrator/skills/api-patterns/SKILL.md +29 -1
  75. package/src/orchestrator/skills/backbone-scaffolding/EXAMPLES.md +16 -0
  76. package/src/orchestrator/skills/backbone-scaffolding/SKILL.md +99 -0
  77. package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
  78. package/src/orchestrator/skills/context-map/REFERENCE.md +70 -0
  79. package/src/orchestrator/skills/context-map/SKILL.md +28 -55
  80. package/src/orchestrator/skills/data-engineering/REFERENCE.md +55 -0
  81. package/src/orchestrator/skills/data-engineering/SKILL.md +40 -34
  82. package/src/orchestrator/skills/decomposition/REFERENCE.md +28 -0
  83. package/src/orchestrator/skills/decomposition/SKILL.md +15 -30
  84. package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +31 -65
  85. package/src/orchestrator/skills/documentation-standards/SKILL.md +31 -50
  86. package/src/orchestrator/skills/documentation-standards/WRITING-GUIDE.md +39 -0
  87. package/src/orchestrator/skills/fast-review/REFERENCE.md +30 -0
  88. package/src/orchestrator/skills/fast-review/SKILL.md +11 -31
  89. package/src/orchestrator/skills/frontend-design/COMPONENTS.md +113 -0
  90. package/src/orchestrator/skills/frontend-design/REFERENCE.md +36 -0
  91. package/src/orchestrator/skills/frontend-design/SKILL.md +36 -85
  92. package/src/orchestrator/skills/git-workflow/SKILL.md +13 -2
  93. package/src/orchestrator/skills/memory-merger/REFERENCE.md +20 -0
  94. package/src/orchestrator/skills/memory-merger/SKILL.md +29 -38
  95. package/src/orchestrator/skills/observability-logging/SKILL.md +5 -12
  96. package/src/orchestrator/skills/orchestration-protocols/REFERENCE.md +42 -0
  97. package/src/orchestrator/skills/orchestration-protocols/SKILL.md +54 -41
  98. package/src/orchestrator/skills/panel-majority-vote/REFERENCE.md +55 -0
  99. package/src/orchestrator/skills/panel-majority-vote/SKILL.md +30 -75
  100. package/src/orchestrator/skills/performance-optimization/SKILL.md +41 -1
  101. package/src/orchestrator/skills/project-consistency/SKILL.md +50 -89
  102. package/src/orchestrator/skills/project-consistency/TEMPLATES.md +39 -0
  103. package/src/orchestrator/skills/react-development/REFERENCE.md +7 -0
  104. package/src/orchestrator/skills/react-development/SKILL.md +50 -42
  105. package/src/orchestrator/skills/security-hardening/SKILL.md +88 -1
  106. package/src/orchestrator/skills/self-improvement/LESSON-CATEGORIES.md +36 -0
  107. package/src/orchestrator/skills/self-improvement/SKILL.md +19 -25
  108. package/src/orchestrator/skills/seo-patterns/REFERENCE.md +54 -0
  109. package/src/orchestrator/skills/seo-patterns/SKILL.md +20 -88
  110. package/src/orchestrator/skills/session-checkpoints/CHECKPOINT-TEMPLATE.md +58 -0
  111. package/src/orchestrator/skills/session-checkpoints/SKILL.md +34 -58
  112. package/src/orchestrator/skills/team-lead-reference/SKILL.md +37 -30
  113. package/src/orchestrator/skills/testing-workflow/SKILL.md +55 -2
  114. package/src/orchestrator/skills/validation-gates/REFERENCE.md +50 -0
  115. package/src/orchestrator/skills/validation-gates/SKILL.md +39 -35
@@ -1,10 +1,8 @@
1
1
  ---
2
2
  name: cypress-testing
3
- description: "Cypress E2E and component testing patterns, commands, selectors, and CI configuration. Use when writing E2E tests, component tests, or configuring Cypress in CI pipelines."
3
+ description: "Writes Cypress E2E/component tests, configures `cy.intercept()` and `cy.session()`, authors custom commands, and wires CI artifacts. Use when creating E2E specs, component tests, or CI test pipelines. Trigger terms: cypress, e2e, component test, cy.intercept, cy.session"
4
4
  ---
5
5
 
6
- <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .opencastle/ directory instead. -->
7
-
8
6
  # Cypress Testing
9
7
 
10
8
  Cypress-specific E2E and component testing patterns. For project-specific test configuration and breakpoints, see [testing-config.md](../../.opencastle/stack/testing-config.md).
@@ -12,46 +10,36 @@ Cypress-specific E2E and component testing patterns. For project-specific test c
12
10
  ## Commands
13
11
 
14
12
  ```bash
15
- npx cypress open # Open interactive test runner
16
- npx cypress run # Run tests headlessly (CI)
17
- npx cypress run --spec "cypress/e2e/auth/**" # Run specific specs
18
- npx cypress run --browser chrome # Specify browser
19
- npx cypress run --headed # Run with visible browser
20
- npx cypress run --component # Run component tests only
21
- npx cypress run --record # Record to Cypress Cloud
13
+ # Interactive runner
14
+ npx cypress open
15
+
16
+ # Headless run (CI) — target a specific spec with --spec when needed
17
+ npx cypress run
22
18
  ```
23
19
 
20
+ ## Workflow (install → add data-testid → write → run → CI)
21
+
22
+ 1. Install and verify: `npm install --save-dev cypress` then `npx cypress verify`.
23
+ 2. Add `data-testid` attributes to key elements. Write custom commands in `cypress/support/commands.ts`, configure `cy.intercept()` stubs, and author fixtures under `cypress/fixtures/`.
24
+ 3. Write focused tests under `cypress/e2e/` using `data-testid` selectors. After authoring a spec, validate the setup by running a single spec: `npx cypress run --spec "cypress/e2e/auth/login.cy.ts" --headed` (quick smoke check).
25
+ 4. Run locally: `npx cypress open` (interactive) or `npx cypress run` (headless). If a spec fails, re-run the failing spec directly and inspect `cypress/screenshots/` and `cypress/videos/` for evidence.
26
+ 5. CI: `npx cypress run` — assert exit code 0; upload videos/screenshots on failures.
27
+
28
+
24
29
  ## Test Structure
25
30
 
26
- ```
27
- cypress/
28
- ├── e2e/ # E2E test specs
29
- │ ├── auth/
30
- │ │ ├── login.cy.ts
31
- │ │ └── signup.cy.ts
32
- │ └── dashboard/
33
- │ └── overview.cy.ts
34
- ├── fixtures/ # Test data (JSON)
35
- │ └── users.json
36
- ├── support/
37
- │ ├── commands.ts # Custom commands
38
- │ ├── e2e.ts # E2E support file
39
- │ └── component.ts # Component test support
40
- └── downloads/ # Downloaded files during tests
41
- ```
31
+ Tests: `cypress/e2e/` • Fixtures: `cypress/fixtures/` • Commands: `cypress/support/commands.ts`
42
32
 
43
33
  ## Writing Tests
44
34
 
45
- ### E2E Test Pattern
35
+ ### E2E Test Pattern (single focused spec)
46
36
 
47
37
  ```typescript
48
38
  // cypress/e2e/auth/login.cy.ts
49
39
  describe('Login', () => {
50
- beforeEach(() => {
51
- cy.visit('/login');
52
- });
40
+ beforeEach(() => cy.visit('/login'));
53
41
 
54
- it('should log in with valid credentials', () => {
42
+ it('logs in with valid credentials and lands on dashboard', () => {
55
43
  cy.get('[data-testid="email-input"]').type('user@example.com');
56
44
  cy.get('[data-testid="password-input"]').type('password123');
57
45
  cy.get('[data-testid="login-button"]').click();
@@ -59,14 +47,6 @@ describe('Login', () => {
59
47
  cy.url().should('include', '/dashboard');
60
48
  cy.get('[data-testid="user-menu"]').should('be.visible');
61
49
  });
62
-
63
- it('should show error for invalid credentials', () => {
64
- cy.get('[data-testid="email-input"]').type('wrong@example.com');
65
- cy.get('[data-testid="password-input"]').type('wrong');
66
- cy.get('[data-testid="login-button"]').click();
67
-
68
- cy.get('[data-testid="error-message"]').should('contain', 'Invalid credentials');
69
- });
70
50
  });
71
51
  ```
72
52
 
@@ -87,59 +67,15 @@ Cypress.Commands.add('login', (email: string, password: string) => {
87
67
 
88
68
  ## Selector Strategy
89
69
 
90
- Priority order for selecting elements:
91
-
92
- 1. `data-testid` attributes — most resilient to UI changes
93
- 2. `aria-label` or `role` — accessible and meaningful
94
- 3. Dedicated CSS classes — avoid styling classes
95
- 4. **Never** use tag names, auto-generated classes, or fragile CSS paths
96
-
97
- ## Best Practices
98
-
99
- - Use `cy.intercept()` to stub/spy on API calls — don't depend on backend state
100
- - Use `cy.session()` for authentication — avoid logging in before every test
101
- - Avoid `cy.wait(ms)` — use `cy.intercept()` with aliases instead
102
- - Assert on visible elements — Cypress auto-retries, so assertions are resilient
103
- - Keep tests independent — each test should set up its own state
104
- - Use fixtures for test data — avoid hardcoding values in tests
105
- - Add `data-testid` attributes to components during development, not retroactively
106
-
107
- ## CI Configuration
108
-
109
- ```yaml
110
- # GitHub Actions example
111
- cypress:
112
- runs-on: ubuntu-latest
113
- steps:
114
- - uses: actions/checkout@v4
115
- - uses: cypress-io/github-action@v6
116
- with:
117
- build: npm run build
118
- start: npm run start
119
- wait-on: 'http://localhost:3000'
120
- browser: chrome
121
- ```
70
+ Priority: prefer `data-testid`, then `aria-*` attributes or `role`. Avoid fragile selectors (auto-generated classes, deep CSS paths). See [REFERENCE.md](REFERENCE.md) for CI selector consistency rules.
122
71
 
123
- ## Configuration (cypress.config.ts)
72
+ ## Best Practices (Cypress-specific and non-obvious)
124
73
 
125
- ```typescript
126
- import { defineConfig } from 'cypress';
127
-
128
- export default defineConfig({
129
- e2e: {
130
- baseUrl: 'http://localhost:3000',
131
- viewportWidth: 1280,
132
- viewportHeight: 720,
133
- video: false,
134
- screenshotOnRunFailure: true,
135
- defaultCommandTimeout: 10000,
136
- retries: { runMode: 2, openMode: 0 },
137
- },
138
- component: {
139
- devServer: {
140
- framework: 'next',
141
- bundler: 'webpack',
142
- },
143
- },
144
- });
145
- ```
74
+ - Prefer `cy.intercept()` with deterministic fixture payloads over test-time seeding for flaky network scenarios
75
+ - Use `cy.session()` with serialized auth state to speed repeatable suites; persist and reuse tokens across related specs
76
+ - Use route alias scoping (unique `@alias` names per spec) to avoid cross-test waits when running in parallel
77
+
78
+
79
+ For CI pipeline examples and `cypress.config.ts` snippets, see [REFERENCE.md](REFERENCE.md).
80
+
81
+ For advanced configuration examples and CI optimizations, see [REFERENCE.md](REFERENCE.md).
@@ -0,0 +1,18 @@
1
+ > Parent: [SKILL.md](./SKILL.md)
2
+
3
+ ### Figma → CSS Translation Rules (reference)
4
+
5
+ | Figma Concept | Code Equivalent |
6
+ |---------------|----------------|
7
+ | Auto Layout → horizontal | `display: flex; flex-direction: row` |
8
+ | Auto Layout → vertical | `display: flex; flex-direction: column` |
9
+ | Auto Layout gap | `gap: Npx` |
10
+ | Auto Layout padding | `padding: top right bottom bottom` |
11
+ | Fill → Hug contents | `width: auto` or `width: fit-content` |
12
+ | Fill → Fixed | `width: Npx` |
13
+ | Fill → Fill container | `flex: 1` or `width: 100%` |
14
+ | Corner radius | `border-radius: Npx` |
15
+ | Drop shadow | `box-shadow: x y blur spread color` |
16
+ | Opacity | `opacity: N` |
17
+
18
+ Examples and extended mapping (spacing, typography, effects) live here for agent consumption.
@@ -7,79 +7,54 @@ description: "Figma design-to-code workflows, design token extraction, component
7
7
 
8
8
  # Figma Design
9
9
 
10
- Figma-specific design-to-code patterns and MCP tool usage. For project-specific design system details, see the **frontend-design** skill.
10
+ For project-specific design system details, see the **frontend-design** skill.
11
11
 
12
12
  ## MCP Tools
13
13
 
14
- The Figma MCP server enables AI agents to inspect designs directly:
15
-
16
- | Tool | Purpose | Primary Agents |
17
- |------|---------|----------------|
18
- | `figma/get_file` | Retrieve full Figma file structure | UI/UX Expert |
19
- | `figma/get_file_nodes` | Get specific nodes/frames | UI/UX Expert, Developer |
20
- | `figma/get_images` | Export nodes as images | UI/UX Expert |
21
- | `figma/get_comments` | Read design review comments | UI/UX Expert |
22
- | `figma/get_styles` | Extract color/text/effect styles | Developer |
23
- | `figma/get_components` | List reusable components | Developer |
14
+ | Tool | Purpose |
15
+ |------|---------|
16
+ | `figma/get_file` | Retrieve full Figma file structure |
17
+ | `figma/get_file_nodes` | Get specific nodes/frames |
18
+ | `figma/get_images` | Export nodes as images |
19
+ | `figma/get_comments` | Read design review comments |
20
+ | `figma/get_styles` | Extract color/text/effect styles |
21
+ | `figma/get_components` | List reusable components |
22
+
23
+ ### Example MCP invocations
24
+
25
+ ```json
26
+ // figma/get_file — full file structure
27
+ { "file_key": "a1b2C3d4E5", "depth": 2 }
28
+ // figma/get_file_nodes — specific frames
29
+ { "file_key": "a1b2C3d4E5", "node_ids": ["123:45"] }
30
+ // figma/get_images — export as PNG at 2x
31
+ { "file_key": "a1b2C3d4E5", "ids": ["123:45"], "format": "png", "scale": 2 }
32
+ ```
24
33
 
25
34
  ## Design-to-Code Workflow
26
35
 
27
- 1. **Identify the frame** — get the Figma file URL or node ID from the task
28
- 2. **Inspect the design** — use `get_file_nodes` to retrieve layout, spacing, colors, typography
29
- 3. **Extract tokens** — map Figma styles to CSS custom properties or design tokens
30
- 4. **Build components** — translate Figma components to React/framework components
31
- 5. **Verify** — compare the implementation against the original design visually
32
-
33
- ## Design Token Extraction
34
-
35
- ### From Figma Styles to CSS
36
-
37
- ```css
38
- /* Map Figma color styles to CSS custom properties */
39
- :root {
40
- /* Primary */
41
- --color-primary-50: #eff6ff;
42
- --color-primary-500: #3b82f6;
43
- --color-primary-900: #1e3a8a;
44
-
45
- /* Typography (from Figma text styles) */
46
- --font-heading: 'Inter', sans-serif;
47
- --font-body: 'Inter', sans-serif;
48
- --font-size-sm: 0.875rem; /* 14px */
49
- --font-size-base: 1rem; /* 16px */
50
- --font-size-lg: 1.125rem; /* 18px */
51
- --font-size-xl: 1.25rem; /* 20px */
52
-
53
- /* Spacing (from Figma auto-layout) */
54
- --space-xs: 4px;
55
- --space-sm: 8px;
56
- --space-md: 16px;
57
- --space-lg: 24px;
58
- --space-xl: 32px;
36
+ 1. **Identify the frame** — obtain the Figma file key or node ID from the task input.
37
+ 2. **Inspect nodes** — call `figma/get_file_nodes` for the target node IDs and extract bounding boxes, fills, text styles, and auto-layout info.
38
+ 3. **Extract tokens** — map returned styles to token files (colors, typography, spacing) and commit tokens to `src/styles/tokens.css` or a token JSON.
39
+ 4. **Implement component** — scaffold a framework component that consumes tokens and matches layout properties (gap, padding, width). Import tokens (CSS variables or JSON) and attach a `data-testid` for programmatic verification.
40
+
41
+ ```tsx
42
+ // src/components/ui/Card.tsx consumes tokens, matches Figma layout
43
+ import '../styles/tokens.css';
44
+ interface CardProps { title: string; description?: string }
45
+ export function Card({ title, description }: CardProps) {
46
+ return (
47
+ <div data-testid="card" className="card">
48
+ <span className="card-title">{title}</span>
49
+ {description && <p>{description}</p>}
50
+ </div>
51
+ );
59
52
  }
60
53
  ```
54
+ 5. **Verify programmatically** — run a visual diff or DOM-attribute check:
55
+ - Render in Storybook and compare DOM bounding boxes against Figma node metrics.
56
+ - Acceptance: differences <= 4px for spacing and matching token colors; fonts must match family and weight.
57
+ 6. **Feedback loop** — if implementation deviates beyond thresholds, update token mapping or request design clarification and repeat from step 2.
61
58
 
62
- ### Translation Rules
63
-
64
- | Figma Concept | Code Equivalent |
65
- |---------------|----------------|
66
- | Auto Layout → horizontal | `display: flex; flex-direction: row` |
67
- | Auto Layout → vertical | `display: flex; flex-direction: column` |
68
- | Auto Layout gap | `gap: Npx` |
69
- | Auto Layout padding | `padding: top right bottom left` |
70
- | Fill → Hug contents | `width: auto` or `width: fit-content` |
71
- | Fill → Fixed | `width: Npx` |
72
- | Fill → Fill container | `flex: 1` or `width: 100%` |
73
- | Corner radius | `border-radius: Npx` |
74
- | Drop shadow | `box-shadow: x y blur spread color` |
75
- | Opacity | `opacity: N` |
76
-
77
- ## Best Practices
59
+ See REFERENCE.md for a verification script and Figma→CSS translation rules.
78
60
 
79
- - Always extract design tokens systematically — don't hardcode values from visual inspection
80
- - Use Figma's auto-layout values directly for flex/grid properties
81
- - Match Figma's responsive breakpoints to the project's breakpoint system
82
- - Export SVG assets directly from Figma via `get_images` — don't recreate manually
83
- - Cross-reference Figma component names with the codebase component library
84
- - When in doubt about values, inspect the Figma node — don't approximate
85
- - Keep a mapping document between Figma styles and CSS custom properties
@@ -0,0 +1,9 @@
1
+ > Parent: [SKILL.md](./SKILL.md)
2
+
3
+ Last Updated: 2026-03-31
4
+
5
+ Reference: Jira advanced reference
6
+
7
+ - JQL examples and common automation snippets
8
+ - Epic/Story mapping templates and branch naming conventions
9
+ - Project-specific mapping file: tracker-config.md (see ../../.opencastle/project/tracker-config.md)
@@ -1,44 +1,30 @@
1
1
  ---
2
2
  name: jira-management
3
- description: "Jira board conventions for tracking feature work issue naming, labels, priorities, status workflow, and session continuity via Atlassian Rovo MCP. Use when decomposing features into tasks or resuming interrupted sessions."
3
+ description: "Create and update Jira issues, epics, and sprints; manage backlog and sprint transitions. Use when you say: 'create a ticket', 'open a story', 'link an epic', 'start a sprint', or 'search the backlog'."
4
4
  ---
5
5
 
6
6
  <!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .opencastle/ directory instead. -->
7
7
 
8
8
  # Task Management with Jira
9
9
 
10
- Conventions for tracking feature work on Jira via the Atlassian Rovo MCP server. For project-specific project keys, workflow state IDs, and board configuration, see [tracker-config.md](../../.opencastle/project/tracker-config.md).
10
+ For project-specific project keys, workflow state IDs, and board configuration, see [tracker-config.md](../../.opencastle/project/tracker-config.md).
11
11
 
12
- ## Atlassian Rovo MCP Server
12
+ ## MCP Tool Examples
13
13
 
14
- The Atlassian Rovo MCP server connects to Jira (and Confluence) via `https://mcp.atlassian.com/v2/sse`. It uses OAuth authentication — users authenticate through their Atlassian account when the MCP connection is first established.
14
+ ```json
15
+ // Search issues
16
+ { "jql": "project = PROJ AND status = 'In Progress' ORDER BY priority DESC" }
15
17
 
16
- **Available capabilities:**
17
- - Search Jira issues with JQL
18
- - Create and update issues
19
- - Read issue details, comments, and attachments
20
- - Search Confluence pages for context
21
- - Create Confluence pages
18
+ // Create issue
19
+ { "project": "PROJ", "summary": "[UI] Build PriceRangeFilter", "type": "Task", "description": "Objective: ...\nFiles: ...\nAC: ..." }
22
20
 
23
- **Rate limits** (per hour):
24
- - Free: 500 calls
25
- - Standard: 1,000 calls
26
- - Premium/Enterprise: 1,000 + 20 per user (up to 10,000)
27
-
28
- ## Discovered Issues (Bug Tickets)
21
+ // Transition issue
22
+ { "issueKey": "PROJ-42", "status": "In Progress" }
23
+ ```
29
24
 
30
- When an agent encounters a pre-existing bug or issue unrelated to the current task, it must be tracked. Follow this flow:
25
+ ## Discovered Issues
31
26
 
32
- 1. **Check** known issues docs and Jira (search for open bugs) to see if it's already tracked
33
- 2. **If tracked** — skip it, continue with current work
34
- 3. **If NOT tracked:**
35
- - **Unfixable limitation** — add to known issues with Issue ID, Status, Severity, Evidence, Root Cause, Solution Options
36
- - **Fixable bug** — create a Jira issue:
37
- - **Summary:** `[Area] Short description of the symptom`
38
- - **Type:** Bug
39
- - **Priority:** High if it affects users, Medium if cosmetic or non-blocking
40
- - **Description:** Include symptoms, reproduction steps, affected files, and any error messages or screenshots
41
- - **Status:** Backlog (unless it's blocking current work, then To Do)
27
+ Check Jira first; if untracked, create a `[Bug]` issue in Backlog with symptoms, repro steps, and affected files.
42
28
 
43
29
  ## Issue Naming
44
30
 
@@ -54,17 +40,6 @@ Use `[Area] Short description` format in the Summary field:
54
40
  [Docs] Update data model documentation
55
41
  ```
56
42
 
57
- **Area prefixes:** `[Schema]`, `[DB]`, `[Query]`, `[UI]`, `[Page]`, `[API]`, `[Auth]`, `[Test]`, `[Docs]`, `[Deploy]`, `[Data]`, `[Perf]`, `[Security]`
58
-
59
- ## Priority
60
-
61
- | Jira Priority | Meaning | When to use |
62
- |---------------|---------|-------------|
63
- | Highest | Blocker | Blocks other tasks, critical path |
64
- | High | Important | Core feature work, on critical path |
65
- | Medium | Normal | Supporting tasks, can be parallelized |
66
- | Low | Nice-to-have | Docs, cleanup, polish |
67
- | Lowest | Backlog | Captured for future consideration |
68
43
 
69
44
  ## Status Workflow
70
45
 
@@ -72,99 +47,36 @@ Use `[Area] Short description` format in the Summary field:
72
47
  Backlog → To Do → In Progress → In Review → Done
73
48
  ```
74
49
 
75
- - **Backlog** — Captured but not yet planned
76
- - **To Do** — Planned for current sprint/feature, ready to start
77
- - **In Progress** — Actively being worked on by an agent
78
- - **In Review** — PR opened, awaiting review/merge
79
- - **Done** — Completed and verified
80
-
81
- ### Status Drivers
82
-
83
- Issue status is driven by **two sources** — the Team Lead agent (via MCP) and the Jira automation/GitHub integration (automatically).
84
-
85
- **Agent-driven transitions (via MCP):**
86
- - **To Do → In Progress** — when the agent starts working on a task
87
- - **In Progress → Done** — when non-PR tasks are verified (e.g., docs, config changes)
50
+ ### Transition Rules
88
51
 
89
- **Automation-driven transitions:**
90
- If your Jira project has GitHub integration or automation rules configured, PR lifecycle events can auto-update issue status. Configure these in Jira under *Project settings → Automation*.
91
-
92
- **Linking issues to PRs:** Include the Jira issue key (e.g., `PROJ-123`) in the branch name or PR title. Use the branch name format: `<type>/<issue-key>-<short-description>`.
52
+ - Agent (via MCP): `To Do → In Progress` on start; `In Progress → Done` on verified completion.
53
+ - Automation: PR events auto-update status when GitHub/Jira integration is configured.
54
+ - Link via Jira key in branch/PR title (e.g., `PROJ-123`).
93
55
 
94
56
  ## Issue Descriptions
95
57
 
96
- Every issue must include:
97
-
98
- ```markdown
99
- **Objective:** One sentence describing the deliverable
100
-
101
- **Files (partition):**
102
- - `path/to/relevant/file.ts`
103
- - `path/to/another/file.ts`
104
-
105
- **Acceptance Criteria:**
106
- - [ ] Specific, verifiable outcome 1
107
- - [ ] Specific, verifiable outcome 2
108
-
109
- **Dependencies:** PROJ-XX (if any)
110
- ```
111
-
112
- The **Files (partition)** section defines which files this agent is allowed to modify. This prevents merge conflicts when multiple agents work in parallel — no two issues in the same phase should list overlapping files.
58
+ Every issue must include: **Objective** (one sentence), **Files (partition)** (paths this agent may modify), **Acceptance Criteria** (verifiable checklist), **Dependencies** (issue keys).
113
59
 
114
- ## Feature Grouping
115
-
116
- - Use a **Jira Epic** for each major feature
117
- - All related issues (Stories/Tasks) belong to that Epic
118
- - Issues track individual subtasks within the feature
119
- - Use components or labels for domain grouping (e.g., `frontend`, `backend`, `database`)
60
+ Group related issues under a Jira Epic; use components or labels for domain grouping.
120
61
 
121
62
  ## Session Workflow
122
63
 
123
- ### Starting a new feature
124
-
125
- 1. Search the board (JQL) to check for existing in-progress work
126
- 2. Decompose the feature into issues following the conventions above
127
- 3. Create all issues in Jira with correct naming, type, priority, and descriptions
128
- 4. Link dependencies between issues using Jira issue links
129
- 5. Begin delegation
130
-
131
- ### During execution
132
-
133
- - Move issue to **In Progress** before delegating to an agent
134
- - Move issue to **Done** immediately after the agent completes and output is verified
135
- - Add comments to the issue if a task is blocked, explaining the blocker
136
-
137
- ### Resuming an interrupted session
138
-
139
- 1. Search issues by status (In Progress, To Do) in the project
140
- 2. Read issue descriptions to restore context
141
- 3. Pick up where work left off — no need to re-analyze from scratch
142
-
143
- ### Completing a feature
144
-
145
- 1. Verify all issues in the Epic are **Done** or closed
146
- 2. Run final build/lint/test checks
147
- 3. Close the Epic
64
+ 1. Search the board (JQL) for existing in-progress work.
65
+ 2. Decompose the feature into issues; create all in Jira — verify each returns a valid issue key.
66
+ 3. Link dependencies between issues.
67
+ 4. Delegate: move issue to **In Progress** before starting; move to **Done** after verified.
68
+ 5. If creation/transition fails: retry once; check project key and workflow state IDs in [tracker-config.md](../../.opencastle/project/tracker-config.md).
69
+ 6. On resume: search by status (In Progress, To Do), read descriptions, continue.
70
+ 7. On completion: verify all Epic issues are Done, run build/lint/test, close the Epic.
148
71
 
149
72
  ## JQL Quick Reference
150
73
 
151
74
  Common queries for agent workflows:
152
75
 
153
76
  ```jql
154
- # Find in-progress work
155
77
  project = PROJ AND status = "In Progress" ORDER BY priority DESC
156
-
157
- # Find planned work
158
78
  project = PROJ AND status = "To Do" ORDER BY priority DESC
159
-
160
- # Find bugs
161
79
  project = PROJ AND type = Bug AND status != Done ORDER BY priority DESC
162
-
163
- # Find work in current sprint
164
80
  project = PROJ AND sprint in openSprints() ORDER BY priority DESC
165
-
166
- # Find blockers
167
81
  project = PROJ AND priority = Highest AND status != Done
168
82
  ```
169
-
170
- Replace `PROJ` with the actual project key from [tracker-config.md](../../.opencastle/project/tracker-config.md).