opencastle 0.32.11 → 0.32.13
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/README.md +5 -3
- package/dist/cli/convoy/engine.d.ts.map +1 -1
- package/dist/cli/convoy/engine.js +1 -0
- package/dist/cli/convoy/engine.js.map +1 -1
- package/dist/cli/convoy/pipeline.d.ts.map +1 -1
- package/dist/cli/convoy/pipeline.js +5 -2
- package/dist/cli/convoy/pipeline.js.map +1 -1
- package/dist/cli/convoy/pipeline.test.js +44 -0
- package/dist/cli/convoy/pipeline.test.js.map +1 -1
- package/dist/cli/run.js +4 -4
- package/dist/cli/run.js.map +1 -1
- package/dist/dashboard/scripts/etl.d.ts +1 -0
- package/dist/dashboard/scripts/etl.d.ts.map +1 -1
- package/dist/dashboard/scripts/etl.js +7 -2
- package/dist/dashboard/scripts/etl.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/convoy/engine.ts +1 -0
- package/src/cli/convoy/pipeline.test.ts +49 -0
- package/src/cli/convoy/pipeline.ts +7 -2
- package/src/cli/run.ts +4 -4
- package/src/dashboard/dist/_astro/{index.6xXNs4L2.css → index.CADNhRPS.css} +1 -1
- 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 +18 -18
- 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 +3 -3
- package/src/dashboard/dist/data/convoys/demo-perf-opt.json +10 -10
- package/src/dashboard/dist/index.html +29 -6
- 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 +18 -18
- 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 +3 -3
- package/src/dashboard/public/data/convoys/demo-perf-opt.json +10 -10
- package/src/dashboard/scripts/etl.ts +9 -5
- package/src/dashboard/src/pages/index.astro +36 -4
- package/src/dashboard/src/styles/dashboard.css +4 -0
- 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/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/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 +1 -1
- 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
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
> Parent: [SKILL.md](./SKILL.md)
|
|
2
|
+
|
|
3
|
+
# Frontend Design Components
|
|
4
|
+
|
|
5
|
+
Extended component patterns, card variants, and hero animations for the **frontend-design** skill.
|
|
6
|
+
|
|
7
|
+
## Design Tokens (starter)
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
:root {
|
|
11
|
+
--color-bg: #0f1724;
|
|
12
|
+
--color-ink: #e6eef8;
|
|
13
|
+
--color-accent: #ff7a59;
|
|
14
|
+
--space-1: 4px;
|
|
15
|
+
--space-2: 8px;
|
|
16
|
+
--space-3: 16px;
|
|
17
|
+
--radius-1: 6px;
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Entrance Animation (starter)
|
|
22
|
+
|
|
23
|
+
```css
|
|
24
|
+
@keyframes fadeUp {
|
|
25
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
26
|
+
to { opacity: 1; transform: translateY(0); }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
30
|
+
.fade-in-up { animation: fadeUp 420ms cubic-bezier(.2,.9,.2,1) both; }
|
|
31
|
+
}
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Card Patterns
|
|
35
|
+
|
|
36
|
+
### Glass Card
|
|
37
|
+
|
|
38
|
+
```css
|
|
39
|
+
.card-glass {
|
|
40
|
+
background: rgba(255, 255, 255, 0.05);
|
|
41
|
+
backdrop-filter: blur(12px);
|
|
42
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
43
|
+
border-radius: var(--radius-1);
|
|
44
|
+
padding: var(--space-3);
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Elevated Card
|
|
49
|
+
|
|
50
|
+
```css
|
|
51
|
+
.card-elevated {
|
|
52
|
+
background: var(--color-bg);
|
|
53
|
+
border-radius: var(--radius-1);
|
|
54
|
+
padding: var(--space-3);
|
|
55
|
+
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.12);
|
|
56
|
+
transition: transform 200ms ease, box-shadow 200ms ease;
|
|
57
|
+
}
|
|
58
|
+
.card-elevated:hover {
|
|
59
|
+
transform: translateY(-2px);
|
|
60
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Hero Animations
|
|
65
|
+
|
|
66
|
+
### Staggered Fade-In
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
.hero-stagger > * {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
transform: translateY(12px);
|
|
72
|
+
animation: fadeUp 500ms cubic-bezier(.2,.9,.2,1) forwards;
|
|
73
|
+
}
|
|
74
|
+
.hero-stagger > *:nth-child(1) { animation-delay: 0ms; }
|
|
75
|
+
.hero-stagger > *:nth-child(2) { animation-delay: 80ms; }
|
|
76
|
+
.hero-stagger > *:nth-child(3) { animation-delay: 160ms; }
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Gradient Shift
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
.hero-gradient {
|
|
83
|
+
background: linear-gradient(135deg, var(--color-accent), var(--color-bg));
|
|
84
|
+
background-size: 200% 200%;
|
|
85
|
+
animation: gradientShift 6s ease infinite;
|
|
86
|
+
}
|
|
87
|
+
@keyframes gradientShift {
|
|
88
|
+
0%, 100% { background-position: 0% 50%; }
|
|
89
|
+
50% { background-position: 100% 50%; }
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Button Variants
|
|
94
|
+
|
|
95
|
+
```css
|
|
96
|
+
.btn-primary {
|
|
97
|
+
background: var(--color-accent);
|
|
98
|
+
color: #fff;
|
|
99
|
+
padding: var(--space-2) var(--space-3);
|
|
100
|
+
border-radius: var(--radius-1);
|
|
101
|
+
font-weight: 600;
|
|
102
|
+
transition: opacity 150ms ease;
|
|
103
|
+
}
|
|
104
|
+
.btn-primary:hover { opacity: 0.9; }
|
|
105
|
+
|
|
106
|
+
.btn-ghost {
|
|
107
|
+
background: transparent;
|
|
108
|
+
color: var(--color-ink);
|
|
109
|
+
border: 1px solid currentColor;
|
|
110
|
+
padding: var(--space-2) var(--space-3);
|
|
111
|
+
border-radius: var(--radius-1);
|
|
112
|
+
}
|
|
113
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
> Parent: [SKILL.md](./SKILL.md)
|
|
2
|
+
|
|
3
|
+
Frontend Design REFERENCE: detailed principles, typography catalogue, tokens, and component patterns.
|
|
4
|
+
|
|
5
|
+
Last Updated: 2026-03-31
|
|
6
|
+
|
|
7
|
+
## Design Principles (extended)
|
|
8
|
+
|
|
9
|
+
| Dimension | Rule |
|
|
10
|
+
|-----------|------|
|
|
11
|
+
| Direction | Pick an extreme aesthetic (brutally minimal, maximalist, retro-futuristic, luxury, brutalist, art deco, editorial…) and commit fully. Name it in 2–3 words. |
|
|
12
|
+
| Typography | Characterful display+body pair. No Inter/Roboto/Arial. `clamp()` fluid scale; heading lh ~1.1–1.2, body lh ~1.5–1.7; letter-spacing on uppercase/small. |
|
|
13
|
+
| Color | CSS vars only; dominant + sharp accent hierarchy; WCAG AA (4.5:1 body, 3:1 large); dark/light both intentional. |
|
|
14
|
+
| Motion | CSS-only for HTML; Motion library for React; staggered page entrance; custom easing; `prefers-reduced-motion` fallback. |
|
|
15
|
+
| Layout | Asymmetry, overlap, diagonal flow, grid-breaking. Consistent spacing tokens — no ad-hoc values. Holds at mobile/tablet/desktop. |
|
|
16
|
+
| Atmosphere | Gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows. No purple-on-white defaults. |
|
|
17
|
+
|
|
18
|
+
## Typography Pairings (catalogue)
|
|
19
|
+
|
|
20
|
+
| Aesthetic | Display | Body | Mood |
|
|
21
|
+
|-----------|---------|------|------|
|
|
22
|
+
| Editorial luxury | Playfair Display | Source Serif 4 | Authoritative, rich |
|
|
23
|
+
| Swiss precision | Darker Grotesque | IBM Plex Sans | Sharp grotesque |
|
|
24
|
+
| Warm humanist | Fraunces | Nunito Sans | Friendly, approachable |
|
|
25
|
+
| Brutalist edge | Monument Extended | JetBrains Mono | Raw technical power |
|
|
26
|
+
| Art nouveau organic | Cormorant Garamond | Lora | Flowing, calligraphic |
|
|
27
|
+
| Retro-futuristic | Syne | Outfit | Geometric boldness |
|
|
28
|
+
|
|
29
|
+
## Tokens & Patterns
|
|
30
|
+
|
|
31
|
+
See `COMPONENTS.md` for tokens and component code snippets. This reference holds the rationale and extended examples used across projects.
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
- Use these tables to choose a type system and enforce token fallbacks.
|
|
36
|
+
- Link lessons and PRs that change foundational tokens to the `project-consistency` skill guidance.
|
|
@@ -1,111 +1,62 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-design
|
|
3
|
-
description: "
|
|
3
|
+
description: "Defines a named visual aesthetic, selects typography pairings, builds CSS token systems, and adds entrance animations for high-design-quality pages. Use when the user asks to design a landing page, style a marketing site, create a distinctive UI theme, pick fonts, or add CSS animations — specifically when visual polish and brand identity matter rather than generic component scaffolding."
|
|
4
4
|
license: Complete terms in LICENSE.txt
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- ⚠️ This file is managed by OpenCastle. Edits will be overwritten on update. Customize in the .opencastle/ directory instead. -->
|
|
8
8
|
|
|
9
|
-
## Design
|
|
10
|
-
|
|
11
|
-
| Dimension | Rule |
|
|
12
|
-
|-----------|------|
|
|
13
|
-
| Direction | Pick an extreme aesthetic (brutally minimal, maximalist, retro-futuristic, luxury, brutalist, art deco, editorial…) and commit fully. Name it in 2–3 words. |
|
|
14
|
-
| Typography | Characterful display+body pair. No Inter/Roboto/Arial. `clamp()` fluid scale; heading lh ~1.1–1.2, body lh ~1.5–1.7; letter-spacing on uppercase/small. |
|
|
15
|
-
| Color | CSS vars only; dominant + sharp accent hierarchy; WCAG AA (4.5:1 body, 3:1 large); dark/light both intentional. |
|
|
16
|
-
| Motion | CSS-only for HTML; Motion library for React; staggered page entrance; custom easing; `prefers-reduced-motion` fallback. |
|
|
17
|
-
| Layout | Asymmetry, overlap, diagonal flow, grid-breaking. Consistent spacing tokens — no ad-hoc values. Holds at mobile/tablet/desktop. |
|
|
18
|
-
| Atmosphere | Gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows. No purple-on-white defaults. |
|
|
9
|
+
## Design Workflow
|
|
19
10
|
|
|
20
|
-
**
|
|
11
|
+
1. **Name the aesthetic** — declare a 2–3 word direction in a code comment at the top of the main CSS file
|
|
12
|
+
2. **Set foundations** — define `:root` CSS custom properties for colors, spacing, and radii
|
|
13
|
+
3. **Build components** — implement layout, cards, heroes, forms using only tokens from step 2
|
|
14
|
+
4. **Add motion** — add `@keyframes` entrance animations wrapped in a reduced-motion guard
|
|
15
|
+
5. **Validate** — run Quality Checklist below; fix any failing item before marking done
|
|
21
16
|
|
|
22
|
-
|
|
17
|
+
### Quick-start example
|
|
23
18
|
|
|
24
19
|
```css
|
|
20
|
+
/* Aesthetic: minimal neon */
|
|
25
21
|
:root {
|
|
26
|
-
--color-
|
|
27
|
-
--color-
|
|
28
|
-
--
|
|
29
|
-
|
|
30
|
-
--
|
|
31
|
-
--
|
|
32
|
-
--text-xl: clamp(1.563rem, 1.35rem + 1.06vw, 2rem);
|
|
33
|
-
--text-2xl: clamp(1.953rem, 1.6rem + 1.77vw, 2.75rem);
|
|
34
|
-
--text-hero: clamp(2.441rem, 1.8rem + 3.2vw, 4.5rem);
|
|
35
|
-
|
|
36
|
-
--space-2: 0.5rem; --space-4: 1rem; --space-6: 1.5rem;
|
|
37
|
-
--space-8: 2rem; --space-16: 4rem; --space-32: 8rem;
|
|
38
|
-
|
|
39
|
-
--ease-out-expo: cubic-bezier(0.16, 1, 0.3, 1);
|
|
40
|
-
--ease-in-out-back: cubic-bezier(0.68, -0.6, 0.32, 1.6);
|
|
41
|
-
--duration-fast: 150ms; --duration-normal: 300ms; --duration-slow: 600ms;
|
|
42
|
-
|
|
43
|
-
--shadow-md: 0 4px 16px rgba(26, 22, 20, 0.08);
|
|
44
|
-
--shadow-lg: 0 12px 48px rgba(26, 22, 20, 0.12);
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Component Patterns
|
|
49
|
-
|
|
50
|
-
**Card:**
|
|
51
|
-
```css
|
|
52
|
-
.card {
|
|
53
|
-
position: relative;
|
|
54
|
-
background: var(--color-paper);
|
|
55
|
-
border: 1px solid var(--color-border);
|
|
56
|
-
border-left: 4px solid var(--color-accent);
|
|
57
|
-
padding: var(--space-8) var(--space-6);
|
|
58
|
-
transition: transform var(--duration-normal) var(--ease-out-expo),
|
|
59
|
-
box-shadow var(--duration-normal) var(--ease-out-expo);
|
|
60
|
-
}
|
|
61
|
-
.card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
|
|
62
|
-
.card__label {
|
|
63
|
-
position: absolute; top: calc(-1 * var(--space-3)); left: var(--space-4);
|
|
64
|
-
background: var(--color-accent); color: var(--color-ink);
|
|
65
|
-
font-size: var(--text-xs); font-weight: 700;
|
|
66
|
-
letter-spacing: 0.08em; text-transform: uppercase;
|
|
67
|
-
padding: var(--space-1) var(--space-3);
|
|
22
|
+
--color-bg: #0a0a0f; --color-surface: #141420;
|
|
23
|
+
--color-text: #e8e6e3; --color-accent: #6366f1;
|
|
24
|
+
--space-sm: 8px; --space-md: 16px; --space-lg: 32px;
|
|
25
|
+
--radius-md: 8px;
|
|
26
|
+
--font-heading: 'Fraunces', 'Georgia', serif;
|
|
27
|
+
--font-body: 'Inter', system-ui, sans-serif;
|
|
68
28
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
**Hero staggered reveal:**
|
|
72
|
-
```css
|
|
73
|
-
@keyframes rise {
|
|
74
|
-
from { opacity: 0; transform: translateY(24px); }
|
|
29
|
+
@keyframes fade-up {
|
|
30
|
+
from { opacity: 0; transform: translateY(12px); }
|
|
75
31
|
to { opacity: 1; transform: translateY(0); }
|
|
76
32
|
}
|
|
77
|
-
|
|
78
|
-
.
|
|
79
|
-
|
|
80
|
-
.hero__body { animation: rise var(--duration-slow) var(--ease-out-expo) both; animation-delay: 400ms; }
|
|
81
|
-
.hero__cta { animation: rise var(--duration-slow) var(--ease-out-expo) both; animation-delay: 550ms; }
|
|
33
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
34
|
+
.hero__title { animation: fade-up 0.4s ease-out both; }
|
|
35
|
+
}
|
|
82
36
|
```
|
|
83
37
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
| Aesthetic | Display | Body | Mood |
|
|
87
|
-
|-----------|---------|------|------|
|
|
88
|
-
| Editorial luxury | Playfair Display | Source Serif 4 | Authoritative, rich |
|
|
89
|
-
| Swiss precision | Darker Grotesque | IBM Plex Sans | Sharp grotesque |
|
|
90
|
-
| Warm humanist | Fraunces | Nunito Sans | Friendly, approachable |
|
|
91
|
-
| Brutalist edge | Monument Extended | JetBrains Mono | Raw technical power |
|
|
92
|
-
| Art nouveau organic | Cormorant Garamond | Lora | Flowing, calligraphic |
|
|
93
|
-
| Retro-futuristic | Syne | Outfit | Geometric boldness |
|
|
38
|
+
Card patterns, hero animations, and extended token sets are in [COMPONENTS.md](./COMPONENTS.md).
|
|
94
39
|
|
|
95
|
-
|
|
40
|
+
## Design Principles
|
|
96
41
|
|
|
97
|
-
|
|
42
|
+
High-level design principles and the full set of example constraints live in [REFERENCE.md](./REFERENCE.md). Keep this checklist as a short reminder:
|
|
98
43
|
|
|
99
|
-
|
|
44
|
+
- Pick a named aesthetic (2–3 words) and commit to it.
|
|
45
|
+
- Use tokenized colors/spacing, respect WCAG contrast, and prefer semantic HTML.
|
|
46
|
+
- Respect `prefers-reduced-motion` and keep critical animations under 500ms.
|
|
100
47
|
|
|
101
|
-
**
|
|
48
|
+
**Every design must have one unforgettable detail.** No two designs should look alike.
|
|
102
49
|
|
|
103
|
-
|
|
50
|
+
## Typography Pairings
|
|
104
51
|
|
|
105
|
-
|
|
52
|
+
Recommended typography pairings and an extended catalogue are in [REFERENCE.md](./REFERENCE.md). For production, always include a metric-preserving fallback chain (e.g., `'Fraunces', 'Georgia', serif`).
|
|
106
53
|
|
|
107
|
-
|
|
54
|
+
> Load the **project-consistency** skill for the full Foundation Phase pattern and prompt templates.
|
|
108
55
|
|
|
109
|
-
|
|
56
|
+
### Quality Checklist (quick)
|
|
110
57
|
|
|
111
|
-
|
|
58
|
+
- **Contrast:** Text ≥4.5:1 body, ≥3:1 large.
|
|
59
|
+
- **Tokens:** All spacing/colors in `:root` tokens; avoid ad-hoc values.
|
|
60
|
+
- **Responsiveness:** Layouts break at defined tokens; no overflow at mobile sizes.
|
|
61
|
+
- **Motion:** `prefers-reduced-motion` respected; key animations <500ms.
|
|
62
|
+
- **Accessibility:** Keyboard focus states visible; semantic HTML used.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: git-workflow
|
|
3
|
-
description: "
|
|
3
|
+
description: "Defines branch naming conventions, PR template requirements, commit message format, discovered-issues escalation policy, and task tracking conventions. Load when committing, pushing, or opening PRs."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Git Workflow & Delivery
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
> Parent: [SKILL.md](./SKILL.md)
|
|
2
|
+
|
|
3
|
+
## Memory Merger Reference
|
|
4
|
+
|
|
5
|
+
### Worked Example: LES-042 — MCP Tool Timeout
|
|
6
|
+
|
|
7
|
+
**Lesson:** `LES-042: MCP tool timeout causes silent failures — always set explicit timeout and check return value` (cited 4×, severity high, 90 days old)
|
|
8
|
+
|
|
9
|
+
**Draft:**
|
|
10
|
+
```
|
|
11
|
+
Lesson: LES-042 — MCP tool timeout
|
|
12
|
+
Target: .github/skills/orchestration-protocols/SKILL.md
|
|
13
|
+
Section: Error Recovery Playbook
|
|
14
|
+
Edit: Add row: | **MCP timeout** | Tool returns null/undefined after delay | Set explicit timeout (30s); check return value; retry once; fall back to CLI; log to DLQ | <!-- Merged from LES-042 -->
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**After merge in target file**, archive in LESSONS-LEARNED.md:
|
|
18
|
+
```markdown
|
|
19
|
+
### LES-042: MCP tool timeout → Merged to `.github/skills/orchestration-protocols/SKILL.md` on 2026-03-15
|
|
20
|
+
```
|
|
@@ -1,49 +1,34 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory-merger
|
|
3
|
-
description: "
|
|
3
|
+
description: "Reviews mature LESSONS-LEARNED.md entries, rewrites them as permanent rules in skill/instruction files, and archives graduated lessons. Use when graduating lessons into skills, promoting validated lessons, updating skills from past learnings, archiving mature lessons, codifying repeated patterns, or cleaning up a crowded LESSONS-LEARNED.md."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Memory Merger
|
|
7
7
|
|
|
8
|
-
Promotes validated lessons from `.opencastle/LESSONS-LEARNED.md` into instruction/skill files where they have permanent impact.
|
|
9
8
|
|
|
10
|
-
##
|
|
9
|
+
## Run Criteria
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
|
15
|
-
|
|
16
|
-
|
|
|
11
|
+
Combined signals to identify merge candidates.
|
|
12
|
+
|
|
13
|
+
| Criterion | Signal / Threshold |
|
|
14
|
+
|-----------|--------------------|
|
|
15
|
+
| File size | LESSONS-LEARNED.md > 50 entries |
|
|
16
|
+
| Citation count | Cited 3+ times across sessions |
|
|
17
|
+
| Age | >60 days and still relevant |
|
|
17
18
|
| Category cluster | 5+ lessons in same category |
|
|
18
|
-
|
|
|
19
|
+
| Severity | Marked `high` or blocking |
|
|
20
|
+
| Discretionary | Curator / maintainer judgement (stale file) |
|
|
19
21
|
|
|
20
|
-
##
|
|
22
|
+
## Workflow (numbered)
|
|
23
|
+
|
|
24
|
+
1. Scan LESSONS-LEARNED.md for candidate entries (frequency, severity, age).
|
|
25
|
+
2. Map each candidate to a target file and section.
|
|
26
|
+
3. Draft the exact edit (concise rule or example).
|
|
27
|
+
4. Apply the edit with an attribution comment.
|
|
28
|
+
5. Archive the migrated lesson in LESSONS-LEARNED.md with a merge note.
|
|
29
|
+
6. Update the index and run validation checks.
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
| Criterion | Signal |
|
|
25
|
-
|-----------|--------|
|
|
26
|
-
| Frequency | Cited/re-discovered 3+ times |
|
|
27
|
-
| Severity | Marked `high` |
|
|
28
|
-
| Age | >60 days, still relevant |
|
|
29
|
-
| Concentration | 5+ in same category → extract pattern |
|
|
30
|
-
| Tool-specific | MCP tool, codebase-tool command, or framework pattern |
|
|
31
|
-
|
|
32
|
-
### 2 — Map to Target File
|
|
33
|
-
|
|
34
|
-
| Category | Target |
|
|
35
|
-
|----------|--------|
|
|
36
|
-
| `task-management` | skill-matrix `task-management` slot |
|
|
37
|
-
| `mcp-tools` | agent/skill that uses the tool |
|
|
38
|
-
| `codebase-tool` | skill-matrix `codebase-tool` slot |
|
|
39
|
-
| `cms` / `database` | respective skill-matrix slots |
|
|
40
|
-
| `browser-testing` | skill-matrix `e2e-testing` slot |
|
|
41
|
-
| `git-workflow` | `.github/skills/git-workflow/SKILL.md` |
|
|
42
|
-
| `deployment` | `.github/skills/deployment-infrastructure/SKILL.md` |
|
|
43
|
-
| `delegation` | `.github/agents/team-lead.agent.md` or `team-lead-reference` skill |
|
|
44
|
-
| `testing` | `.github/skills/testing-workflow/SKILL.md` |
|
|
45
|
-
| `ui` / `framework` | `framework` slot or `react-development` skill |
|
|
46
|
-
| Cross-cutting | `.github/instructions/general.instructions.md` |
|
|
31
|
+
## Merge Protocol
|
|
47
32
|
|
|
48
33
|
### 3 — Draft Edit
|
|
49
34
|
|
|
@@ -73,12 +58,18 @@ Move merged lessons to `## Archived (Merged)` at the bottom of `LESSONS-LEARNED.
|
|
|
73
58
|
|
|
74
59
|
Update `## Index by Category` in `LESSONS-LEARNED.md` to mark archived lessons.
|
|
75
60
|
|
|
76
|
-
|
|
61
|
+
### Worked Example
|
|
62
|
+
|
|
63
|
+
See [REFERENCE.md](./REFERENCE.md) for a full worked merge example (LES-042: MCP tool timeout).
|
|
64
|
+
|
|
65
|
+
## Quality Gates (validation checkpoints)
|
|
77
66
|
|
|
78
67
|
- [ ] Merged content reads naturally (not copy-pasted)
|
|
79
|
-
- [ ] No duplicate rules created
|
|
80
|
-
- [ ] Archived lesson references target file
|
|
68
|
+
- [ ] No duplicate rules created in target files or other skills
|
|
69
|
+
- [ ] Archived lesson references target file and date
|
|
81
70
|
- [ ] Core insight preserved — no loss of nuance
|
|
71
|
+
- [ ] Target file still passes lint/markdown checks (if applicable)
|
|
72
|
+
- [ ] A quick smoke verification (search for relevant keyword) confirms merge applied
|
|
82
73
|
|
|
83
74
|
## Anti-Patterns
|
|
84
75
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: observability-logging
|
|
3
|
-
description: "
|
|
3
|
+
description: "Writes session logs, records delegation decisions, and tracks review/dispute outcomes in NDJSON format. Use when logging session activity, recording audit trails, or running pre-response verification checklists."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Observability Logging
|
|
@@ -62,21 +62,14 @@ Verify any append: `tail -1 .opencastle/logs/events.ndjson`
|
|
|
62
62
|
**⛔ STOP.** Verify before responding — fix any missing log NOW.
|
|
63
63
|
|
|
64
64
|
- [ ] **Lessons read** — `.opencastle/LESSONS-LEARNED.md` read at session start
|
|
65
|
-
- [ ] **Lessons captured** — new lesson added via **self-improvement** if any retry occurred
|
|
66
|
-
- [ ] **Discovered issues tracked** — pre-existing bugs added to `KNOWN-ISSUES.md` or tracker
|
|
67
|
-
- [ ] **Lint/type/test pass** — no new errors after code changes
|
|
68
65
|
- [ ] **Session logged** — `events.ndjson` has a `session` record (ALWAYS)
|
|
69
|
-
- [ ] **Delegations logged** — `delegation` record per delegation (Team Lead)
|
|
70
|
-
- [ ] **Reviews logged** — `review` record per fast review (if
|
|
71
|
-
- [ ] **Panels logged** — `panel` record per panel vote (if any)
|
|
72
|
-
- [ ] **Disputes logged** — `dispute` record per dispute (if any)
|
|
66
|
+
- [ ] **Delegations logged** — `delegation` record per delegation (Team Lead) (if applicable)
|
|
67
|
+
- [ ] **Reviews logged** — `review` record per fast review (if applicable)
|
|
73
68
|
|
|
74
69
|
## Universal Agent Rules
|
|
75
70
|
|
|
76
|
-
1. **
|
|
77
|
-
2. **
|
|
78
|
-
3. **Read and update lessons** — Read `.opencastle/LESSONS-LEARNED.md` before starting; add lessons after retries via **self-improvement** skill.
|
|
79
|
-
4. **Log every session** — See [logging-mandatory](../../snippets/logging-mandatory.md).
|
|
71
|
+
1. **Read and update lessons** — Read `.opencastle/LESSONS-LEARNED.md` before starting; add lessons after retries via **self-improvement** skill.
|
|
72
|
+
2. **Log every session** — See [logging-mandatory](../../snippets/logging-mandatory.md).
|
|
80
73
|
|
|
81
74
|
## Base Output Contract
|
|
82
75
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
> Parent: [SKILL.md](./SKILL.md)
|
|
2
|
+
|
|
3
|
+
## Agent Health Monitoring
|
|
4
|
+
|
|
5
|
+
### Health Signals
|
|
6
|
+
|
|
7
|
+
| Signal | Threshold | Recovery |
|
|
8
|
+
|--------|-----------|----------|
|
|
9
|
+
| **Stuck** — no output/changes | Sub: 5 min / BG: 15 min | Nudge; if frozen, abort + re-delegate with simpler scope |
|
|
10
|
+
| **Looping** — same error repeated | 3 consecutive failures | Abort; add context; re-delegate with explicit fix path |
|
|
11
|
+
| **Scope creep** — files outside partition | Any | Redirect: "Only modify files in [partition]. Revert [file]." |
|
|
12
|
+
| **Context exhaustion** — confused/repetitive | Visible instruction amnesia | Checkpoint, end session, resume in fresh context |
|
|
13
|
+
| **Permission loop** — waiting for input | 2+ prompts without progress | Auto-approve if safe; abort + re-delegate |
|
|
14
|
+
|
|
15
|
+
**Cadence:** Sub-agents — continuous (real-time). Background agents — check at 10 min, then every 10 min. Always review full diff before accepting.
|
|
16
|
+
|
|
17
|
+
### Escalation Path
|
|
18
|
+
|
|
19
|
+
1. **Failure 1:** Re-delegate with more specific prompt + error context
|
|
20
|
+
2. **Failure 2:** Downscope (split into smaller pieces), re-delegate
|
|
21
|
+
3. **Failure 3:** Log to `.opencastle/AGENT-FAILURES.md`; if 3× panel BLOCK or conflict, create dispute in `.opencastle/DISPUTES.md` (see **team-lead-reference** § Dispute Protocol)
|
|
22
|
+
|
|
23
|
+
## Error Recovery Playbook
|
|
24
|
+
|
|
25
|
+
| Failure | Symptom | Recovery |
|
|
26
|
+
|---------|---------|----------|
|
|
27
|
+
| **Retry loop** | Same command fails 3+ times | Abort; identify root cause; re-delegate with explicit fix; log lesson |
|
|
28
|
+
| **MCP unavailable** | Tool connection/timeout errors | Check server; retry once; fall back to CLI; log to DLQ if critical |
|
|
29
|
+
| **Broken BG output** | Lint/type/test errors on return | Fix inline if small; discard + re-delegate if fundamental; DLQ after 2 fails |
|
|
30
|
+
| **Parallel merge conflict** | Two agents modified overlapping files | Accept complex side first; re-delegate simple side to adapt; log lesson |
|
|
31
|
+
| **Context exhausted** | Confused/repetitive responses | Checkpoint; end session; resume with checkpoint; reduce parallel work |
|
|
32
|
+
| **Post-merge test failure** | Tests pass alone but fail merged | Run affected tests; check import/state conflicts; delegate fix to likely cause |
|
|
33
|
+
|
|
34
|
+
## Agent Circuit Breaker
|
|
35
|
+
|
|
36
|
+
| Threshold | Action |
|
|
37
|
+
|-----------|--------|
|
|
38
|
+
| **2 failures** | Investigate: same error class? Model healthy? Prompt pattern? |
|
|
39
|
+
| **3 failures** | Open circuit — stop delegating; reassign or escalate to user |
|
|
40
|
+
| **Next session** | Half-open — resets; re-open + add lesson if fails again |
|
|
41
|
+
|
|
42
|
+
Judgment-based, not a hard gate. 3 similar failures with the same error is more concerning than 3 unrelated failures.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: orchestration-protocols
|
|
3
|
-
description: "
|
|
3
|
+
description: "Coordinates multiple agents with parallel task spawning, health monitoring, circuit breakers, and escalation paths. Use when managing parallel agents, handling agent timeouts, orchestrate agents, run tasks in parallel, concurrent agent execution, or fan-out tasks. Use when coordinating multi-agent task delegation."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Orchestration Protocols
|
|
7
7
|
|
|
8
|
-
Runtime patterns for managing delegated agents.
|
|
8
|
+
Runtime patterns for managing delegated agents.
|
|
9
9
|
|
|
10
10
|
## Active Steering
|
|
11
11
|
|
|
@@ -13,11 +13,11 @@ Intervene early when you spot:
|
|
|
13
13
|
|
|
14
14
|
| Signal | Action |
|
|
15
15
|
|--------|--------|
|
|
16
|
-
| Failing tests/builds |
|
|
17
|
-
| Unexpected file changes |
|
|
18
|
-
| Scope creep |
|
|
19
|
-
| Circular behavior |
|
|
20
|
-
| Intent misunderstanding |
|
|
16
|
+
| Failing tests/builds | Check dependency resolution; revert if builds break |
|
|
17
|
+
| Unexpected file changes | Revert; enforce partition |
|
|
18
|
+
| Scope creep | Redirect to scoped files only |
|
|
19
|
+
| Circular behavior | Halt; switch approach |
|
|
20
|
+
| Intent misunderstanding | Clarify prompt; re-delegate |
|
|
21
21
|
|
|
22
22
|
When redirecting, explain *why* and *how*:
|
|
23
23
|
|
|
@@ -35,7 +35,7 @@ Run autonomously in isolated Git worktrees. Reserve for well-scoped tasks >5 min
|
|
|
35
35
|
|
|
36
36
|
## Parallel Research Protocol
|
|
37
37
|
|
|
38
|
-
Spawn multiple research sub-agents in parallel when 3+ independent questions must be answered before implementation. **
|
|
38
|
+
Spawn multiple research sub-agents in parallel when 3+ independent questions must be answered before implementation. **Spawn if:** ≥3 independent questions AND answers span multiple codebase areas — otherwise handle sequentially.
|
|
39
39
|
|
|
40
40
|
### Spawn Strategy
|
|
41
41
|
|
|
@@ -56,9 +56,11 @@ Return: key findings, relevant file paths (with line numbers), patterns, unanswe
|
|
|
56
56
|
### Result Merge Protocol
|
|
57
57
|
|
|
58
58
|
1. Collect all results into single context
|
|
59
|
-
2.
|
|
60
|
-
3.
|
|
61
|
-
4.
|
|
59
|
+
2. **Checkpoint:** verify every researcher returned a result (no timeout or error); re-run any that failed before proceeding.
|
|
60
|
+
3. Deduplicate (same file/pattern counts once)
|
|
61
|
+
4. Resolve conflicts — specific evidence beats general observations
|
|
62
|
+
5. Synthesize into concise context block for implementation prompts
|
|
63
|
+
6. **Checkpoint:** confirm synthesized block covers every original question; mark any unanswered questions as blockers.
|
|
62
64
|
|
|
63
65
|
## Batch Reviews
|
|
64
66
|
|
|
@@ -80,43 +82,54 @@ Summarize prior phase output before passing to the next agent. **Extract:** file
|
|
|
80
82
|
- Blockers: [none | list]
|
|
81
83
|
```
|
|
82
84
|
|
|
83
|
-
|
|
85
|
+
**Concrete example:**
|
|
86
|
+
```
|
|
87
|
+
### Prior Phase Output
|
|
88
|
+
**Phase 2 — Researcher A — Find usages of `calculateTotal()`**
|
|
89
|
+
- Files changed: none (read-only research)
|
|
90
|
+
- Decisions: `calculateTotal` lives in `libs/cart/src/lib/total.ts`; new logic should live in `libs/cart/src/lib/discounts.ts`
|
|
91
|
+
- Verification: lint ✅ | types ✅ | unit smoke test (cart total) ✅
|
|
92
|
+
- Blockers: design question on rounding behavior (see `docs/rounding.md`)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Health & Recovery Reference
|
|
84
96
|
|
|
85
|
-
|
|
97
|
+
Detailed Agent Health Monitoring, Error Recovery Playbook, and Agent Circuit Breaker tables have been moved to REFERENCE.md to keep this skill concise. See REFERENCE.md in this directory for thresholds, recovery steps, and escalation flows.
|
|
86
98
|
|
|
87
|
-
| Signal | Threshold | Recovery |
|
|
88
|
-
|--------|-----------|----------|
|
|
89
|
-
| **Stuck** — no output/changes | Sub: 5 min / BG: 15 min | Nudge; if frozen, abort + re-delegate with simpler scope |
|
|
90
|
-
| **Looping** — same error repeated | 3 consecutive failures | Abort; add context; re-delegate with explicit fix path |
|
|
91
|
-
| **Scope creep** — files outside partition | Any | Redirect: "Only modify files in [partition]. Revert [file]." |
|
|
92
|
-
| **Context exhaustion** — confused/repetitive | Visible instruction amnesia | Checkpoint, end session, resume in fresh context |
|
|
93
|
-
| **Permission loop** — waiting for input | 2+ prompts without progress | Auto-approve if safe; abort + re-delegate |
|
|
94
99
|
|
|
95
|
-
|
|
100
|
+
### CLI examples (spawn & monitor)
|
|
96
101
|
|
|
97
|
-
|
|
102
|
+
These use the OpenCastle CLI (`npx opencastle` or `bin/cli.mjs`):
|
|
98
103
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
104
|
+
```bash
|
|
105
|
+
opencastle run --file convoy.yml --dry-run
|
|
106
|
+
opencastle run --file convoy.yml --verbose
|
|
107
|
+
opencastle run --resume
|
|
108
|
+
opencastle run --status
|
|
109
|
+
opencastle run --retry-failed
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Post-run verification (copy-paste checks):**
|
|
102
113
|
|
|
103
|
-
|
|
114
|
+
```bash
|
|
115
|
+
if [ $? -ne 0 ]; then
|
|
116
|
+
echo "opencastle run failed — inspect .opencastle/convoy.log" \
|
|
117
|
+
&& tail -n 200 .opencastle/convoy.log && exit 1
|
|
118
|
+
fi
|
|
104
119
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
| **Broken BG output** | Lint/type/test errors on return | Fix inline if small; discard + re-delegate if fundamental; DLQ after 2 fails |
|
|
110
|
-
| **Parallel merge conflict** | Two agents modified overlapping files | Accept complex side first; re-delegate simple side to adapt; log lesson |
|
|
111
|
-
| **Context exhausted** | Confused/repetitive responses | Checkpoint; end session; resume with checkpoint; reduce parallel work |
|
|
112
|
-
| **Post-merge test failure** | Tests pass alone but fail merged | Run affected tests; check import/state conflicts; delegate fix to likely cause |
|
|
120
|
+
npx opencastle run --status
|
|
121
|
+
|
|
122
|
+
grep -i "error\|failed" .opencastle/convoy.log || echo "no obvious errors in logs"
|
|
123
|
+
```
|
|
113
124
|
|
|
114
|
-
##
|
|
125
|
+
## Validation & Verification Checkpoints
|
|
115
126
|
|
|
116
|
-
|
|
|
117
|
-
|
|
118
|
-
|
|
|
119
|
-
|
|
|
120
|
-
|
|
|
127
|
+
| Phase | Check | Command / Action |
|
|
128
|
+
|-------|-------|-----------------|
|
|
129
|
+
| Pre-spawn | Inputs present (task, scope, ACs) | `test -s convoy.yml \|\| exit 1` |
|
|
130
|
+
| During-run | Tail for fatal errors | `tail -F .opencastle/convoy.log \| grep -i "fatal\|error"` |
|
|
131
|
+
| Pre-merge | All agents exited 0 | `jq -e '.agents[] \| .exit_code == 0' .opencastle/results.json` |
|
|
132
|
+
| Output schema | Required fields present | `jq -e '.agents[] \| (.findings and .file_paths)' .opencastle/results.json` |
|
|
133
|
+
| Post-merge | Lint + smoke tests pass | `npm run lint && npm test -- -t "smoke"` |
|
|
134
|
+
| Blocker | Any failure | Block merge; reopen to original researcher(s) |
|
|
121
135
|
|
|
122
|
-
Judgment-based, not a hard gate. 3 similar failures with the same error is more concerning than 3 unrelated failures.
|