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.
- package/LICENSE +21 -93
- package/README.md +5 -3
- package/package.json +2 -2
- package/src/dashboard/dist/data/convoys/demo-api-v2.json +3 -3
- package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +4 -4
- package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +12 -12
- package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +3 -3
- package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +1 -1
- package/src/dashboard/dist/data/convoys/demo-docs-update.json +7 -7
- package/src/dashboard/dist/data/convoys/demo-perf-opt.json +4 -4
- package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
- package/src/dashboard/public/data/convoys/demo-api-v2.json +3 -3
- package/src/dashboard/public/data/convoys/demo-auth-revamp.json +4 -4
- package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +12 -12
- package/src/dashboard/public/data/convoys/demo-data-pipeline.json +3 -3
- package/src/dashboard/public/data/convoys/demo-deploy-ci.json +1 -1
- package/src/dashboard/public/data/convoys/demo-docs-update.json +7 -7
- package/src/dashboard/public/data/convoys/demo-perf-opt.json +4 -4
- package/src/orchestrator/customizations/stack/sanity-config.md +43 -0
- package/src/orchestrator/customizations/stack/supabase-config.md +53 -0
- package/src/orchestrator/plugins/astro/REFERENCE.md +5 -0
- package/src/orchestrator/plugins/astro/SKILL.md +22 -29
- package/src/orchestrator/plugins/chrome-devtools/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/chrome-devtools/SKILL.md +10 -55
- package/src/orchestrator/plugins/contentful/REFERENCE.md +16 -0
- package/src/orchestrator/plugins/contentful/SKILL.md +69 -29
- package/src/orchestrator/plugins/convex/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/convex/SKILL.md +13 -1
- package/src/orchestrator/plugins/cypress/REFERENCE.md +5 -0
- package/src/orchestrator/plugins/cypress/SKILL.md +29 -93
- package/src/orchestrator/plugins/figma/REFERENCE.md +18 -0
- package/src/orchestrator/plugins/figma/SKILL.md +41 -66
- package/src/orchestrator/plugins/jira/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/jira/SKILL.md +26 -114
- package/src/orchestrator/plugins/linear/SKILL.md +42 -109
- package/src/orchestrator/plugins/netlify/REFERENCE.md +33 -0
- package/src/orchestrator/plugins/netlify/SKILL.md +34 -64
- package/src/orchestrator/plugins/nextjs/REFERENCE.md +73 -0
- package/src/orchestrator/plugins/nextjs/SKILL.md +49 -138
- package/src/orchestrator/plugins/notion/SKILL.md +26 -168
- package/src/orchestrator/plugins/notion/TEMPLATES.md +88 -0
- package/src/orchestrator/plugins/nx/REFERENCE.md +10 -0
- package/src/orchestrator/plugins/nx/SKILL.md +12 -12
- package/src/orchestrator/plugins/playwright/REFERENCE.md +12 -0
- package/src/orchestrator/plugins/playwright/SKILL.md +33 -98
- package/src/orchestrator/plugins/prisma/REFERENCE.md +42 -0
- package/src/orchestrator/plugins/prisma/SKILL.md +18 -68
- package/src/orchestrator/plugins/resend/REFERENCE.md +61 -0
- package/src/orchestrator/plugins/resend/SKILL.md +23 -137
- package/src/orchestrator/plugins/sanity/SKILL.md +50 -3
- package/src/orchestrator/plugins/slack/REFERENCE.md +24 -0
- package/src/orchestrator/plugins/slack/SKILL.md +36 -111
- package/src/orchestrator/plugins/strapi/REFERENCE.md +35 -0
- package/src/orchestrator/plugins/strapi/SKILL.md +60 -24
- package/src/orchestrator/plugins/supabase/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/supabase/SKILL.md +44 -16
- package/src/orchestrator/plugins/teams/REFERENCE.md +36 -0
- package/src/orchestrator/plugins/teams/SKILL.md +35 -85
- package/src/orchestrator/plugins/trello/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/trello/SKILL.md +25 -97
- package/src/orchestrator/plugins/turborepo/REFERENCE.md +9 -0
- package/src/orchestrator/plugins/turborepo/SKILL.md +13 -1
- package/src/orchestrator/plugins/vercel/SKILL.md +45 -52
- package/src/orchestrator/plugins/vitest/SKILL.md +10 -14
- package/src/orchestrator/prompts/create-skill.prompt.md +62 -20
- package/src/orchestrator/prompts/generate-convoy.prompt.md +6 -0
- package/src/orchestrator/prompts/generate-prd.prompt.md +4 -0
- package/src/orchestrator/skills/accessibility-standards/REFERENCE.md +34 -0
- package/src/orchestrator/skills/accessibility-standards/SKILL.md +6 -3
- package/src/orchestrator/skills/agent-hooks/HOOKS-REFERENCE.md +48 -0
- package/src/orchestrator/skills/agent-hooks/SKILL.md +41 -65
- package/src/orchestrator/skills/agent-memory/KNOWLEDGE-GRAPH.md +49 -0
- package/src/orchestrator/skills/agent-memory/SKILL.md +30 -67
- package/src/orchestrator/skills/api-patterns/SKILL.md +29 -1
- package/src/orchestrator/skills/backbone-scaffolding/EXAMPLES.md +16 -0
- package/src/orchestrator/skills/backbone-scaffolding/SKILL.md +99 -0
- package/src/orchestrator/skills/code-commenting/SKILL.md +1 -1
- package/src/orchestrator/skills/context-map/REFERENCE.md +70 -0
- package/src/orchestrator/skills/context-map/SKILL.md +28 -55
- package/src/orchestrator/skills/data-engineering/REFERENCE.md +55 -0
- package/src/orchestrator/skills/data-engineering/SKILL.md +40 -34
- package/src/orchestrator/skills/decomposition/REFERENCE.md +28 -0
- package/src/orchestrator/skills/decomposition/SKILL.md +15 -30
- package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +31 -65
- package/src/orchestrator/skills/documentation-standards/SKILL.md +31 -50
- package/src/orchestrator/skills/documentation-standards/WRITING-GUIDE.md +39 -0
- package/src/orchestrator/skills/fast-review/REFERENCE.md +30 -0
- package/src/orchestrator/skills/fast-review/SKILL.md +11 -31
- package/src/orchestrator/skills/frontend-design/COMPONENTS.md +113 -0
- package/src/orchestrator/skills/frontend-design/REFERENCE.md +36 -0
- package/src/orchestrator/skills/frontend-design/SKILL.md +36 -85
- package/src/orchestrator/skills/git-workflow/SKILL.md +13 -2
- package/src/orchestrator/skills/memory-merger/REFERENCE.md +20 -0
- package/src/orchestrator/skills/memory-merger/SKILL.md +29 -38
- package/src/orchestrator/skills/observability-logging/SKILL.md +5 -12
- package/src/orchestrator/skills/orchestration-protocols/REFERENCE.md +42 -0
- package/src/orchestrator/skills/orchestration-protocols/SKILL.md +54 -41
- package/src/orchestrator/skills/panel-majority-vote/REFERENCE.md +55 -0
- package/src/orchestrator/skills/panel-majority-vote/SKILL.md +30 -75
- package/src/orchestrator/skills/performance-optimization/SKILL.md +41 -1
- package/src/orchestrator/skills/project-consistency/SKILL.md +50 -89
- package/src/orchestrator/skills/project-consistency/TEMPLATES.md +39 -0
- package/src/orchestrator/skills/react-development/REFERENCE.md +7 -0
- package/src/orchestrator/skills/react-development/SKILL.md +50 -42
- package/src/orchestrator/skills/security-hardening/SKILL.md +88 -1
- package/src/orchestrator/skills/self-improvement/LESSON-CATEGORIES.md +36 -0
- package/src/orchestrator/skills/self-improvement/SKILL.md +19 -25
- package/src/orchestrator/skills/seo-patterns/REFERENCE.md +54 -0
- package/src/orchestrator/skills/seo-patterns/SKILL.md +20 -88
- package/src/orchestrator/skills/session-checkpoints/CHECKPOINT-TEMPLATE.md +58 -0
- package/src/orchestrator/skills/session-checkpoints/SKILL.md +34 -58
- package/src/orchestrator/skills/team-lead-reference/SKILL.md +37 -30
- package/src/orchestrator/skills/testing-workflow/SKILL.md +55 -2
- package/src/orchestrator/skills/validation-gates/REFERENCE.md +50 -0
- 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
|
|
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
|
-
|
|
16
|
-
npx cypress
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
npx cypress run
|
|
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('
|
|
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
|
|
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
|
-
##
|
|
72
|
+
## Best Practices (Cypress-specific and non-obvious)
|
|
124
73
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
10
|
+
For project-specific design system details, see the **frontend-design** skill.
|
|
11
11
|
|
|
12
12
|
## MCP Tools
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
|
17
|
-
|
|
18
|
-
| `figma/
|
|
19
|
-
| `figma/
|
|
20
|
-
| `figma/
|
|
21
|
-
| `figma/
|
|
22
|
-
|
|
23
|
-
|
|
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** —
|
|
28
|
-
2. **Inspect
|
|
29
|
-
3. **Extract tokens** — map
|
|
30
|
-
4. **
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
10
|
+
For project-specific project keys, workflow state IDs, and board configuration, see [tracker-config.md](../../.opencastle/project/tracker-config.md).
|
|
11
11
|
|
|
12
|
-
##
|
|
12
|
+
## MCP Tool Examples
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
```json
|
|
15
|
+
// Search issues
|
|
16
|
+
{ "jql": "project = PROJ AND status = 'In Progress' ORDER BY priority DESC" }
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
24
|
-
-
|
|
25
|
-
|
|
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
|
-
|
|
25
|
+
## Discovered Issues
|
|
31
26
|
|
|
32
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
-
|
|
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
|
-
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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).
|