easy-coding-harness 0.6.0 → 0.6.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/CHANGELOG.md +16 -0
- package/README.md +12 -8
- package/package.json +1 -1
- package/templates/claude/agents/ec-implementer.md +3 -0
- package/templates/codex/agents/ec-implementer.toml +3 -0
- package/templates/common/bundled-skills/ec-meta/references/local-architecture/README.md +7 -3
- package/templates/common/skills/ec-analysis/SKILL.md +80 -45
- package/templates/common/skills/ec-brainstorming/SKILL.md +1 -1
- package/templates/common/skills/ec-git/SKILL.md +1 -1
- package/templates/common/skills/ec-implementing/SKILL.md +40 -12
- package/templates/common/skills/ec-memory/SKILL.md +9 -5
- package/templates/common/skills/ec-reviewing/SKILL.md +4 -3
- package/templates/common/skills/ec-task-management/SKILL.md +1 -1
- package/templates/common/skills/ec-verification/SKILL.md +11 -7
- package/templates/common/skills/ec-workflow/SKILL.md +80 -38
- package/templates/main-constraint/AGENTS.md.tpl +18 -14
- package/templates/main-constraint/CLAUDE.md.tpl +18 -14
- package/templates/qoder/agents/ec-implementer.md +3 -0
- package/templates/runtime/templates/dev-spec-skeleton.md +41 -46
- package/templates/shared-hooks/easy_coding_state.py +487 -13
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,22 @@
|
|
|
6
6
|
- `y`:常规功能升级
|
|
7
7
|
- `z`:日常 bug 修复
|
|
8
8
|
|
|
9
|
+
## 0.6.1
|
|
10
|
+
|
|
11
|
+
- 状态迁移按是否需要用户决策分层:`INIT → ANALYSIS` 在 INIT 工作完成后自动流转,`MEMORY → COMPLETE` 在记忆处理检查点完成后自动流转;这两条机械边不再创建 `pending_transition`,也不再展示确认或交接选项。
|
|
12
|
+
- 新增受限的 `auto-transition` 状态 API,只允许上述两条自动边;其他前进、修复和重规划边继续通过 `request-transition` / `confirm-transition` 显式确认,Hook 仍保持只读。
|
|
13
|
+
- IMPLEMENT 完成后允许用户选择进入 REVIEW,或明确跳过 REVIEW 直接进入 VERIFICATION;交接和 free-form Other 仍保留,跳过 REVIEW 不能绕过 VERIFICATION 硬门控。
|
|
14
|
+
- ANALYSIS 改为先原样落盘无阶段标签的 dev-spec 骨架,再在分析过程中即时询问并解决技术路线、接口、范围等决策问题,最后才填充完整方案;最终报告不再包含“待用户决策”章节。
|
|
15
|
+
- `ANALYSIS → IMPLEMENT` 在申请和确认迁移时都会校验完整 dev-spec 和最新有效 execution plan;代码任务还必须提供非空 test strategy,只读任务则禁止生成 `test-strategy.md`。必填章节正文、实施单元任务卡字段和并行分组均需完整,原始骨架、空章节、无界单元或缺失产物不能进入实施。
|
|
16
|
+
- dev-spec 骨架使用专用 `[[EC_TODO:...]]` 占位标记,既能可靠拦截未填字段,也不会把方案中合法的 `{title}`、`{type}` 等模板文本误判为残留占位符。
|
|
17
|
+
- execution plan 门禁校验依赖图无环及并行层级顺序;`doc` / `analysis` / `report` 显式无代码任务允许受限空文件范围并通过 `deliverable` 返回只读结果,代码任务仍禁止无界实施。
|
|
18
|
+
- 无代码 IMPLEMENT 单元必须返回非空 `deliverable` 且不得修改文件;主 Agent 在展示摘要或迁移选项前必须向用户原样输出完整 deliverable,避免结果只留在执行日志中。
|
|
19
|
+
- 无代码任务展示完整 deliverable 后直接通过受限 `IMPLEMENT → COMPLETE` 自动边结束;状态 API 会校验 single 空文件计划、匹配的 dispatch/result、零文件改动、非空 deliverable 和无遗留问题,不生成 `test-strategy.md`,不进入 REVIEW、VERIFICATION、MEMORY,也不写任务记忆。
|
|
20
|
+
- 介绍页展示版本与 `package.json` 保持一致,并由版本元数据测试防止后续发布再次漂移。
|
|
21
|
+
- 升级遗留的自动 `pending_transition` 在状态上下文中标记为 `auto-transition-ready`,不再错误注入用户确认提示。
|
|
22
|
+
- `single` / `sequential` / `parallel` 三种执行策略统一派发子代理,仅编排形态不同;技术方案骨架不再生成“主 Agent 直接执行”的冲突指令。
|
|
23
|
+
- 工作流 skills、主约束、README、设计/介绍/使用文档和状态 API 测试统一对齐新的自动边与可选 REVIEW 语义。
|
|
24
|
+
|
|
9
25
|
## 0.6.0
|
|
10
26
|
|
|
11
27
|
- 状态机移除无实际工作内容的 `WAITING_CONFIRM`;阶段完成后通过 `task.json.pending_transition` 记录待确认边,状态仍停留在当前阶段,直到用户明确确认。
|
package/README.md
CHANGED
|
@@ -69,16 +69,20 @@ easy-coding init --submodules packages/a,packages/b
|
|
|
69
69
|
## 工作流
|
|
70
70
|
|
|
71
71
|
```text
|
|
72
|
-
INIT
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
72
|
+
INIT --[auto]--> ANALYSIS -> IMPLEMENT -> REVIEW -> VERIFICATION -> MEMORY --[auto]--> COMPLETE
|
|
73
|
+
\----------------> VERIFICATION
|
|
74
|
+
\--[read-only auto]------------------------------> COMPLETE
|
|
75
|
+
^ ^ | |
|
|
76
|
+
+-- replan ---+ +--- fix -----+
|
|
77
|
+
^ |
|
|
78
|
+
+------- repair ----------+
|
|
79
|
+
user-decision edge --[confirm / handoff / Other]--> target stage
|
|
78
80
|
any stage --[user abort via ec-task-close]--> CLOSED
|
|
79
81
|
```
|
|
80
82
|
|
|
81
|
-
-
|
|
83
|
+
- `INIT → ANALYSIS` 与完成记忆处理后的 `MEMORY → COMPLETE` 自动流转,不生成 `pending_transition`,也不展示确认或交接。
|
|
84
|
+
- 其余用户关联边通过 `pending_transition` 等待明确确认;代码 IMPLEMENT 完成后可选择进入 REVIEW、跳过 REVIEW 直接进入 VERIFICATION,或交接给其他智能体。
|
|
85
|
+
- 显式 `doc` / `analysis` / `report` 只读任务不生成 `test-strategy.md`;IMPLEMENT 留下匹配的 dispatch/result 并展示完整报告后自动进入 COMPLETE,不执行 REVIEW、VERIFICATION 或 MEMORY,也不写任务记忆。
|
|
82
86
|
- `VERIFICATION` 是验证硬门控,未实际运行的 lint、typecheck、test 不算通过。
|
|
83
87
|
- `MEMORY` 先写入本次任务短期记忆,再执行长期记忆阈值门禁;未超过阈值时长期沉淀为 no-op。
|
|
84
88
|
|
|
@@ -115,7 +119,7 @@ any stage --[user abort via ec-task-close]--> CLOSED
|
|
|
115
119
|
| `ec-workflow` | 统一入口,负责任务创建、恢复、阶段流转和 stage skill 调度 |
|
|
116
120
|
| `ec-brainstorming` | 实现前的设计探索和方案发散 |
|
|
117
121
|
| `ec-analysis` | 生成 dev-spec、执行计划和测试策略 |
|
|
118
|
-
| `ec-implementing` |
|
|
122
|
+
| `ec-implementing` | 按确认后的计划执行代码实现或显式无代码只读交付 |
|
|
119
123
|
| `ec-reviewing` | 多维度代码审查,输出 accept / fix / replan / blocked 结论 |
|
|
120
124
|
| `ec-verification` | 执行 lint、typecheck、test 等验证硬门控,并处理验收修复循环 |
|
|
121
125
|
| `ec-memory` | 写短期记忆,并在超过阈值时沉淀长期记忆 |
|
package/package.json
CHANGED
|
@@ -9,6 +9,8 @@ complete exactly that unit. Your reply IS the return value, not a message to a h
|
|
|
9
9
|
## Hard constraints
|
|
10
10
|
|
|
11
11
|
- Modify only the files listed in the task card's "Editable scope". Touch nothing else.
|
|
12
|
+
- If the editable scope is `NONE — read-only deliverable`, modify nothing and return the full
|
|
13
|
+
requested result in `deliverable`.
|
|
12
14
|
- Do not call any Skill tool.
|
|
13
15
|
- Do not read `.claude/skills/`, `.agents/skills/`, `.qoder/skills/`, or any `.easy-coding/`
|
|
14
16
|
file. All context you need is already in the task card.
|
|
@@ -20,6 +22,7 @@ complete exactly that unit. Your reply IS the return value, not a message to a h
|
|
|
20
22
|
|
|
21
23
|
- `changed_files`: the files you actually modified
|
|
22
24
|
- `summary`: one line describing what you did
|
|
25
|
+
- `deliverable`: full no-code result, or `null` for a code unit
|
|
23
26
|
- `issues`: problems you hit (empty array if none)
|
|
24
27
|
- `needs_attention`: anything the main agent must decide (empty array if none)
|
|
25
28
|
|
|
@@ -8,6 +8,8 @@ complete exactly that unit. Your reply IS the return value, not a message to a h
|
|
|
8
8
|
|
|
9
9
|
Hard constraints:
|
|
10
10
|
- Modify only the files listed in the task card's "Editable scope". Touch nothing else.
|
|
11
|
+
- If the editable scope is NONE — read-only deliverable, modify nothing and return the full
|
|
12
|
+
requested result in deliverable.
|
|
11
13
|
- Do not call any Skill tool.
|
|
12
14
|
- Do not read .agents/skills/, .codex/, or any .easy-coding/ file. All needed context is in
|
|
13
15
|
the card.
|
|
@@ -18,6 +20,7 @@ Hard constraints:
|
|
|
18
20
|
Output (return exactly this):
|
|
19
21
|
- changed_files: the files you actually modified
|
|
20
22
|
- summary: one line describing what you did
|
|
23
|
+
- deliverable: full no-code result, or null for a code unit
|
|
21
24
|
- issues: problems you hit (empty array if none)
|
|
22
25
|
- needs_attention: anything the main agent must decide (empty array if none)
|
|
23
26
|
|
|
@@ -44,9 +44,13 @@ analysis, workflow operation). The CLI never analyzes the project.
|
|
|
44
44
|
|
|
45
45
|
6 work stages + 2 terminals, owned by ec-workflow:
|
|
46
46
|
`INIT → ANALYSIS → IMPLEMENT → REVIEW → VERIFICATION → MEMORY → COMPLETE`, plus `CLOSED`
|
|
47
|
-
(user abort, no memory flow).
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
(user abort, no memory flow). INIT → ANALYSIS and completed MEMORY → COMPLETE are restricted
|
|
48
|
+
automatic edges. A validated read-only `doc` / `analysis` / `report` task also auto-completes
|
|
49
|
+
from IMPLEMENT after its full deliverable is shown, without REVIEW, VERIFICATION, MEMORY, or
|
|
50
|
+
task memory. Other stage edges record `task.json.pending_transition` and require explicit user
|
|
51
|
+
confirmation; code tasks may skip REVIEW and enter VERIFICATION directly. VERIFICATION remains
|
|
52
|
+
the code-task fresh-evidence hard gate, and MEMORY keeps the conditional long-memory threshold
|
|
53
|
+
gate. The active task
|
|
50
54
|
pointer lives in `sessions/{ppid}.json`;
|
|
51
55
|
when the task reaches `COMPLETE` or `CLOSED`, the state API clears `current_task` so the
|
|
52
56
|
session returns to Ready. Each task's stage persists in its `task.json`. Hooks inject the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ec-analysis
|
|
3
|
-
description: ANALYSIS-stage skill. Use when ec-workflow enters ANALYSIS. Creates the dev-spec skeleton FIRST
|
|
3
|
+
description: ANALYSIS-stage skill. Use when ec-workflow enters ANALYSIS. Creates the dev-spec skeleton FIRST, resolves user decisions during analysis, then fills the final plan and execution plan; code tasks also receive a standalone test strategy, while read-only tasks do not. Ends by requesting the confirmed edge to IMPLEMENT. Grounds every conclusion in real code, never restates the requirement.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **SKELETON FIRST — your first two tool calls MUST be: (1) Read `.easy-coding/templates/dev-spec-skeleton.md`, (2) Write its EXACT content to the task's dev-spec.md. No exceptions. Do not analyze or think before the skeleton file exists on disk.**
|
|
@@ -23,24 +23,33 @@ Communicate with the user in the user's language.
|
|
|
23
23
|
If dev-spec.md does not exist with the correct template after your second tool call,
|
|
24
24
|
you have already failed. Do not read code, think aloud, or analyze before the skeleton
|
|
25
25
|
is on disk.
|
|
26
|
-
2. **
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
2. **Resolve decisions before filling.** After the exact skeleton is on disk, load the required
|
|
27
|
+
inputs and inspect source code without editing dev-spec.md. As soon as analysis reveals a
|
|
28
|
+
decision that affects technical direction, API, scope, delivery form, state flow, encoding,
|
|
29
|
+
or acceptance, ask the user immediately and stop. Prefer the platform's native user-choice
|
|
30
|
+
tool when available. Keep dev-spec.md as the untouched skeleton until every decision is
|
|
31
|
+
resolved; never write an unresolved question or an assumed answer into the final plan.
|
|
32
|
+
3. **Decision questions are the only pre-plan chat exception.** While the decision gate is
|
|
33
|
+
unresolved, ask only the evidence-backed question needed to continue; do not present a draft
|
|
34
|
+
report. After all decisions are resolved and dev-spec.md is complete, your chat output to the
|
|
35
|
+
user IS dev-spec.md verbatim. Use the Read tool to read it back, then output exactly what you
|
|
36
|
+
read as your reply — this
|
|
30
37
|
is a copy operation, not a re-narration. Do NOT reconstruct it from memory, do NOT
|
|
31
38
|
abbreviate, do NOT invent a different format. No "执行计划" summary tables, no bullet-point
|
|
32
39
|
plans, no freestyle answers. The template IS the format. If your reply does not contain
|
|
33
40
|
every mandatory section header from the template, you have failed.
|
|
34
|
-
4. **
|
|
35
|
-
`
|
|
41
|
+
4. **Required artifacts depend on delivery mode.** Code tasks require `dev-spec.md`,
|
|
42
|
+
`execution.jsonl` (plan record), and `test-strategy.md`. Read-only `doc` / `analysis` /
|
|
43
|
+
`report` tasks require only `dev-spec.md` and `execution.jsonl`; they MUST NOT create
|
|
44
|
+
`test-strategy.md` because they never enter VERIFICATION.
|
|
36
45
|
5. **Stay faithful to the user's delivery form (anti-downgrade).** The delivery form —
|
|
37
46
|
change real code vs. produce a document — is set by the user's original request, NOT by
|
|
38
47
|
you. If the user asked to refactor / fix / add a feature (a CODE task), you MUST plan real
|
|
39
48
|
code changes. You may NOT downgrade it to "produce a report / audit / inventory only" or
|
|
40
49
|
"defer all changes to follow-up sub-tasks." A large change surface is NOT a reason to
|
|
41
|
-
downgrade:
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
downgrade: during the pre-fill decision gate, ask "split into batches? / which subset this
|
|
51
|
+
round?" and wait for the user to decide. Never make a scope-narrowing decision yourself and
|
|
52
|
+
present it as settled. Never fabricate a
|
|
44
53
|
premise such as "the user already fixed scope X in INIT" or "auto_mode already selected Y"
|
|
45
54
|
to justify narrowing — `auto_mode` only waives stage-boundary prompts under an explicit
|
|
46
55
|
autonomous user request and carries NO scope or delivery-form decision whatsoever.
|
|
@@ -49,7 +58,8 @@ Communicate with the user in the user's language.
|
|
|
49
58
|
execution.jsonl, test-strategy.md, memory files, generated reports, etc.) is FORBIDDEN in
|
|
50
59
|
this table — those are process outputs, not "changes." The table MAY be empty, but ONLY
|
|
51
60
|
when the user explicitly asked for a no-code delivery form (e.g. a pure documentation
|
|
52
|
-
request)
|
|
61
|
+
request) and `task.json.type` is `doc`, `analysis`, or `report`; in that case declare the
|
|
62
|
+
deliverable in 需求解析 > 输出. If the task type is a
|
|
53
63
|
code task (重构 / Bug 修复 / 新功能 / 性能优化) yet 改动范围 is empty, you have downgraded
|
|
54
64
|
the task — this is a failed analysis.
|
|
55
65
|
|
|
@@ -82,22 +92,31 @@ You MUST execute these steps in exact order. Do not rearrange, skip, or combine
|
|
|
82
92
|
1. **Write skeleton** — FIRST TWO tool calls:
|
|
83
93
|
- Read `.easy-coding/templates/dev-spec-skeleton.md` (the template file).
|
|
84
94
|
- Write its exact content to `.easy-coding/tasks/{task-id}/dev-spec.md`.
|
|
85
|
-
This is a copy operation, not a generation task. Every section header and every
|
|
86
|
-
|
|
87
|
-
2. **
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
95
|
+
This is a copy operation, not a generation task. Every section header and every
|
|
96
|
+
`[[EC_TODO:...]]` marker in the template must appear in the written file unchanged.
|
|
97
|
+
2. **Inspect before filling** — load the required inputs in the order above and read the actual
|
|
98
|
+
source files. Do not edit dev-spec.md yet. Collect evidence and identify every decision that
|
|
99
|
+
could change technical direction, API, scope, delivery form, state flow, encoding, or
|
|
100
|
+
acceptance.
|
|
101
|
+
3. **Resolve the decision gate** — if any decision exists, ask it during ANALYSIS immediately,
|
|
102
|
+
using the native user-choice tool when available, then stop and wait. After the user answers,
|
|
103
|
+
repeat the evidence check and ask any newly exposed decision. Do not fill dev-spec.md,
|
|
104
|
+
execution.jsonl, or (for code tasks) test-strategy.md until the decision set is empty.
|
|
105
|
+
4. **Fill 项目模式 + 任务类型** — edit dev-spec.md in place only after the decision gate clears.
|
|
106
|
+
5. **Fill 需求解析** — edit dev-spec.md: 目标 / 输入 / 输出 / 边界.
|
|
107
|
+
6. **Fill 现状 + 冲突摘要** — write evidence-backed conclusions. Every current-state claim
|
|
108
|
+
must cite file:line. No file references = invalid section.
|
|
109
|
+
7. **Fill 影响面分析 + 改动范围** — edit dev-spec.md, fill the table with encoding evidence.
|
|
110
|
+
8. **Fill 修改方案 + 实施拆解** — edit dev-spec.md, design approach and decompose units.
|
|
111
|
+
9. **Fill 测试策略 + 风险与注意事项** — edit dev-spec.md.
|
|
112
|
+
10. **Fill conditional sections** — edit dev-spec.md: 背景数据应用 / 核心改动明细 /
|
|
96
113
|
前端实现映射 only if applicable. Remove inapplicable conditional sections entirely.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
114
|
+
11. **Write execution.jsonl** — append the plan record (see section below).
|
|
115
|
+
12. **Write test-strategy.md for code tasks only** — write the testability table (see section
|
|
116
|
+
below). For a read-only task, do not create this file; fill the dev-spec `测试策略` section
|
|
117
|
+
with `不适用:只读报告任务不进入 VERIFICATION`.
|
|
118
|
+
13. **Self-check** — run the gates below. Fix any failure in the files.
|
|
119
|
+
14. **Present to user** — Read dev-spec.md back from disk and output exactly what you read as
|
|
101
120
|
your reply. Do not summarize, abbreviate, reformat, or reconstruct from memory. The
|
|
102
121
|
dev-spec.md content on disk IS your reply.
|
|
103
122
|
|
|
@@ -114,7 +133,7 @@ If the hook injects `[easy-coding:analysis-template-drift:missing:...]`, you hav
|
|
|
114
133
|
from the template. Re-read the template file, compare it against your dev-spec.md, and fix
|
|
115
134
|
any missing or renamed section headers immediately.
|
|
116
135
|
|
|
117
|
-
**Mandatory section headers** (all
|
|
136
|
+
**Mandatory section headers** (all 12 must be present in the skeleton — the hook validates these):
|
|
118
137
|
|
|
119
138
|
1. `## 技术方案`
|
|
120
139
|
2. `### 项目模式`
|
|
@@ -122,13 +141,12 @@ any missing or renamed section headers immediately.
|
|
|
122
141
|
4. `### 需求解析`
|
|
123
142
|
5. `### 现状`
|
|
124
143
|
6. `### 冲突摘要`
|
|
125
|
-
7. `###
|
|
126
|
-
8. `###
|
|
127
|
-
9. `###
|
|
128
|
-
10. `###
|
|
129
|
-
11. `###
|
|
130
|
-
12. `###
|
|
131
|
-
13. `### 风险与注意事项`
|
|
144
|
+
7. `### 影响面分析`
|
|
145
|
+
8. `### 改动范围`
|
|
146
|
+
9. `### 修改方案`
|
|
147
|
+
10. `### 实施拆解`
|
|
148
|
+
11. `### 测试策略`
|
|
149
|
+
12. `### 风险与注意事项`
|
|
132
150
|
|
|
133
151
|
> **Encoding rule**: modified files keep their original encoding; new files declare the
|
|
134
152
|
> project encoding with evidence; conflicting or unknown encoding → mark "需用户确认".
|
|
@@ -146,6 +164,7 @@ any missing or renamed section headers immediately.
|
|
|
146
164
|
- Restating requirements without citing code evidence.
|
|
147
165
|
- Listing "loaded information" without a concrete implementation approach.
|
|
148
166
|
- Including conditional sections that are irrelevant to the current task.
|
|
167
|
+
- Including `[阶段:ANALYSIS]`, a `待用户决策` section, or any unresolved decision in the report.
|
|
149
168
|
|
|
150
169
|
## Implementation units → execution.jsonl
|
|
151
170
|
|
|
@@ -153,7 +172,7 @@ Decompose the work into units, then append ONE `plan` record to
|
|
|
153
172
|
`.easy-coding/tasks/{task-id}/execution.jsonl`:
|
|
154
173
|
|
|
155
174
|
```json
|
|
156
|
-
{"type":"plan","strategy":"parallel","units":[{"id":"U1","title":"
|
|
175
|
+
{"type":"plan","strategy":"parallel","units":[{"id":"U1","title":"Implement service","type":"backend","files":["src/service.ts"],"depends_on":[],"rules_sections":["naming","error-handling"],"abstract_modules":["user-service"]},{"id":"U2","title":"Implement adapter","type":"backend","files":["src/adapter.ts"],"depends_on":[],"rules_sections":["naming"],"abstract_modules":["user-service"]},{"id":"U3","title":"Add integration tests","type":"test","files":["test/service.test.ts"],"depends_on":["U1","U2"],"rules_sections":["testing"],"abstract_modules":["user-service"]}],"parallel_groups":[{"level":0,"units":["U1","U2"]},{"level":1,"units":["U3"]}]}
|
|
157
176
|
```
|
|
158
177
|
|
|
159
178
|
Strategy selection (drives ec-implementing's sub-agent orchestration shape — every strategy
|
|
@@ -168,7 +187,18 @@ Each unit carries `rules_sections` and `abstract_modules` so ec-implementing can
|
|
|
168
187
|
precise task card without the sub-agent re-reading the whole repo. `depends_on` sets the
|
|
169
188
|
parallel-group levels.
|
|
170
189
|
|
|
171
|
-
|
|
190
|
+
For an explicitly no-code `doc` / `analysis` / `report` task, use a `single` plan whose unit
|
|
191
|
+
has `files:[]`. The state API permits an empty file scope only for those task types. The unit
|
|
192
|
+
must still include `id`, `title`, `type`, `depends_on`, `rules_sections`, and
|
|
193
|
+
`abstract_modules`; its sub-agent returns the full read-only result in `deliverable` and must
|
|
194
|
+
not modify project files. After IMPLEMENT shows that full result, the task auto-completes without
|
|
195
|
+
REVIEW, VERIFICATION, MEMORY, or a memory write. Never use an empty `files` list for
|
|
196
|
+
feature/bugfix/refactor/perf code tasks.
|
|
197
|
+
|
|
198
|
+
## Test strategy (code tasks only; presented with the plan, saved for VERIFICATION)
|
|
199
|
+
|
|
200
|
+
Read-only `doc` / `analysis` / `report` tasks skip this entire standalone artifact. Do not
|
|
201
|
+
create `test-strategy.md`; only mark the mandatory dev-spec `测试策略` section as not applicable.
|
|
172
202
|
|
|
173
203
|
**1. Testability table** — classify every change:
|
|
174
204
|
|
|
@@ -193,33 +223,37 @@ owning unit and the verify command.
|
|
|
193
223
|
**5. Cannot-verify items** — items that cannot be verified in the current environment,
|
|
194
224
|
with reason (missing infra, data, credentials, or API contract).
|
|
195
225
|
|
|
196
|
-
|
|
197
|
-
VERIFICATION baseline).
|
|
226
|
+
For a code task, write the confirmed strategy to
|
|
227
|
+
`.easy-coding/tasks/{task-id}/test-strategy.md` (the VERIFICATION baseline).
|
|
198
228
|
|
|
199
229
|
## Self-check gates (ALL must pass — reject your own output if ANY fails)
|
|
200
230
|
|
|
201
231
|
- [ ] `dev-spec.md` 文件是否已写入 `.easy-coding/tasks/{task-id}/`?
|
|
202
232
|
- [ ] `execution.jsonl` 文件是否已写入?
|
|
203
|
-
- [ ] `test-strategy.md
|
|
204
|
-
- [ ] dev-spec.md 是否包含全部
|
|
233
|
+
- [ ] 代码任务是否已写入 `test-strategy.md`?只读任务是否确认该文件不存在?
|
|
234
|
+
- [ ] dev-spec.md 是否包含全部 12 个必填章节标题(参见上方清单)?
|
|
205
235
|
- [ ] 每个"现状"断言是否引用了真实文件/类/行号?
|
|
206
236
|
- [ ] 是否有具体的修改方案,而非仅罗列"已加载的文件"?
|
|
207
237
|
- [ ] 不适用的条件章节是否已完全省略(而非留空)?
|
|
208
238
|
- [ ] 实施拆解的单元、依赖、策略是否与改动范围表一致?
|
|
209
239
|
- [ ] 改动范围表中每行是否填写了文件编码及证据?
|
|
210
|
-
- [ ] 所有 `
|
|
240
|
+
- [ ] 所有 `[[EC_TODO:...]]` 占位标记是否已替换为实际内容?
|
|
211
241
|
- [ ] 回复给用户的内容是否是 dev-spec.md 的完整内容(而非自创的缩略格式)?
|
|
212
242
|
- [ ] 交付形态是否忠于用户原始需求?代码类任务(重构/修复/功能)是否规划了真实代码改动,而非降级为"仅出报告/分析清单/留作后续子任务"?
|
|
213
243
|
- [ ] 「改动范围」是否只含真实项目源码/配置,且不含任何 `.easy-coding/` 下的 harness 产物(dev-spec/execution/test-strategy/记忆/报告)?
|
|
214
244
|
- [ ] 若「改动范围」为空,是否确为用户明确要求的无代码交付形态,而非 AI 自行降级的结果?
|
|
215
|
-
- [ ]
|
|
245
|
+
- [ ] 若 unit.files 为空,task.json.type 是否为 `doc` / `analysis` / `report`,且计划是否为 single 只读交付?
|
|
246
|
+
- [ ] 是否在填充方案前通过分析中的即时问答解决了全部用户决策项,且最终报告不含未决问题或 `[阶段:ANALYSIS]`?
|
|
247
|
+
- [ ] 任何"本次不做全部 / 分批落地 / 范围收窄"的决定,是否已在填充方案前询问并获得用户确认,而非自行拍板并假托既定?
|
|
216
248
|
|
|
217
249
|
## Revision handling
|
|
218
250
|
|
|
219
|
-
> 修订同样受 HARD RULE 5/6 约束:用户的修订诉求若是扩大或细化代码改动,不得借机把任务降级为"出报告"
|
|
251
|
+
> 修订同样受 HARD RULE 5/6 约束:用户的修订诉求若是扩大或细化代码改动,不得借机把任务降级为"出报告";范围收窄必须在重写报告前即时询问并获得用户确认。
|
|
220
252
|
|
|
221
253
|
On user revision or Other feedback while ANALYSIS has a pending transition, first cancel the
|
|
222
|
-
pending edge.
|
|
254
|
+
pending edge. Re-run the pre-fill decision gate before editing the existing report. If the
|
|
255
|
+
revision exposes an unresolved decision, ask it immediately and wait without writing a partial
|
|
256
|
+
revision. Do NOT reply with only a change summary.
|
|
223
257
|
Re-output the COMPLETE revised dev-spec.md:
|
|
224
258
|
|
|
225
259
|
1. Prepend a `### 修订摘要` listing each user request and its impact on the plan. If the
|
|
@@ -227,7 +261,8 @@ Re-output the COMPLETE revised dev-spec.md:
|
|
|
227
261
|
2. Re-output the full plan following the template above (核心必填 + applicable conditional
|
|
228
262
|
sections), incorporating all revisions.
|
|
229
263
|
3. Overwrite the `plan` record in execution.jsonl with the new strategy.
|
|
230
|
-
4.
|
|
264
|
+
4. For code tasks, update test-strategy.md if test scope changed. For read-only tasks, keep the
|
|
265
|
+
file absent.
|
|
231
266
|
5. Request ANALYSIS -> IMPLEMENT again and present the standard confirmation/handoff/Other gate.
|
|
232
267
|
|
|
233
268
|
## End state
|
|
@@ -67,7 +67,7 @@ design now?" Offer two options:
|
|
|
67
67
|
|
|
68
68
|
1. **Start task now** — invoke `{{skill_trigger}}ec-workflow` with the design topic as the
|
|
69
69
|
task prompt. ec-workflow will create the task and enter INIT. After INIT completes, it
|
|
70
|
-
|
|
70
|
+
automatically enters ANALYSIS without a confirmation/handoff gate.
|
|
71
71
|
ec-analysis will discover the design doc in `.easy-coding/spec/` and use it as input.
|
|
72
72
|
2. **Later** — tell the user the design is saved and they can run
|
|
73
73
|
`{{skill_trigger}}ec-workflow` whenever ready.
|
|
@@ -17,7 +17,7 @@ Communicate with the user in the user's language.
|
|
|
17
17
|
|---|---|---|
|
|
18
18
|
| `sessions/` | **never** | personal runtime state, differs per developer |
|
|
19
19
|
| `config.yaml` | yes | shared team config |
|
|
20
|
-
| `tasks/*/task.json` `dev-spec.md` `execution.jsonl` `test-strategy.md` | yes | per-task folders, no merge conflicts; team-readable decision record |
|
|
20
|
+
| `tasks/*/task.json` `dev-spec.md` `execution.jsonl` and code-task `test-strategy.md` | yes | per-task folders, no merge conflicts; team-readable decision record |
|
|
21
21
|
| `SOUL.md` `RULES.md` `ABSTRACT.md` `TEST_STRATEGY.md` `CHANGELOG.md` | yes | shared project knowledge |
|
|
22
22
|
| `memory/` | yes | shared knowledge sinks |
|
|
23
23
|
| `spec/` | yes | spec store |
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ec-implementing
|
|
3
|
-
description: IMPLEMENT-stage skill. Use when ec-workflow enters IMPLEMENT with a confirmed plan. Executes execution.jsonl units under strict
|
|
3
|
+
description: IMPLEMENT-stage skill. Use when ec-workflow enters IMPLEMENT with a confirmed plan. Executes code or explicit no-code execution.jsonl units under strict scope control, enforces RULES compliance and encoding preservation, writes code-task tests per strategy, and dispatches sub-agents for every unit regardless of strategy.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ec-implementing — execute the confirmed plan
|
|
7
7
|
|
|
8
|
-
ec-workflow dispatches you when a confirmed task enters IMPLEMENT. You
|
|
9
|
-
|
|
10
|
-
(plan record), `.easy-coding/RULES.md`, `.easy-coding/ABSTRACT.md`, `test-strategy.md
|
|
8
|
+
ec-workflow dispatches you when a confirmed task enters IMPLEMENT. You execute the confirmed
|
|
9
|
+
delivery without re-opening decisions. Inputs: `task.json`, `dev-spec.md` (confirmed), `execution.jsonl`
|
|
10
|
+
(plan record), `.easy-coding/RULES.md`, `.easy-coding/ABSTRACT.md`, and `test-strategy.md` for
|
|
11
|
+
code tasks only. A read-only task has no test-strategy.md.
|
|
11
12
|
|
|
12
13
|
Communicate with the user in the user's language.
|
|
13
14
|
|
|
@@ -28,8 +29,13 @@ Communicate with the user in the user's language.
|
|
|
28
29
|
6. **Self-audit gate.** When the unit is done, audit: are all edits within scope? any
|
|
29
30
|
undeclared dependency change? any leftover TODO/FIXME you introduced? Report failures;
|
|
30
31
|
never skip silently.
|
|
31
|
-
7. **Tests (soft rule).** Write tests for [must-test]/[should-test] items per
|
|
32
|
+
7. **Tests (code tasks only, soft rule).** Write tests for [must-test]/[should-test] items per
|
|
32
33
|
test-strategy.md. Soft means: no project test infra → not forced; infra exists → required.
|
|
34
|
+
Read-only tasks have no test-strategy.md and write no tests.
|
|
35
|
+
8. **No-code delivery is explicit and read-only.** Only a task whose `task.json.type` is
|
|
36
|
+
`doc`, `analysis`, or `report` may have `unit.files:[]`. Dispatch it with editable scope
|
|
37
|
+
`NONE — read-only deliverable`; the sub-agent modifies nothing and returns the full result
|
|
38
|
+
in `deliverable`. An empty scope on any code task is a gate failure, not permission to roam.
|
|
33
39
|
|
|
34
40
|
## Sub-agent dispatch
|
|
35
41
|
|
|
@@ -70,8 +76,14 @@ goes through a sub-agent — this isolates implementation context from the main
|
|
|
70
76
|
await the level, then advance.
|
|
71
77
|
Platform spawn rule: {{platform_spawn_instruction}}
|
|
72
78
|
4. After each unit/level returns: check for file conflicts (two units touched the same file),
|
|
73
|
-
collect `issues` and `needs_attention`. Resolve conflicts before advancing.
|
|
74
|
-
|
|
79
|
+
collect `issues` and `needs_attention`. Resolve conflicts before advancing. For a no-code
|
|
80
|
+
unit, additionally require `changed_files:[]` and a non-empty string `deliverable`; a missing
|
|
81
|
+
deliverable or any file modification is a unit failure and must be re-dispatched.
|
|
82
|
+
5. After recording a successful no-code result, output the complete `deliverable` to the user
|
|
83
|
+
verbatim in the current response before any summary or completion action. Never replace,
|
|
84
|
+
truncate, or hide it behind the one-line `summary` or leave it only in execution.jsonl.
|
|
85
|
+
6. After all units/levels, summarize. For no-code delivery, the summary is supplemental and
|
|
86
|
+
must appear after the full deliverable.
|
|
75
87
|
|
|
76
88
|
## Task card — the sub-agent contract
|
|
77
89
|
|
|
@@ -88,11 +100,13 @@ structured results. Reply content IS the return value, not a message to a human.
|
|
|
88
100
|
- Modify only files in "Editable scope".
|
|
89
101
|
- Make no stage-transition decisions.
|
|
90
102
|
## Task {unit description extracted from dev-spec}
|
|
91
|
-
##
|
|
103
|
+
## Delivery mode {code | no-code read-only, derived from task.type and unit.files}
|
|
104
|
+
## Editable scope {unit.files | NONE — read-only deliverable}
|
|
92
105
|
## Coding rules {RULES.md sections selected by unit.rules_sections}
|
|
93
106
|
## Architecture {ABSTRACT.md sections selected by unit.abstract_modules}
|
|
94
107
|
## Output format
|
|
95
|
-
Return: changed_files[], summary (one line),
|
|
108
|
+
Return: changed_files[], summary (one line), deliverable (full no-code result or null),
|
|
109
|
+
issues[], needs_attention[].
|
|
96
110
|
```
|
|
97
111
|
|
|
98
112
|
This enforces the three-layer escape guard: task boundary (only its files), stage boundary
|
|
@@ -107,9 +121,19 @@ let sub-agents re-dispatch each other.
|
|
|
107
121
|
|
|
108
122
|
## End state
|
|
109
123
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
124
|
+
- **Code task:** after all units are done and self-audited, hand back to ec-workflow. It records
|
|
125
|
+
IMPLEMENT -> REVIEW as the recommended pending edge, then presents: (1) enter REVIEW,
|
|
126
|
+
(2) skip REVIEW and enter VERIFICATION, (3) hand off, plus native free-form Other.
|
|
127
|
+
- **No-code read-only task:** after recording the successful result and showing the complete
|
|
128
|
+
deliverable, call `auto-transition --stage COMPLETE` through ec-workflow. Do not request or
|
|
129
|
+
enter REVIEW, VERIFICATION, or MEMORY; do not write short or long memory. The state API only
|
|
130
|
+
accepts this terminal edge when the latest plan is `single` with `files:[]` and the latest
|
|
131
|
+
result has `changed_files:[]`, a non-empty `deliverable`, and no issues/needs_attention.
|
|
132
|
+
A matching `dispatch` record must immediately precede the accepted result among that unit's
|
|
133
|
+
execution records; an inline report without dispatch cannot complete.
|
|
134
|
+
|
|
135
|
+
If something invalidates the plan before completion, request IMPLEMENT -> ANALYSIS and wait at
|
|
136
|
+
the standard gate instead of improvising.
|
|
113
137
|
|
|
114
138
|
## Self-check gates (before handing back)
|
|
115
139
|
|
|
@@ -118,3 +142,7 @@ request IMPLEMENT -> ANALYSIS and wait at the same gate instead of improvising.
|
|
|
118
142
|
- [ ] Each dispatched unit has a `dispatch` record in execution.jsonl?
|
|
119
143
|
- [ ] Each returned unit has a `result` record?
|
|
120
144
|
- [ ] No files modified outside the change-scope table?
|
|
145
|
+
- [ ] For a no-code unit: changed_files is empty, deliverable is non-empty, and the full
|
|
146
|
+
deliverable was output verbatim to the user before automatic completion?
|
|
147
|
+
- [ ] For a no-code task: IMPLEMENT -> COMPLETE was automatic, with no REVIEW, VERIFICATION,
|
|
148
|
+
MEMORY, or memory write?
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ec-memory
|
|
3
|
-
description: MEMORY-stage skill — part of the archive flow, triggered only after user acceptance and a confirmed stage edge. Writes one schema-v2 short memory,
|
|
3
|
+
description: MEMORY-stage skill — part of the archive flow, triggered only after user acceptance and a confirmed stage edge. Writes one schema-v2 short memory, runs the authoritative conditional long-memory gate, performs optional distillation, and automatically completes the task.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ec-memory — archive what was learned
|
|
@@ -8,6 +8,8 @@ description: MEMORY-stage skill — part of the archive flow, triggered only aft
|
|
|
8
8
|
ec-workflow dispatches you during MEMORY, which runs only after the user accepts the task and
|
|
9
9
|
confirms entry. Inputs: the task's `dev-spec.md`, `execution.jsonl` (the `result` and
|
|
10
10
|
`verify` records are precise source material), the changed-files list, existing memory files.
|
|
11
|
+
Read-only `doc` / `analysis` / `report` tasks auto-complete from IMPLEMENT and never enter
|
|
12
|
+
MEMORY or write task memory.
|
|
11
13
|
|
|
12
14
|
Communicate with the user in the user's language. Memory file content follows the project's
|
|
13
15
|
recorded comment/doc language.
|
|
@@ -132,11 +134,13 @@ For `distill`, it also rejects completion while any frozen candidate still exist
|
|
|
132
134
|
frozen retained file is missing. A candidate checkpoint may disappear only because it is
|
|
133
135
|
explicitly listed in `candidate_files`.
|
|
134
136
|
|
|
135
|
-
## Step 3 —
|
|
137
|
+
## Step 3 — automatically enter COMPLETE
|
|
136
138
|
|
|
137
|
-
Only after `memory_progress.completed:true`, hand control to ec-workflow to
|
|
138
|
-
|
|
139
|
-
|
|
139
|
+
Only after `memory_progress.completed:true`, hand control to ec-workflow to call:
|
|
140
|
+
`{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py auto-transition --session-file <P> --stage COMPLETE --agent <agent-id>`.
|
|
141
|
+
MEMORY -> COMPLETE is a mechanical edge: do not create `pending_transition`, present another
|
|
142
|
+
confirmation/handoff gate, or stop before closeout. Use the returned Ready status context and
|
|
143
|
+
emit the final task summary.
|
|
140
144
|
|
|
141
145
|
## ABSTRACT backfill / update
|
|
142
146
|
|
|
@@ -5,9 +5,10 @@ description: REVIEW-stage skill. Use when ec-workflow enters REVIEW. Reviews cha
|
|
|
5
5
|
|
|
6
6
|
# ec-reviewing — graded, evidence-backed review
|
|
7
7
|
|
|
8
|
-
ec-workflow dispatches you when IMPLEMENT finishes.
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
ec-workflow dispatches you when code IMPLEMENT finishes. Read-only `doc` / `analysis` / `report`
|
|
9
|
+
tasks auto-complete from IMPLEMENT and never enter REVIEW. You judge the code change set and
|
|
10
|
+
return a verdict that drives the next transition. Inputs: the changed files (from
|
|
11
|
+
execution.jsonl `result` records), `dev-spec.md`, `.easy-coding/RULES.md`, `test-strategy.md`.
|
|
11
12
|
|
|
12
13
|
Communicate with the user in the user's language.
|
|
13
14
|
|
|
@@ -52,7 +52,7 @@ unless ec-workflow is explicitly invoked or the agent environment routes into it
|
|
|
52
52
|
### Create a task
|
|
53
53
|
|
|
54
54
|
Create through the state API, never by hand-editing `task.json` or session files:
|
|
55
|
-
`{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py create-task --session-file <P> --task-id <MM-DD-short-name> --type <feature|bugfix|refactor|perf> --title "<one-line summary>" --agent <agent-id> --no-set-current`.
|
|
55
|
+
`{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py create-task --session-file <P> --task-id <MM-DD-short-name> --type <feature|bugfix|refactor|perf|doc|analysis|report|workflow> --title "<one-line summary>" --agent <agent-id> --no-set-current`.
|
|
56
56
|
|
|
57
57
|
If the user explicitly wants to start the task now, omit `--no-set-current`; otherwise leave
|
|
58
58
|
the current workflow pointer untouched and tell them to run `{{skill_trigger}}ec-workflow`
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ec-verification
|
|
3
|
-
description: VERIFICATION-stage skill — the hard gate between
|
|
3
|
+
description: VERIFICATION-stage skill — the hard gate between implementation/review and archive. Use when ec-workflow enters VERIFICATION. Runs lint/typecheck/test in parallel, verifies coverage against test-strategy, gates on fresh evidence, then drives the user-acceptance and repair loop. Archive never happens without explicit user acceptance.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ec-verification — the hard gate
|
|
7
7
|
|
|
8
|
-
ec-workflow dispatches you when REVIEW returns `accept
|
|
9
|
-
|
|
8
|
+
ec-workflow dispatches you when REVIEW returns `accept` or the user explicitly skips REVIEW
|
|
9
|
+
after code IMPLEMENT. Read-only tasks auto-complete from IMPLEMENT and never enter this stage.
|
|
10
|
+
You are the last gate before code-task archive. Nothing passes on assumption.
|
|
10
11
|
|
|
11
12
|
Communicate with the user in the user's language.
|
|
12
13
|
|
|
@@ -65,14 +66,16 @@ test manually. Their response routes:
|
|
|
65
66
|
|
|
66
67
|
- **"accepted"** → request VERIFICATION -> MEMORY and present the standard boundary gate.
|
|
67
68
|
- **"problem here"** → scope judgment against the dev-spec:
|
|
68
|
-
- in scope → request VERIFICATION -> IMPLEMENT
|
|
69
|
-
the
|
|
69
|
+
- in scope → request VERIFICATION -> IMPLEMENT and wait for the user to confirm the return;
|
|
70
|
+
after repair, the IMPLEMENT completion choice decides whether REVIEW runs again or
|
|
71
|
+
VERIFICATION resumes directly.
|
|
70
72
|
- out of scope → propose a new task (`spawned_from` = current task id); the current task
|
|
71
73
|
may archive now (if already satisfactory) or stay suspended.
|
|
72
74
|
- **"cancel"** → ec-task-close.
|
|
73
75
|
|
|
74
76
|
Repair sizing: a trivial tweak is fixed and re-verified inside VERIFICATION; a logic/structure
|
|
75
|
-
change formally returns to IMPLEMENT
|
|
77
|
+
change formally returns to IMPLEMENT. After repair, present the standard IMPLEMENT completion
|
|
78
|
+
choice again so the user may enter REVIEW or skip directly to VERIFICATION.
|
|
76
79
|
|
|
77
80
|
## 5. Archive entry (only after acceptance)
|
|
78
81
|
|
|
@@ -84,4 +87,5 @@ Acceptance does not mutate the stage directly. Hand control to ec-workflow to ca
|
|
|
84
87
|
|
|
85
88
|
Only after confirmation may ec-workflow consume the pending edge and dispatch ec-memory.
|
|
86
89
|
ec-memory owns both short-memory creation and the conditional long-memory gate inside the
|
|
87
|
-
single MEMORY stage.
|
|
90
|
+
single MEMORY stage. After memory processing completes, MEMORY -> COMPLETE advances
|
|
91
|
+
automatically without another confirmation or handoff gate.
|