@kody-ade/kody-engine 0.2.63 → 0.3.1
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 +24 -24
- package/dist/bin/{kody2.js → kody.js} +270 -164
- package/dist/executables/bug/profile.json +6 -6
- package/dist/executables/chore/profile.json +6 -6
- package/dist/executables/classify/profile.json +1 -1
- package/dist/executables/feature/profile.json +6 -6
- package/dist/executables/fix/profile.json +20 -3
- package/dist/executables/fix/prompt.md +1 -1
- package/dist/executables/fix-ci/profile.json +1 -1
- package/dist/executables/init/profile.json +1 -1
- package/dist/executables/plan/profile.json +23 -3
- package/dist/executables/plan/prompt.md +117 -9
- package/dist/executables/plan-verify/profile.json +2 -2
- package/dist/executables/plan-verify/prompt.md +1 -1
- package/dist/executables/research/profile.json +25 -3
- package/dist/executables/research/prompt.md +4 -0
- package/dist/executables/resolve/profile.json +1 -1
- package/dist/executables/review/profile.json +20 -3
- package/dist/executables/run/profile.json +1 -1
- package/dist/executables/run/prompt.md +2 -2
- package/dist/executables/spec/profile.json +4 -4
- package/dist/executables/sync/profile.json +1 -1
- package/dist/executables/types.ts +3 -3
- package/dist/executables/ui-review/profile.json +10 -4
- package/dist/executables/ui-review/prompt.md +8 -8
- package/dist/plugins/commands/kody-live-probe.md +2 -2
- package/dist/plugins/skills/kody-live-marker/SKILL.md +3 -3
- package/dist/plugins/test-plugin/.claude-plugin/plugin.json +2 -2
- package/dist/plugins/test-plugin/skills/kody-plugin-marker/SKILL.md +2 -2
- package/kody.config.schema.json +3 -3
- package/package.json +4 -4
- package/templates/{kody2.yml → kody.yml} +16 -16
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"with": {
|
|
34
34
|
"label": "kody-flow:bug",
|
|
35
35
|
"color": "d73a4a",
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "kody flow: bug / enhancement"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"with": {
|
|
42
42
|
"label": "kody:orchestrating",
|
|
43
43
|
"color": "1d76db",
|
|
44
|
-
"description": "
|
|
44
|
+
"description": "kody: orchestrating a multi-stage flow"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{ "script": "loadIssueContext" },
|
|
@@ -58,22 +58,22 @@
|
|
|
58
58
|
"runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
|
|
59
59
|
|
|
60
60
|
{ "script": "finishFlow",
|
|
61
|
-
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "
|
|
61
|
+
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
62
62
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
|
|
63
63
|
|
|
64
64
|
{ "script": "dispatch", "with": { "next": "fix", "target": "pr" },
|
|
65
65
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
|
|
66
66
|
|
|
67
67
|
{ "script": "finishFlow",
|
|
68
|
-
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "
|
|
68
|
+
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
69
69
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
|
|
70
70
|
|
|
71
71
|
{ "script": "finishFlow",
|
|
72
|
-
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "
|
|
72
|
+
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
73
73
|
"runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
|
|
74
74
|
|
|
75
75
|
{ "script": "finishFlow",
|
|
76
|
-
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "
|
|
76
|
+
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
77
77
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["PLAN_FAILED", "RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
|
|
78
78
|
|
|
79
79
|
{ "script": "persistFlowState" }
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"with": {
|
|
34
34
|
"label": "kody-flow:chore",
|
|
35
35
|
"color": "c5def5",
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "kody flow: chore / docs / dep-bump"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"with": {
|
|
42
42
|
"label": "kody:orchestrating",
|
|
43
43
|
"color": "1d76db",
|
|
44
|
-
"description": "
|
|
44
|
+
"description": "kody: orchestrating a multi-stage flow"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{ "script": "loadIssueContext" },
|
|
@@ -55,22 +55,22 @@
|
|
|
55
55
|
"runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
|
|
56
56
|
|
|
57
57
|
{ "script": "finishFlow",
|
|
58
|
-
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "
|
|
58
|
+
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
59
59
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
|
|
60
60
|
|
|
61
61
|
{ "script": "dispatch", "with": { "next": "fix", "target": "pr" },
|
|
62
62
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
|
|
63
63
|
|
|
64
64
|
{ "script": "finishFlow",
|
|
65
|
-
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "
|
|
65
|
+
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
66
66
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
|
|
67
67
|
|
|
68
68
|
{ "script": "finishFlow",
|
|
69
|
-
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "
|
|
69
|
+
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
70
70
|
"runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
|
|
71
71
|
|
|
72
72
|
{ "script": "finishFlow",
|
|
73
|
-
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "
|
|
73
|
+
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
74
74
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
|
|
75
75
|
|
|
76
76
|
{ "script": "persistFlowState" }
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"with": {
|
|
34
34
|
"label": "kody-flow:feature",
|
|
35
35
|
"color": "a2eeef",
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "kody flow: feature / refactor"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"with": {
|
|
42
42
|
"label": "kody:orchestrating",
|
|
43
43
|
"color": "1d76db",
|
|
44
|
-
"description": "
|
|
44
|
+
"description": "kody: orchestrating a multi-stage flow"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{ "script": "loadIssueContext" },
|
|
@@ -61,22 +61,22 @@
|
|
|
61
61
|
"runWhen": { "data.taskState.core.lastOutcome.type": "RUN_COMPLETED" } },
|
|
62
62
|
|
|
63
63
|
{ "script": "finishFlow",
|
|
64
|
-
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "
|
|
64
|
+
"with": { "reason": "review-passed", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
65
65
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_PASS" } },
|
|
66
66
|
|
|
67
67
|
{ "script": "dispatch", "with": { "next": "fix", "target": "pr" },
|
|
68
68
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["REVIEW_CONCERNS", "REVIEW_FAIL"] } },
|
|
69
69
|
|
|
70
70
|
{ "script": "finishFlow",
|
|
71
|
-
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "
|
|
71
|
+
"with": { "reason": "review-failed", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
72
72
|
"runWhen": { "data.taskState.core.lastOutcome.type": "REVIEW_FAILED" } },
|
|
73
73
|
|
|
74
74
|
{ "script": "finishFlow",
|
|
75
|
-
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "
|
|
75
|
+
"with": { "reason": "fix-applied", "label": "kody:done", "color": "0e8a16", "description": "kody: PR ready for human review/merge" },
|
|
76
76
|
"runWhen": { "data.taskState.core.lastOutcome.type": "FIX_COMPLETED" } },
|
|
77
77
|
|
|
78
78
|
{ "script": "finishFlow",
|
|
79
|
-
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "
|
|
79
|
+
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
80
80
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["RESEARCH_FAILED", "PLAN_FAILED", "RUN_FAILED", "FIX_FAILED", "AGENT_NOT_RUN"] } },
|
|
81
81
|
|
|
82
82
|
{ "script": "persistFlowState" }
|
|
@@ -36,9 +36,26 @@
|
|
|
36
36
|
"commands": [],
|
|
37
37
|
"subagents": [],
|
|
38
38
|
"plugins": [],
|
|
39
|
-
"mcpServers": [
|
|
39
|
+
"mcpServers": [
|
|
40
|
+
{
|
|
41
|
+
"name": "playwright",
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
44
|
+
}
|
|
45
|
+
]
|
|
40
46
|
},
|
|
41
|
-
"cliTools": [
|
|
47
|
+
"cliTools": [
|
|
48
|
+
{
|
|
49
|
+
"name": "playwright",
|
|
50
|
+
"install": {
|
|
51
|
+
"required": false,
|
|
52
|
+
"checkCommand": "npx --no-install playwright --version",
|
|
53
|
+
"installCommand": "npx --yes playwright install --with-deps chromium"
|
|
54
|
+
},
|
|
55
|
+
"verify": "npx --no-install playwright --version",
|
|
56
|
+
"usage": ""
|
|
57
|
+
}
|
|
58
|
+
],
|
|
42
59
|
"scripts": {
|
|
43
60
|
"preflight": [
|
|
44
61
|
{
|
|
@@ -46,7 +63,7 @@
|
|
|
46
63
|
"with": {
|
|
47
64
|
"label": "kody:fixing",
|
|
48
65
|
"color": "e99695",
|
|
49
|
-
"description": "
|
|
66
|
+
"description": "kody: applying review feedback"
|
|
50
67
|
}
|
|
51
68
|
},
|
|
52
69
|
{ "script": "fixFlow" },
|
|
@@ -42,6 +42,6 @@ You are Kody, an autonomous engineer. Apply the feedback below to the existing P
|
|
|
42
42
|
- **"Already satisfied" (i.e. skipping the edit because the code already does what's asked) is only allowed when you can cite the exact file:line that already implements it.** If in doubt, make the edit — under `fixed`.
|
|
43
43
|
- Do NOT run git/gh commands. The wrapper handles it.
|
|
44
44
|
- Stay on `{{branch}}`.
|
|
45
|
-
- Do not modify files under `.kody/`, `.kody-engine/`, `.
|
|
45
|
+
- Do not modify files under `.kody/`, `.kody-engine/`, `.kody/`, `node_modules/`, `dist/`, `build/`, `.env`, `*.log`.
|
|
46
46
|
- If the feedback is ambiguous or conflicts with the issue, err toward what the feedback says.
|
|
47
47
|
{{systemPromptAppend}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "init",
|
|
3
3
|
"role": "utility",
|
|
4
|
-
"describe": "Scaffold a consumer repo with kody.config.json and the @
|
|
4
|
+
"describe": "Scaffold a consumer repo with kody.config.json and the @kody workflow. No agent.",
|
|
5
5
|
"inputs": [
|
|
6
6
|
{
|
|
7
7
|
"name": "force",
|
|
@@ -27,9 +27,26 @@
|
|
|
27
27
|
"commands": [],
|
|
28
28
|
"subagents": [],
|
|
29
29
|
"plugins": [],
|
|
30
|
-
"mcpServers": [
|
|
30
|
+
"mcpServers": [
|
|
31
|
+
{
|
|
32
|
+
"name": "playwright",
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
35
|
+
}
|
|
36
|
+
]
|
|
31
37
|
},
|
|
32
|
-
"cliTools": [
|
|
38
|
+
"cliTools": [
|
|
39
|
+
{
|
|
40
|
+
"name": "playwright",
|
|
41
|
+
"install": {
|
|
42
|
+
"required": false,
|
|
43
|
+
"checkCommand": "npx --no-install playwright --version",
|
|
44
|
+
"installCommand": "npx --yes playwright install --with-deps chromium"
|
|
45
|
+
},
|
|
46
|
+
"verify": "npx --no-install playwright --version",
|
|
47
|
+
"usage": ""
|
|
48
|
+
}
|
|
49
|
+
],
|
|
33
50
|
"scripts": {
|
|
34
51
|
"preflight": [
|
|
35
52
|
{
|
|
@@ -37,7 +54,7 @@
|
|
|
37
54
|
"with": {
|
|
38
55
|
"label": "kody:planning",
|
|
39
56
|
"color": "5319e7",
|
|
40
|
-
"description": "
|
|
57
|
+
"description": "kody: producing an implementation plan"
|
|
41
58
|
}
|
|
42
59
|
},
|
|
43
60
|
{
|
|
@@ -49,6 +66,9 @@
|
|
|
49
66
|
{
|
|
50
67
|
"script": "loadConventions"
|
|
51
68
|
},
|
|
69
|
+
{
|
|
70
|
+
"script": "loadPriorArt"
|
|
71
|
+
},
|
|
52
72
|
{
|
|
53
73
|
"script": "composePrompt"
|
|
54
74
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
You are a senior engineer producing
|
|
1
|
+
You are a senior engineer producing a **deep, detailed implementation plan** for the GitHub issue below. The plan must be thorough enough that another engineer can implement the feature without re-doing research — file locations, function signatures, algorithms, edge cases, and tests are all specified. You will NOT write code. You will NOT run git or gh commands. You will NOT modify files.
|
|
2
2
|
|
|
3
|
-
1. Use Read / Grep / Glob / Bash (read-only) to study the codebase as much as needed.
|
|
3
|
+
1. Use Read / Grep / Glob / Bash (read-only) to study the codebase as much as needed. Depth matters more than speed — invest turns in understanding before writing.
|
|
4
4
|
2. Emit a final message with the plan wrapped in the required markers (see "Required output").
|
|
5
5
|
|
|
6
6
|
---
|
|
@@ -17,6 +17,43 @@ Recent comments (most recent first, truncated):
|
|
|
17
17
|
|
|
18
18
|
{{conventionsBlock}}
|
|
19
19
|
|
|
20
|
+
{{priorArt}}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
# Delta mode — if a prior plan comment exists
|
|
25
|
+
|
|
26
|
+
Before writing the plan, scan the "Recent comments" block above for a previous
|
|
27
|
+
comment whose body starts with `## Plan for issue`. If one exists, you are in
|
|
28
|
+
**delta mode**:
|
|
29
|
+
|
|
30
|
+
1. Treat the prior plan as the baseline. Do NOT regenerate unchanged sections
|
|
31
|
+
from scratch.
|
|
32
|
+
2. Integrate the signal from comments posted AFTER the prior plan: user
|
|
33
|
+
answers, correction directives, new clarifying info, closed/merged PRs that
|
|
34
|
+
appeared since.
|
|
35
|
+
3. In each section, mark changed bullets with `(updated)`, new bullets with
|
|
36
|
+
`(new)`, and removed items with `(removed — <reason>)`. Preserve unchanged
|
|
37
|
+
bullets verbatim so reviewers can diff.
|
|
38
|
+
4. If nothing material has changed since the prior plan, output
|
|
39
|
+
`FAILED: no new information since last plan` instead of a duplicate.
|
|
40
|
+
|
|
41
|
+
If no prior `## Plan for issue` comment exists, produce a full first-pass
|
|
42
|
+
plan under the Required output structure below.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Research floor (MUST be done before writing the plan)
|
|
47
|
+
|
|
48
|
+
Before producing the final plan, you MUST have read:
|
|
49
|
+
|
|
50
|
+
- Every file you intend to change (the full file, not just a grep hit).
|
|
51
|
+
- The tests for each file you intend to change, if tests exist for that module.
|
|
52
|
+
- At least one sibling module that already implements the same pattern you're about to follow (reference implementations).
|
|
53
|
+
- The full prior-art diffs above (if any) — not just titles. Those represent failed solutions; understanding why they failed is part of the plan.
|
|
54
|
+
|
|
55
|
+
If a file you need to read does not exist, say so explicitly in the plan under "Ambiguities" — do NOT guess at its contents.
|
|
56
|
+
|
|
20
57
|
---
|
|
21
58
|
|
|
22
59
|
# Required output
|
|
@@ -27,16 +64,87 @@ Your FINAL message must be exactly this shape (no extra text before or after):
|
|
|
27
64
|
DONE
|
|
28
65
|
COMMIT_MSG: plan: <very short title>
|
|
29
66
|
PR_SUMMARY:
|
|
30
|
-
<A
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
67
|
+
<A deep, detailed implementation plan in markdown with the following sections, in order. Omit a section only if its trigger condition is not met — do not leave placeholders. Depth is expected; brevity for its own sake is not a goal.
|
|
68
|
+
|
|
69
|
+
## Existing patterns found
|
|
70
|
+
For each major part of the change, name the sibling module in this repo that
|
|
71
|
+
already solves a similar problem and state how this plan reuses it.
|
|
72
|
+
- Pattern: <what kind of pattern — e.g. "admin field with custom React component", "fetch-then-group client hook", "JSON strings module">
|
|
73
|
+
- Reference: <exact path in this repo, e.g. `src/ui/admin/LessonBlocksField/index.tsx`>
|
|
74
|
+
- Reuse: <how this plan follows it — which hooks/APIs/idioms are mirrored, what deviates and why>
|
|
75
|
+
If you searched and found nothing applicable, say so explicitly: "Searched
|
|
76
|
+
for X / Y / Z — no existing pattern; proposing new convention because …".
|
|
77
|
+
Proposing a new pattern when an existing one covers the use case is a
|
|
78
|
+
planning failure — fall back to reuse unless you name a concrete reason.
|
|
79
|
+
|
|
80
|
+
## Changes (per file)
|
|
81
|
+
For EACH file you will change or create, include:
|
|
82
|
+
- Path (exact).
|
|
83
|
+
- Why this file — one sentence tying the change to the issue.
|
|
84
|
+
- Current state — what's there today (function/class/export names, relevant line ranges). Skip for new files.
|
|
85
|
+
- Target state — what will be there after the change, at the same level of specificity.
|
|
86
|
+
- Exact locations of edits (function name, line range if stable, or anchor like "after the `meta` group field, before the closing `fields: []`").
|
|
87
|
+
- For new files: rough shape including exports, key functions with signatures, and top-level module comment.
|
|
88
|
+
- Dependencies touched (imports added/removed, new packages) — call out if anything needs installing.
|
|
89
|
+
|
|
90
|
+
## Algorithms & pseudocode
|
|
91
|
+
REQUIRED for any non-trivial logic (sorting, diffing, state transitions, concurrency, batching, caching, conflict resolution).
|
|
92
|
+
- Write pseudocode (not production code) showing the actual algorithm — inputs, steps, outputs.
|
|
93
|
+
- Call out invariants the algorithm preserves.
|
|
94
|
+
- Call out complexity (N swaps vs N-squared recalc vs single-batch write).
|
|
95
|
+
- If there's a choice between two algorithms, explain why you picked this one.
|
|
96
|
+
|
|
97
|
+
## How clarifying answers shape the plan
|
|
98
|
+
REQUIRED if research asked clarifying questions and the issue comments contain user answers.
|
|
99
|
+
- For each answered question: name the concrete design choice the answer forces — not a restatement of the answer.
|
|
100
|
+
- "Answer: yes → init orders 10/20/30 on first interaction" → spell out: which function performs the init, when it runs (mount vs first-swap), how it detects the "first use" state, what happens on re-entry.
|
|
101
|
+
|
|
102
|
+
## Why this will work
|
|
103
|
+
REQUIRED if research cites a prior failed attempt (closed PR, reverted commit, previous run that didn't land), or if prior-art above contains a diff.
|
|
104
|
+
- Root-cause hypothesis — what specifically went wrong in the prior attempt (cite lines from the prior diff above).
|
|
105
|
+
- The specific change in THIS plan that addresses the root cause — name the file/line/hook/config that differs from the prior attempt.
|
|
106
|
+
- How you will verify the fix works — a concrete behavioral check (URL + action + expected UI, or API call + expected response, or a test case). Not "typecheck passes."
|
|
107
|
+
|
|
108
|
+
## API surface verification
|
|
109
|
+
REQUIRED for every hook, import, SDK method, framework primitive, or config key the plan names.
|
|
110
|
+
- Build a table or list. For each named symbol: the file path where it's defined, or the exact package + export (with a `node_modules/...` path you actually read), or the mark `UNVERIFIED`.
|
|
111
|
+
- Do not guess. If you could not find it with Read / Grep / Glob, it is UNVERIFIED. Do not rely on UNVERIFIED symbols in the plan — flag them as blockers.
|
|
112
|
+
- Include negative evidence too: "Searched for `useXxx` in `@payloadcms/ui` exports — not found; planner assumed `useDocumentInfo` instead."
|
|
113
|
+
|
|
114
|
+
## Initial data state → transition → steady state
|
|
115
|
+
REQUIRED if the feature mutates existing data (reorder, migrate, backfill, rename, enable).
|
|
116
|
+
- Initial state: describe the data as it is in production today, including edge cases (rows with NULL, rows with default zero, orphan rows, etc).
|
|
117
|
+
- Transition: the exact step(s) that move data from initial → steady, including who triggers them (user action, migration script, on-mount hook), idempotency, and rollback behavior.
|
|
118
|
+
- Steady state: what invariants hold after transition.
|
|
119
|
+
- Failure modes during transition: partial-apply, race conditions, concurrent writers.
|
|
120
|
+
|
|
121
|
+
## Error paths & failure handling
|
|
122
|
+
For each external call or mutation in the plan (API request, DB write, file op, SDK call), enumerate:
|
|
123
|
+
- What can fail (network, validation, auth, not-found, conflict, rate limit).
|
|
124
|
+
- What the UI/caller does on each failure — retry, surface error, rollback, log-and-continue.
|
|
125
|
+
- What state the system is left in if the op fails mid-way.
|
|
126
|
+
|
|
127
|
+
## Test plan
|
|
128
|
+
- Specific test cases by name, with inputs and expected outputs. Not "add unit tests."
|
|
129
|
+
- Unit tests: one line per test naming what it asserts.
|
|
130
|
+
- Integration / behavioral tests: one line each, naming the flow covered and the assertion.
|
|
131
|
+
- Regression tests for the prior-art failure mode (if applicable) — a test that would have caught the prior bug.
|
|
132
|
+
- Manual verification steps: URL + click sequence + expected UI, or API call + expected response.
|
|
133
|
+
|
|
134
|
+
## Ambiguities & assumptions
|
|
135
|
+
- List anything still unresolved that needs human input before implementation.
|
|
136
|
+
- List every assumption the plan makes that was NOT confirmed by the issue, comments, or code (e.g. "assumed `usePayload` hook exists — UNVERIFIED").
|
|
137
|
+
|
|
138
|
+
## Verification checklist
|
|
139
|
+
- Build / typecheck / test / lint commands expected to pass after implementation.
|
|
140
|
+
- Each concrete behavioral check from "Test plan" restated as a pass/fail gate.
|
|
141
|
+
|
|
142
|
+
No filler. No marketing language. Depth over brevity.>
|
|
36
143
|
```
|
|
37
144
|
|
|
38
145
|
# Rules
|
|
39
146
|
- Read-only. Do NOT modify any file.
|
|
40
147
|
- Do NOT run git or gh commands.
|
|
41
|
-
- No speculative scope — plan only what the issue asks for.
|
|
148
|
+
- No speculative scope — plan only what the issue asks for, but plan it THOROUGHLY.
|
|
42
149
|
- If the issue is ambiguous and you cannot make progress without input, output `FAILED: <what's unclear>` instead of a plan.
|
|
150
|
+
- If the Research floor cannot be met because required files are missing or unreadable, output `FAILED: <what could not be read>` instead of a half-blind plan.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "plan-verify",
|
|
3
3
|
"role": "utility",
|
|
4
|
-
"describe": "Live-test executable. Loads kody-live-marker skill, /kody-live-probe command, kody-live-trace hook, and the bundled test-plugin. Asks the agent to emit confirmation tokens for each feature so
|
|
4
|
+
"describe": "Live-test executable. Loads kody-live-marker skill, /kody-live-probe command, kody-live-trace hook, and the bundled test-plugin. Asks the agent to emit confirmation tokens for each feature so Kody can validate plugin wiring end-to-end.",
|
|
5
5
|
"inputs": [
|
|
6
6
|
{ "name": "issue", "flag": "--issue", "type": "int", "required": true, "describe": "GitHub issue number to verify against." }
|
|
7
7
|
],
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"model": "inherit",
|
|
10
10
|
"permissionMode": "default",
|
|
11
11
|
"maxTurns": 15,
|
|
12
|
-
"systemPromptAppend": "You are running
|
|
12
|
+
"systemPromptAppend": "You are running Kody's plugin-wiring live verification. Emit confirmation tokens exactly as the prompt instructs.",
|
|
13
13
|
"tools": ["Read", "Grep", "Glob", "Bash"],
|
|
14
14
|
"hooks": ["kody-live-trace"],
|
|
15
15
|
"skills": ["kody-live-marker"],
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
You are
|
|
1
|
+
You are Kody's plugin-wiring live verification agent. Your ONLY job is to prove that each of the four extension mechanisms (plugins, skills, commands, hooks) is successfully loaded into your session. Do NOT address the issue's actual work.
|
|
2
2
|
|
|
3
3
|
Issue #{{issue.number}}: {{issue.title}}
|
|
4
4
|
|
|
@@ -27,9 +27,26 @@
|
|
|
27
27
|
"commands": [],
|
|
28
28
|
"subagents": [],
|
|
29
29
|
"plugins": [],
|
|
30
|
-
"mcpServers": [
|
|
30
|
+
"mcpServers": [
|
|
31
|
+
{
|
|
32
|
+
"name": "playwright",
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
35
|
+
}
|
|
36
|
+
]
|
|
31
37
|
},
|
|
32
|
-
"cliTools": [
|
|
38
|
+
"cliTools": [
|
|
39
|
+
{
|
|
40
|
+
"name": "playwright",
|
|
41
|
+
"install": {
|
|
42
|
+
"required": false,
|
|
43
|
+
"checkCommand": "npx --no-install playwright --version",
|
|
44
|
+
"installCommand": "npx --yes playwright install --with-deps chromium"
|
|
45
|
+
},
|
|
46
|
+
"verify": "npx --no-install playwright --version",
|
|
47
|
+
"usage": ""
|
|
48
|
+
}
|
|
49
|
+
],
|
|
33
50
|
"scripts": {
|
|
34
51
|
"preflight": [
|
|
35
52
|
{
|
|
@@ -37,7 +54,7 @@
|
|
|
37
54
|
"with": {
|
|
38
55
|
"label": "kody:researching",
|
|
39
56
|
"color": "1d76db",
|
|
40
|
-
"description": "
|
|
57
|
+
"description": "kody: researching the issue"
|
|
41
58
|
}
|
|
42
59
|
},
|
|
43
60
|
{
|
|
@@ -84,6 +101,11 @@
|
|
|
84
101
|
"name": "research",
|
|
85
102
|
"format": "markdown",
|
|
86
103
|
"from": "prSummary"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"name": "priorArt",
|
|
107
|
+
"format": "json",
|
|
108
|
+
"from": "priorArt"
|
|
87
109
|
}
|
|
88
110
|
]
|
|
89
111
|
}
|
|
@@ -25,6 +25,7 @@ Your FINAL message must be exactly this shape (no extra text before or after):
|
|
|
25
25
|
```
|
|
26
26
|
DONE
|
|
27
27
|
COMMIT_MSG: research: <very short title>
|
|
28
|
+
PRIOR_ART: <JSON array of closed or merged PR numbers from this repo that are prior attempts at THIS issue, or [] if none. Include only PRs that actually touched the same feature/area — not every PR your research happens to mention. Example: [1086] or []. Must be valid JSON parseable as number[].>
|
|
28
29
|
PR_SUMMARY:
|
|
29
30
|
<A research doc in markdown with EXACTLY these sections, in order:
|
|
30
31
|
|
|
@@ -82,6 +83,9 @@ Gaps & assumptions — they live in the prior comment. Keep the whole delta
|
|
|
82
83
|
under 25 lines. If nothing has changed since the prior research, output
|
|
83
84
|
`FAILED: no new information since last research` instead.
|
|
84
85
|
|
|
86
|
+
`PRIOR_ART:` is still required in delta mode (carry forward the prior list,
|
|
87
|
+
or update it if new PRs became relevant since).
|
|
88
|
+
|
|
85
89
|
If no prior `## Research for issue` comment exists in the thread, produce
|
|
86
90
|
the full first-pass structure below.
|
|
87
91
|
|
|
@@ -28,9 +28,26 @@
|
|
|
28
28
|
"commands": [],
|
|
29
29
|
"subagents": [],
|
|
30
30
|
"plugins": [],
|
|
31
|
-
"mcpServers": [
|
|
31
|
+
"mcpServers": [
|
|
32
|
+
{
|
|
33
|
+
"name": "playwright",
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@playwright/mcp@latest"]
|
|
36
|
+
}
|
|
37
|
+
]
|
|
32
38
|
},
|
|
33
|
-
"cliTools": [
|
|
39
|
+
"cliTools": [
|
|
40
|
+
{
|
|
41
|
+
"name": "playwright",
|
|
42
|
+
"install": {
|
|
43
|
+
"required": false,
|
|
44
|
+
"checkCommand": "npx --no-install playwright --version",
|
|
45
|
+
"installCommand": "npx --yes playwright install --with-deps chromium"
|
|
46
|
+
},
|
|
47
|
+
"verify": "npx --no-install playwright --version",
|
|
48
|
+
"usage": ""
|
|
49
|
+
}
|
|
50
|
+
],
|
|
34
51
|
"scripts": {
|
|
35
52
|
"preflight": [
|
|
36
53
|
{
|
|
@@ -38,7 +55,7 @@
|
|
|
38
55
|
"with": {
|
|
39
56
|
"label": "kody:reviewing",
|
|
40
57
|
"color": "d93f0b",
|
|
41
|
-
"description": "
|
|
58
|
+
"description": "kody: reviewing a PR"
|
|
42
59
|
}
|
|
43
60
|
},
|
|
44
61
|
{
|
|
@@ -7,7 +7,7 @@ You are Kody, an autonomous engineer. Take a GitHub issue from spec to a tested
|
|
|
7
7
|
{{conventionsBlock}}{{coverageBlock}}{{toolsUsage}}# Issue #{{issue.number}}: {{issue.title}}
|
|
8
8
|
{{issue.body}}
|
|
9
9
|
|
|
10
|
-
# Existing plan (produced by `@
|
|
10
|
+
# Existing plan (produced by `@kody plan`, if present)
|
|
11
11
|
{{artifacts.plan}}
|
|
12
12
|
|
|
13
13
|
If the plan above is non-empty, TREAT IT AS AUTHORITATIVE — follow its file list and approach rather than inventing your own. Deviate only if the plan is wrong; if you do, you MUST declare each deviation in the `PLAN_DEVIATIONS:` block of your final message (format below). Silent deviations are a hard failure, even if the code works. If the plan is empty, proceed from first principles and emit `PLAN_DEVIATIONS: none` in the final message.
|
|
@@ -32,7 +32,7 @@ If the plan above is non-empty, TREAT IT AS AUTHORITATIVE — follow its file li
|
|
|
32
32
|
# Rules
|
|
33
33
|
- Do NOT run **any** `git` or `gh` commands. The wrapper handles all git/gh operations. If a quality gate fails, that's the failure — do not investigate it via git.
|
|
34
34
|
- Stay on the current branch (`{{branch}}`). It is already checked out for you.
|
|
35
|
-
- Do NOT modify files under: `.kody/`, `.kody-engine/`, `.kody-lean/`, `.
|
|
35
|
+
- Do NOT modify files under: `.kody/`, `.kody-engine/`, `.kody-lean/`, `.kody/`, `node_modules/`, `dist/`, `build/`, `.env`, or any `*.log`.
|
|
36
36
|
- Do NOT post issue comments — the wrapper handles that.
|
|
37
37
|
- Pre-existing quality-gate failures: assume they are NOT your responsibility unless your edits touched related code.
|
|
38
38
|
- Keep the plan and reasoning concise. Long monologues waste turns.
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"with": {
|
|
34
34
|
"label": "kody-flow:spec",
|
|
35
35
|
"color": "7057ff",
|
|
36
|
-
"description": "
|
|
36
|
+
"description": "kody flow: spec / RFC / design-doc"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
{
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"with": {
|
|
42
42
|
"label": "kody:orchestrating",
|
|
43
43
|
"color": "1d76db",
|
|
44
|
-
"description": "
|
|
44
|
+
"description": "kody: orchestrating a multi-stage flow"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
{ "script": "loadIssueContext" },
|
|
@@ -55,11 +55,11 @@
|
|
|
55
55
|
"runWhen": { "data.taskState.core.lastOutcome.type": "RESEARCH_COMPLETED" } },
|
|
56
56
|
|
|
57
57
|
{ "script": "finishFlow",
|
|
58
|
-
"with": { "reason": "spec-ready", "label": "kody:done", "color": "0e8a16", "description": "
|
|
58
|
+
"with": { "reason": "spec-ready", "label": "kody:done", "color": "0e8a16", "description": "kody: spec/plan artifact ready" },
|
|
59
59
|
"runWhen": { "data.taskState.core.lastOutcome.type": "PLAN_COMPLETED" } },
|
|
60
60
|
|
|
61
61
|
{ "script": "finishFlow",
|
|
62
|
-
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "
|
|
62
|
+
"with": { "reason": "aborted", "label": "kody:failed", "color": "e11d21", "description": "kody: flow failed" },
|
|
63
63
|
"runWhen": { "data.taskState.core.lastOutcome.type": ["RESEARCH_FAILED", "PLAN_FAILED", "AGENT_NOT_RUN"] } },
|
|
64
64
|
|
|
65
65
|
{ "script": "persistFlowState" }
|