opencastle 0.32.8 → 0.32.10
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/dist/cli/convoy/spec-builder.d.ts +16 -0
- package/dist/cli/convoy/spec-builder.d.ts.map +1 -1
- package/dist/cli/convoy/spec-builder.js +115 -62
- package/dist/cli/convoy/spec-builder.js.map +1 -1
- package/dist/cli/pipeline.d.ts.map +1 -1
- package/dist/cli/pipeline.js +279 -116
- package/dist/cli/pipeline.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +19 -7
- package/dist/cli/plan.js.map +1 -1
- package/package.json +1 -1
- package/src/cli/convoy/spec-builder.ts +124 -58
- package/src/cli/pipeline.ts +324 -128
- package/src/cli/plan.ts +25 -7
- 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 +9 -9
- 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 +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 +18 -18
- package/src/dashboard/public/data/convoys/demo-data-pipeline.json +9 -9
- 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 +4 -4
- package/src/orchestrator/prompts/fix-prd.prompt.md +4 -9
- package/src/orchestrator/prompts/generate-convoy.prompt.md +1 -0
- package/src/orchestrator/prompts/generate-prd.prompt.md +29 -0
- package/src/orchestrator/prompts/validate-prd.prompt.md +14 -37
|
@@ -42,28 +42,28 @@
|
|
|
42
42
|
"name": "libs/auth/src/jwt-middleware.ts",
|
|
43
43
|
"type": "file",
|
|
44
44
|
"task_id": "auth-t2",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
|
|
49
49
|
"name": "libs/auth/src/rls-policies.sql",
|
|
50
50
|
"type": "file",
|
|
51
51
|
"task_id": "auth-t3",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
|
|
56
56
|
"name": "reports/auth-review-summary.md",
|
|
57
57
|
"type": "summary",
|
|
58
58
|
"task_id": "auth-t5",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
|
|
63
63
|
"name": "tests/auth/integration.test.ts",
|
|
64
64
|
"type": "file",
|
|
65
65
|
"task_id": "auth-t4",
|
|
66
|
-
"created_at": "2026-03-
|
|
66
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
69
|
"has_more_events": false,
|
|
@@ -46,47 +46,47 @@
|
|
|
46
46
|
],
|
|
47
47
|
"artifact_count": 6,
|
|
48
48
|
"artifacts": [
|
|
49
|
+
{
|
|
50
|
+
"id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
|
|
51
|
+
"name": "reports/panel-review-dashboard.md",
|
|
52
|
+
"type": "summary",
|
|
53
|
+
"task_id": "ui-t7",
|
|
54
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
|
|
58
|
+
"name": "reports/visual-regression.json",
|
|
59
|
+
"type": "json",
|
|
60
|
+
"task_id": "ui-t6",
|
|
61
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
62
|
+
},
|
|
49
63
|
{
|
|
50
64
|
"id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
|
|
51
65
|
"name": "src/components/DonutChart.tsx",
|
|
52
66
|
"type": "file",
|
|
53
67
|
"task_id": "ui-t3",
|
|
54
|
-
"created_at": "2026-03-
|
|
68
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
55
69
|
},
|
|
56
70
|
{
|
|
57
71
|
"id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
|
|
58
72
|
"name": "src/components/KpiCard.tsx",
|
|
59
73
|
"type": "file",
|
|
60
74
|
"task_id": "ui-t2",
|
|
61
|
-
"created_at": "2026-03-
|
|
75
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
62
76
|
},
|
|
63
77
|
{
|
|
64
78
|
"id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
|
|
65
79
|
"name": "src/components/design-tokens.ts",
|
|
66
80
|
"type": "file",
|
|
67
81
|
"task_id": "ui-t1",
|
|
68
|
-
"created_at": "2026-03-
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
|
|
72
|
-
"name": "reports/panel-review-dashboard.md",
|
|
73
|
-
"type": "summary",
|
|
74
|
-
"task_id": "ui-t7",
|
|
75
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
|
|
79
|
-
"name": "reports/visual-regression.json",
|
|
80
|
-
"type": "json",
|
|
81
|
-
"task_id": "ui-t6",
|
|
82
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
82
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"id": "artifact-demo-dashboard-ui-src-styles-animations-css",
|
|
86
86
|
"name": "src/styles/animations.css",
|
|
87
87
|
"type": "file",
|
|
88
88
|
"task_id": "ui-t4",
|
|
89
|
-
"created_at": "2026-03-
|
|
89
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
90
90
|
}
|
|
91
91
|
],
|
|
92
92
|
"has_more_events": false,
|
|
@@ -37,26 +37,26 @@
|
|
|
37
37
|
"dlq_entries": [],
|
|
38
38
|
"artifact_count": 3,
|
|
39
39
|
"artifacts": [
|
|
40
|
-
{
|
|
41
|
-
"id": "artifact-demo-data-pipeline-src-etl-schema-ts",
|
|
42
|
-
"name": "src/etl/schema.ts",
|
|
43
|
-
"type": "file",
|
|
44
|
-
"task_id": "etl-t1",
|
|
45
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
46
|
-
},
|
|
47
40
|
{
|
|
48
41
|
"id": "artifact-demo-data-pipeline-src-etl-pipeline-ts",
|
|
49
42
|
"name": "src/etl/pipeline.ts",
|
|
50
43
|
"type": "file",
|
|
51
44
|
"task_id": "etl-t2",
|
|
52
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "artifact-demo-data-pipeline-src-etl-schema-ts",
|
|
49
|
+
"name": "src/etl/schema.ts",
|
|
50
|
+
"type": "file",
|
|
51
|
+
"task_id": "etl-t1",
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
|
|
56
56
|
"name": "tests/etl/pipeline.test.ts",
|
|
57
57
|
"type": "file",
|
|
58
58
|
"task_id": "etl-t3",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
60
60
|
}
|
|
61
61
|
],
|
|
62
62
|
"has_more_events": false,
|
|
@@ -42,21 +42,21 @@
|
|
|
42
42
|
"name": "docs/ARCHITECTURE.md",
|
|
43
43
|
"type": "file",
|
|
44
44
|
"task_id": "docs-t1",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-docs-update-docs-README-md",
|
|
49
49
|
"name": "docs/README.md",
|
|
50
50
|
"type": "file",
|
|
51
51
|
"task_id": "docs-t1",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-docs-update-docs-api-reference-json",
|
|
56
56
|
"name": "docs/api-reference.json",
|
|
57
57
|
"type": "json",
|
|
58
58
|
"task_id": "docs-t2",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
60
60
|
}
|
|
61
61
|
],
|
|
62
62
|
"has_more_events": false,
|
|
@@ -42,28 +42,28 @@
|
|
|
42
42
|
"name": "reports/bundle-analysis.json",
|
|
43
43
|
"type": "json",
|
|
44
44
|
"task_id": "perf-t1",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
|
|
49
49
|
"name": "reports/web-vitals-improvement.md",
|
|
50
50
|
"type": "summary",
|
|
51
51
|
"task_id": "perf-t4",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-perf-opt-src-charts-index-ts",
|
|
56
56
|
"name": "src/charts/index.ts",
|
|
57
57
|
"type": "file",
|
|
58
58
|
"task_id": "perf-t2",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
|
|
63
63
|
"name": "src/utils/image-loader.ts",
|
|
64
64
|
"type": "file",
|
|
65
65
|
"task_id": "perf-t3",
|
|
66
|
-
"created_at": "2026-03-
|
|
66
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
69
|
"has_more_events": false,
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
{
|
|
2
|
-
"hash": "
|
|
2
|
+
"hash": "5b4f7f3a",
|
|
3
3
|
"configHash": "30f8ea04",
|
|
4
|
-
"lockfileHash": "
|
|
5
|
-
"browserHash": "
|
|
4
|
+
"lockfileHash": "97dd4ca5",
|
|
5
|
+
"browserHash": "5e0c0fdd",
|
|
6
6
|
"optimized": {
|
|
7
7
|
"astro > cssesc": {
|
|
8
8
|
"src": "../../../../../node_modules/cssesc/cssesc.js",
|
|
9
9
|
"file": "astro___cssesc.js",
|
|
10
|
-
"fileHash": "
|
|
10
|
+
"fileHash": "e6cc8cd0",
|
|
11
11
|
"needsInterop": true
|
|
12
12
|
},
|
|
13
13
|
"astro > aria-query": {
|
|
14
14
|
"src": "../../../../../node_modules/aria-query/lib/index.js",
|
|
15
15
|
"file": "astro___aria-query.js",
|
|
16
|
-
"fileHash": "
|
|
16
|
+
"fileHash": "1b619d97",
|
|
17
17
|
"needsInterop": true
|
|
18
18
|
},
|
|
19
19
|
"astro > axobject-query": {
|
|
20
20
|
"src": "../../../../../node_modules/axobject-query/lib/index.js",
|
|
21
21
|
"file": "astro___axobject-query.js",
|
|
22
|
-
"fileHash": "
|
|
22
|
+
"fileHash": "7383e20b",
|
|
23
23
|
"needsInterop": true
|
|
24
24
|
}
|
|
25
25
|
},
|
|
@@ -51,21 +51,21 @@
|
|
|
51
51
|
"name": "docs/api-v2-contract.json",
|
|
52
52
|
"type": "json",
|
|
53
53
|
"task_id": "api-t1",
|
|
54
|
-
"created_at": "2026-03-
|
|
54
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"id": "artifact-demo-api-v2-reports-security-gate-failure-md",
|
|
58
58
|
"name": "reports/security-gate-failure.md",
|
|
59
59
|
"type": "summary",
|
|
60
60
|
"task_id": "api-t3",
|
|
61
|
-
"created_at": "2026-03-
|
|
61
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"id": "artifact-demo-api-v2-src-api-rate-limiter-ts",
|
|
65
65
|
"name": "src/api/rate-limiter.ts",
|
|
66
66
|
"type": "file",
|
|
67
67
|
"task_id": "api-t2",
|
|
68
|
-
"created_at": "2026-03-
|
|
68
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
69
69
|
}
|
|
70
70
|
],
|
|
71
71
|
"has_more_events": false,
|
|
@@ -42,28 +42,28 @@
|
|
|
42
42
|
"name": "libs/auth/src/jwt-middleware.ts",
|
|
43
43
|
"type": "file",
|
|
44
44
|
"task_id": "auth-t2",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
|
|
49
49
|
"name": "libs/auth/src/rls-policies.sql",
|
|
50
50
|
"type": "file",
|
|
51
51
|
"task_id": "auth-t3",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
|
|
56
56
|
"name": "reports/auth-review-summary.md",
|
|
57
57
|
"type": "summary",
|
|
58
58
|
"task_id": "auth-t5",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
|
|
63
63
|
"name": "tests/auth/integration.test.ts",
|
|
64
64
|
"type": "file",
|
|
65
65
|
"task_id": "auth-t4",
|
|
66
|
-
"created_at": "2026-03-
|
|
66
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
69
|
"has_more_events": false,
|
|
@@ -46,47 +46,47 @@
|
|
|
46
46
|
],
|
|
47
47
|
"artifact_count": 6,
|
|
48
48
|
"artifacts": [
|
|
49
|
+
{
|
|
50
|
+
"id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
|
|
51
|
+
"name": "reports/panel-review-dashboard.md",
|
|
52
|
+
"type": "summary",
|
|
53
|
+
"task_id": "ui-t7",
|
|
54
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
|
|
58
|
+
"name": "reports/visual-regression.json",
|
|
59
|
+
"type": "json",
|
|
60
|
+
"task_id": "ui-t6",
|
|
61
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
62
|
+
},
|
|
49
63
|
{
|
|
50
64
|
"id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
|
|
51
65
|
"name": "src/components/DonutChart.tsx",
|
|
52
66
|
"type": "file",
|
|
53
67
|
"task_id": "ui-t3",
|
|
54
|
-
"created_at": "2026-03-
|
|
68
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
55
69
|
},
|
|
56
70
|
{
|
|
57
71
|
"id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
|
|
58
72
|
"name": "src/components/KpiCard.tsx",
|
|
59
73
|
"type": "file",
|
|
60
74
|
"task_id": "ui-t2",
|
|
61
|
-
"created_at": "2026-03-
|
|
75
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
62
76
|
},
|
|
63
77
|
{
|
|
64
78
|
"id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
|
|
65
79
|
"name": "src/components/design-tokens.ts",
|
|
66
80
|
"type": "file",
|
|
67
81
|
"task_id": "ui-t1",
|
|
68
|
-
"created_at": "2026-03-
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
"id": "artifact-demo-dashboard-ui-reports-panel-review-dashboard-md",
|
|
72
|
-
"name": "reports/panel-review-dashboard.md",
|
|
73
|
-
"type": "summary",
|
|
74
|
-
"task_id": "ui-t7",
|
|
75
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
|
|
79
|
-
"name": "reports/visual-regression.json",
|
|
80
|
-
"type": "json",
|
|
81
|
-
"task_id": "ui-t6",
|
|
82
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
82
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"id": "artifact-demo-dashboard-ui-src-styles-animations-css",
|
|
86
86
|
"name": "src/styles/animations.css",
|
|
87
87
|
"type": "file",
|
|
88
88
|
"task_id": "ui-t4",
|
|
89
|
-
"created_at": "2026-03-
|
|
89
|
+
"created_at": "2026-03-18T16:27:21.681Z"
|
|
90
90
|
}
|
|
91
91
|
],
|
|
92
92
|
"has_more_events": false,
|
|
@@ -37,26 +37,26 @@
|
|
|
37
37
|
"dlq_entries": [],
|
|
38
38
|
"artifact_count": 3,
|
|
39
39
|
"artifacts": [
|
|
40
|
-
{
|
|
41
|
-
"id": "artifact-demo-data-pipeline-src-etl-schema-ts",
|
|
42
|
-
"name": "src/etl/schema.ts",
|
|
43
|
-
"type": "file",
|
|
44
|
-
"task_id": "etl-t1",
|
|
45
|
-
"created_at": "2026-03-18T01:38:47.256Z"
|
|
46
|
-
},
|
|
47
40
|
{
|
|
48
41
|
"id": "artifact-demo-data-pipeline-src-etl-pipeline-ts",
|
|
49
42
|
"name": "src/etl/pipeline.ts",
|
|
50
43
|
"type": "file",
|
|
51
44
|
"task_id": "etl-t2",
|
|
52
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": "artifact-demo-data-pipeline-src-etl-schema-ts",
|
|
49
|
+
"name": "src/etl/schema.ts",
|
|
50
|
+
"type": "file",
|
|
51
|
+
"task_id": "etl-t1",
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
|
|
56
56
|
"name": "tests/etl/pipeline.test.ts",
|
|
57
57
|
"type": "file",
|
|
58
58
|
"task_id": "etl-t3",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
60
60
|
}
|
|
61
61
|
],
|
|
62
62
|
"has_more_events": false,
|
|
@@ -42,21 +42,21 @@
|
|
|
42
42
|
"name": "docs/ARCHITECTURE.md",
|
|
43
43
|
"type": "file",
|
|
44
44
|
"task_id": "docs-t1",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-docs-update-docs-README-md",
|
|
49
49
|
"name": "docs/README.md",
|
|
50
50
|
"type": "file",
|
|
51
51
|
"task_id": "docs-t1",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-docs-update-docs-api-reference-json",
|
|
56
56
|
"name": "docs/api-reference.json",
|
|
57
57
|
"type": "json",
|
|
58
58
|
"task_id": "docs-t2",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.683Z"
|
|
60
60
|
}
|
|
61
61
|
],
|
|
62
62
|
"has_more_events": false,
|
|
@@ -42,28 +42,28 @@
|
|
|
42
42
|
"name": "reports/bundle-analysis.json",
|
|
43
43
|
"type": "json",
|
|
44
44
|
"task_id": "perf-t1",
|
|
45
|
-
"created_at": "2026-03-
|
|
45
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
|
|
49
49
|
"name": "reports/web-vitals-improvement.md",
|
|
50
50
|
"type": "summary",
|
|
51
51
|
"task_id": "perf-t4",
|
|
52
|
-
"created_at": "2026-03-
|
|
52
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
55
|
"id": "artifact-demo-perf-opt-src-charts-index-ts",
|
|
56
56
|
"name": "src/charts/index.ts",
|
|
57
57
|
"type": "file",
|
|
58
58
|
"task_id": "perf-t2",
|
|
59
|
-
"created_at": "2026-03-
|
|
59
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
60
60
|
},
|
|
61
61
|
{
|
|
62
62
|
"id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
|
|
63
63
|
"name": "src/utils/image-loader.ts",
|
|
64
64
|
"type": "file",
|
|
65
65
|
"task_id": "perf-t3",
|
|
66
|
-
"created_at": "2026-03-
|
|
66
|
+
"created_at": "2026-03-18T16:27:21.682Z"
|
|
67
67
|
}
|
|
68
68
|
],
|
|
69
69
|
"has_more_events": false,
|
|
@@ -33,20 +33,15 @@ You are the Team Lead. The PRD below failed validation. Fix **every reported iss
|
|
|
33
33
|
- Add the missing section with concrete, specific content — not placeholder text
|
|
34
34
|
- If the section needs real data you cannot infer, write a reasonable default and mark with `<!-- TODO: verify -->`
|
|
35
35
|
|
|
36
|
-
**
|
|
37
|
-
-
|
|
38
|
-
- Replace modal verbs ("should", "might", "could") with definitive language ("must", "will")
|
|
39
|
-
|
|
40
|
-
**Broad implementation scope**
|
|
41
|
-
- Replace broad paths (`src/`, `the frontend`) with specific file names or subdirectory names
|
|
42
|
-
- Remove glob patterns (`*`, `**`) from scope tables — use actual directory or file names
|
|
36
|
+
**Conflicting requirements**
|
|
37
|
+
- Resolve contradictions between sections — pick the intent that best matches the feature goals
|
|
43
38
|
|
|
44
39
|
**File partition conflicts**
|
|
45
40
|
- If two parallel workstreams claim the same file, move one to a later phase with explicit dependency
|
|
46
41
|
- Or split the file's responsibilities across the two workstreams so each touches distinct files
|
|
47
42
|
|
|
48
|
-
**
|
|
49
|
-
-
|
|
43
|
+
**Broad implementation scope**
|
|
44
|
+
- Replace excessively broad paths (`src/`, `the frontend`) with specific subdirectories or file names
|
|
50
45
|
|
|
51
46
|
**Placeholder text**
|
|
52
47
|
- Replace template filler ("2–3 sentences about…", "Description here") with real content derived from the feature description
|
|
@@ -205,6 +205,7 @@ When chain mode is detected:
|
|
|
205
205
|
- **Only** generate tasks for the phases listed in the group scope. Do not include tasks from other phases.
|
|
206
206
|
- Derive the convoy `name` from the group name (e.g. "Database Setup").
|
|
207
207
|
- Derive the `branch` from the PRD's feature name (it will be overridden by the pipeline anyway).
|
|
208
|
+
- **Keep prompts concise** — write prompts that are complete and self-contained but avoid unnecessary verbosity. Focus on: what to do, which files to create/modify, key constraints, and acceptance criteria.
|
|
208
209
|
- Keep all other conventions the same as for single-spec generation.
|
|
209
210
|
|
|
210
211
|
---
|
|
@@ -10,6 +10,8 @@ output: prd
|
|
|
10
10
|
|
|
11
11
|
You are the Team Lead. Convert the feature request below into a structured Product Requirements Document (PRD). The PRD will be consumed by the `generate-convoy` step to produce an automated agent task spec, so every section must be **concrete**, **specific**, and **implementation-ready**.
|
|
12
12
|
|
|
13
|
+
> **⚠ QUALITY GATE:** This PRD goes through automated validation. Getting it right on the first attempt is critical — every fix cycle costs a full LLM round-trip. Follow ALL rules below precisely. The self-validation checklist at the end is mandatory.
|
|
14
|
+
|
|
13
15
|
## Feature Request
|
|
14
16
|
|
|
15
17
|
{{goal}}
|
|
@@ -145,3 +147,30 @@ Measurable, binary checks that confirm the feature is shippable:
|
|
|
145
147
|
- **[Open question]**: [What needs to be decided before implementation can start]
|
|
146
148
|
|
|
147
149
|
If there are no risks or open questions, write "None identified."
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Self-Validation Checklist (MANDATORY)
|
|
154
|
+
|
|
155
|
+
Before outputting the PRD, verify **every item** below. The downstream validator will reject your PRD if any of the blocking checks fail — fix them now to avoid expensive retry cycles.
|
|
156
|
+
|
|
157
|
+
### Structural Integrity
|
|
158
|
+
|
|
159
|
+
- [ ] **No conflicting requirements**: Technical Requirements, Non-Goals, Risks & Open Questions, and User Stories must not contradict each other.
|
|
160
|
+
- [ ] **No duplicate open questions**: If a question is already answered elsewhere, do not re-open it in Risks & Open Questions.
|
|
161
|
+
- [ ] **No circular dependencies**: Phase dependency graph is acyclic.
|
|
162
|
+
- [ ] **No placeholder text**: Every section has real content, not template filler ("2–3 sentences about…", "Description here").
|
|
163
|
+
|
|
164
|
+
### Implementation Coherence
|
|
165
|
+
|
|
166
|
+
- [ ] **File completeness**: Every file mentioned in User Story acceptance criteria or Technical Requirements appears in the Implementation Scope table AND in the Task Breakdown file lists.
|
|
167
|
+
- [ ] **No file partition conflicts**: No two parallel workstreams (same phase) claim the same file.
|
|
168
|
+
- [ ] **Every workstream lists files**: Including verification-only workstreams — add "Files: none — verification only" if no artifacts are produced.
|
|
169
|
+
- [ ] **No orphan files**: Every file in the Implementation Scope table is assigned to exactly one workstream in Task Breakdown.
|
|
170
|
+
- [ ] **Scope specificity**: Implementation Scope uses specific subdirectory or file paths — not just `src/` or `the frontend`.
|
|
171
|
+
|
|
172
|
+
### Language Quality
|
|
173
|
+
|
|
174
|
+
- [ ] **Testable acceptance criteria**: Every criterion is evaluable as deterministic pass/fail — no subjective language ("looks good", "feels responsive").
|
|
175
|
+
- [ ] **No optional modals in criteria**: Acceptance criteria do not use "should", "might", "could", "may" — use "must" or "will".
|
|
176
|
+
- [ ] **Domain acronyms expanded**: Non-standard acronyms are expanded on first use (standard ones like API, CLI, JSON, REST, etc. are fine).
|
|
@@ -10,9 +10,7 @@ output: validation
|
|
|
10
10
|
|
|
11
11
|
You are a senior technical reviewer. Your job is to validate the PRD below against strict quality criteria before it is used to generate an automated convoy spec. A PRD that passes this gate will produce a clean, executable convoy spec. A PRD that fails will produce bad tasks.
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
> **⚠ EXHAUSTIVENESS MANDATE**: You MUST report ALL issues in a single pass. Do NOT stop at the first few problems. Systematically evaluate every section against every check below. A second validation pass should find zero new issues — if it would, your first pass was incomplete.
|
|
13
|
+
Focus on **structural completeness** only — the PRD generator already enforces language quality and style. Your job is to catch structural problems that would break convoy spec generation. **Pass the PRD if sections exist and the structure is internally consistent.** Do not fail for stylistic preferences, word choice, or minor phrasing.
|
|
16
14
|
|
|
17
15
|
## PRD to Validate
|
|
18
16
|
|
|
@@ -22,47 +20,26 @@ Be strict. Do not pass a PRD with vague language or missing sections just becaus
|
|
|
22
20
|
|
|
23
21
|
## Validation Checklist
|
|
24
22
|
|
|
25
|
-
> If the PRD
|
|
26
|
-
|
|
27
|
-
Evaluate **every item** below. If ALL items pass, respond `VALID`. If ANY item fails, respond `INVALID` with a specific, actionable issue list.
|
|
28
|
-
|
|
29
|
-
### Required Sections
|
|
30
|
-
|
|
31
|
-
- [ ] `Overview` section is present and non-empty (at least 2 sentences)
|
|
32
|
-
- [ ] `Goals` section is present with at least one numbered, specific goal
|
|
33
|
-
- [ ] `Non-Goals` section is present (may say "None" but must not be missing)
|
|
34
|
-
- [ ] `User Stories & Acceptance Criteria` section is present with at least one user story
|
|
35
|
-
- [ ] Each user story has associated acceptance criteria (not just the story itself)
|
|
36
|
-
- [ ] `Technical Requirements` section is present and non-empty
|
|
37
|
-
- [ ] `Implementation Scope` section is present with a table or list of specific files/directories
|
|
38
|
-
- [ ] `Task Breakdown` section is present with at least one phase and workstream
|
|
39
|
-
- [ ] `Success Criteria` section is present with at least 3 measurable checks
|
|
40
|
-
- [ ] `Risks & Open Questions` section is present (may say "None identified")
|
|
23
|
+
> If the PRD contains `<!-- validation-pass: N -->`, this is pass N. On pass 2+, only verify previous fixes were applied — do NOT invent new issues.
|
|
41
24
|
|
|
42
|
-
|
|
25
|
+
Evaluate the checks below. If ALL pass, respond `VALID`. Only fail for checks marked BLOCKING.
|
|
43
26
|
|
|
44
|
-
|
|
45
|
-
- [ ] No criterion uses modal verbs that imply optionality ("should", "might", "could", "may")
|
|
46
|
-
- [ ] No criterion references undefined external systems without explaining what they are
|
|
27
|
+
### Required Sections (BLOCKING)
|
|
47
28
|
|
|
48
|
-
|
|
29
|
+
All of these sections must exist and contain real content (not just the heading):
|
|
30
|
+
`Overview`, `Goals`, `Non-Goals`, `User Stories & Acceptance Criteria`, `Technical Requirements`, `Implementation Scope`, `Task Breakdown`, `Success Criteria`, `Risks & Open Questions`.
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
- [ ] Scope table does not use glob patterns (`*`, `**`)
|
|
52
|
-
- [ ] Every concern area has at least one specific file or directory
|
|
32
|
+
### Structural Integrity (BLOCKING)
|
|
53
33
|
|
|
54
|
-
### Task Breakdown Quality
|
|
55
|
-
|
|
56
|
-
- [ ] Each workstream lists the exact files it will modify
|
|
57
34
|
- [ ] No two parallel workstreams (same phase) claim the same file
|
|
58
|
-
- [ ]
|
|
59
|
-
- [ ] No
|
|
35
|
+
- [ ] No circular dependencies between phases
|
|
36
|
+
- [ ] No conflicting requirements across sections (e.g., a Non-Goal contradicts a Technical Requirement)
|
|
37
|
+
- [ ] Section content is not placeholder/template text (e.g., "2–3 sentences about…", "Description here")
|
|
60
38
|
|
|
61
|
-
###
|
|
39
|
+
### Implementation Coherence (BLOCKING)
|
|
62
40
|
|
|
63
|
-
- [ ]
|
|
64
|
-
- [ ]
|
|
65
|
-
- [ ] Section content is not placeholder/template text (e.g., "2–3 sentences about…", "Description here")
|
|
41
|
+
- [ ] Implementation Scope lists specific files or subdirectories (not just `src/` or `the frontend`)
|
|
42
|
+
- [ ] Each workstream lists the files it will modify
|
|
66
43
|
|
|
67
44
|
---
|
|
68
45
|
|
|
@@ -76,7 +53,7 @@ Your entire response must be a single fenced JSON block — no text before or af
|
|
|
76
53
|
}
|
|
77
54
|
```
|
|
78
55
|
|
|
79
|
-
Or if any check fails:
|
|
56
|
+
Or if any **BLOCKING** check fails:
|
|
80
57
|
|
|
81
58
|
```json
|
|
82
59
|
{
|