easy-coding-harness 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-coding-harness",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "CLI scaffold for installing Easy Coding harness files into agent-native directories.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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). Every legal stage edge records `task.json.pending_transition`
48
- and requires explicit user confirmation by default. VERIFICATION remains the fresh-evidence
49
- hard gate, and MEMORY keeps the conditional long-memory threshold gate. The active task
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 (template-first), then fills incrementally — producing the narrative plan, execution plan (execution.jsonl), and test strategy. Ends by requesting the confirmed edge to IMPLEMENT. Grounds every conclusion in real code, never restates the requirement.
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,33 +23,43 @@ 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. **All subsequent analysis** fills sections of this file via edits. You do NOT hold analysis
27
- in your head and dump it at the end you write each section into the file as you go.
28
- 3. **Your chat output to the user IS dev-spec.md, verbatim.** After dev-spec.md is complete,
29
- use the Read tool to read it back, then output exactly what you read as your reply this
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. **Three files must exist** in `.easy-coding/tasks/{task-id}/` when you finish:
35
- `dev-spec.md`, `execution.jsonl` (plan record), `test-strategy.md`. Missing any one = failed.
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: decompose it into batches/units in 实施拆解, and surface "split into batches? /
42
- which subset this round?" as an explicit item in 待用户决策 for the user to decide. Never
43
- make a scope-narrowing decision yourself and present it as settled. Never fabricate a
44
- premise such as "the user already fixed scope X in INIT" or "auto_mode already selected Y"
45
- to justify narrowing — `auto_mode` only waives stage-boundary prompts under an explicit
46
- autonomous user request and carries NO scope or delivery-form decision whatsoever.
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
53
+ premise such as "the user already fixed scope X in INIT" or "confirm_mode already selected Y"
54
+ to justify narrowing — confirmation mode controls stage-boundary prompts only and carries
55
+ NO scope or delivery-form decision whatsoever.
47
56
  6. **改动范围 lists ONLY real project code.** The 改动范围 table carries only changes to real
48
57
  project source/config files. Any harness artifact under `.easy-coding/` (dev-spec.md,
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); in that case declare the deliverable in 需求解析 > 输出. If the task type is a
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
- placeholder in the template must appear in the written file unchanged.
87
- 2. **Fill 项目模式 + 任务类型** edit dev-spec.md in place.
88
- 3. **Fill 需求解析** edit dev-spec.md: 目标 / 输入 / 输出 / 边界.
89
- 4. **Read source code, fill 现状** read the actual files, then edit dev-spec.md with
90
- evidence. Every claim must cite file:line. No file references = invalid section.
91
- 5. **Fill 冲突摘要 + 待用户决策**edit dev-spec.md.
92
- 6. **Fill 影响面分析 + 改动范围** edit dev-spec.md, fill the table with encoding evidence.
93
- 7. **Fill 修改方案 + 实施拆解** edit dev-spec.md, design approach and decompose units.
94
- 8. **Fill 测试策略 + 风险与注意事项** — edit dev-spec.md.
95
- 9. **Fill conditional sections** — edit dev-spec.md: 背景数据应用 / 核心改动明细 /
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
- 10. **Write execution.jsonl** — append the plan record (see section below).
98
- 11. **Write test-strategy.md** — write the testability table (see section below).
99
- 12. **Self-check** run the gates below. Fix any failure in the files.
100
- 13. **Present to user** — Read dev-spec.md back from disk and output exactly what you read as
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 13 must be present in the skeleton — the hook validates these):
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":"...","type":"backend","files":["..."],"depends_on":[],"rules_sections":["naming","error-handling"],"abstract_modules":["user-service"]}],"parallel_groups":[{"level":0,"units":["U1","U2"]},{"level":1,"units":["U3"]}]}
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
- ## Test strategy (presented with the plan, saved for VERIFICATION)
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
- Write the confirmed strategy to `.easy-coding/tasks/{task-id}/test-strategy.md` (the
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 是否包含全部 13 个必填章节标题(参见上方清单)?
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. Do NOT reply with only a change summary.
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. Update test-strategy.md if test scope changed.
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
- presents the standard confirmation/handoff/Other gate before entering ANALYSIS.
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 file-scope control, enforces RULES compliance and encoding preservation, writes tests per strategy, and dispatches sub-agents for every unit regardless of strategy.
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 turn the plan into
9
- code without re-opening decisions. Inputs: `dev-spec.md` (confirmed), `execution.jsonl`
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
 
@@ -47,7 +53,7 @@ EVERY STRATEGY = MANDATORY SUB-AGENT DISPATCH. NO EXCEPTIONS.
47
53
  You MUST dispatch sub-agents using {{sub_agent_dispatch}} for every unit, whatever the
48
54
  strategy. You are FORBIDDEN from implementing any unit yourself in the main agent. Doing the
49
55
  work inline instead of dispatching is a protocol violation equivalent to bypassing the
50
- ANALYSIS -> IMPLEMENT confirmation gate.
56
+ ANALYSIS -> IMPLEMENT gate selected by the effective confirm mode.
51
57
 
52
58
  Self-check before writing ANY implementation code:
53
59
  - Am I about to write implementation code in the main agent? → STOP. Dispatch a sub-agent.
@@ -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
- 5. After all units/levels, summarize.
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
- ## Editable scope {unit.files}
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), issues[], needs_attention[].
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
- All units done and self-audited hand back to ec-workflow to request IMPLEMENT -> REVIEW and
111
- wait at the standard confirmation/handoff/Other gate. If something invalidates the plan,
112
- request IMPLEMENT -> ANALYSIS and wait at the same gate instead of improvising.
124
+ - **Code task:** after all units are done and self-audited, hand back to ec-workflow. In approve
125
+ mode it records IMPLEMENT -> REVIEW as the recommended pending edge and presents REVIEW /
126
+ skip to VERIFICATION / handoff. In guard/auto it automatically enters REVIEW.
127
+ - **No-code read-only task:** after recording the successful result and showing the complete
128
+ deliverable, request COMPLETE in approve mode or auto-transition in guard/auto. Do not
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, select IMPLEMENT -> ANALYSIS and follow
136
+ the effective confirm mode 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 completion?
147
+ - [ ] For a no-code task: IMPLEMENT -> COMPLETE followed the effective confirm mode, with no
148
+ REVIEW, VERIFICATION, MEMORY, or memory write?
@@ -1,13 +1,15 @@
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, then runs the authoritative conditional long-memory gate, performs optional distillation, and requests COMPLETE.
3
+ description: MEMORY-stage skill — archive flow entered after a green VERIFICATION gate according to the effective confirm mode. 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
7
7
 
8
- ec-workflow dispatches you during MEMORY, which runs only after the user accepts the task and
9
- confirms entry. Inputs: the task's `dev-spec.md`, `execution.jsonl` (the `result` and
8
+ ec-workflow dispatches you during MEMORY after approve/guard acceptance or an auto-mode green
9
+ VERIFICATION gate. 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 — request COMPLETE
137
+ ## Step 3 — automatically enter COMPLETE
136
138
 
137
- Only after `memory_progress.completed:true`, hand control to ec-workflow to request
138
- MEMORY -> COMPLETE. Present the standard confirmation/handoff/Other gate and stop. Do not
139
- mark the task COMPLETE automatically.
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
 
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: ec-no-harness
3
+ description: Disable Easy Coding Harness orchestration for the current agent session and use native agent behavior. Use only when the user explicitly invokes {{skill_trigger}}ec-no-harness or explicitly asks to restore Easy Coding after this bypass.
4
+ ---
5
+
6
+ # ec-no-harness — current-session Easy Coding bypass
7
+
8
+ This skill bypasses only Easy Coding Harness for the current session. It does not disable the
9
+ platform's hook system, alter `EC_HOOKS`, or suppress non-Easy-Coding skills and instructions.
10
+
11
+ Communicate with the user in the user's language.
12
+
13
+ ## Disable for this session
14
+
15
+ Read `[easy-coding:session-file:P]` from the injected context, then call:
16
+
17
+ `{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py disable-harness --session-file <P> --agent <agent-id>`
18
+
19
+ After the command succeeds:
20
+ - Do not enter or resume ec-workflow in this session.
21
+ - Do not emit an Easy Coding status line or apply Easy Coding stages, confirmation gates,
22
+ task artifacts, verification orchestration, or memory workflow.
23
+ - Process the user's request with the platform's native agent behavior.
24
+ - Continue honoring project/user/global instructions, explicitly requested non-Easy-Coding
25
+ skills, and every other hook.
26
+ - Do not clear `current_task`, delete a pending transition, or modify task state. The task is
27
+ suspended intact and can resume after restoring Easy Coding or in a new session.
28
+
29
+ If the invocation contains no request beyond enabling the bypass, briefly confirm that native
30
+ mode is active for the current session.
31
+
32
+ ## Restore Easy Coding in the same session
33
+
34
+ Only when the user explicitly asks to restore/resume Easy Coding, call:
35
+
36
+ `{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py enable-harness --session-file <P> --agent <agent-id>`
37
+
38
+ Use the returned `status_context` as authoritative. Do not advance the task automatically;
39
+ hand control back to ec-workflow routing semantics.
@@ -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. You judge the change set and return a
9
- verdict that drives the next transition. Inputs: the changed files (from execution.jsonl
10
- `result` records), `dev-spec.md`, `.easy-coding/RULES.md`, `test-strategy.md`.
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
 
@@ -88,6 +89,6 @@ Platform spawn rule: {{platform_spawn_instruction}}
88
89
  Append `review` records to execution.jsonl, one per dimension:
89
90
  `{"type":"review","dimension":"correctness","findings":[{"file":"...","line":42,"issue":"...","severity":"warn"}]}`.
90
91
  Then state the verdict and hand back to ec-workflow.
91
- For `accept` or `replan`, ec-workflow records the corresponding pending transition and presents
92
- the standard confirmation/handoff/Other gate. A `fix` round stays inside REVIEW and therefore
92
+ For `accept` or `replan`, ec-workflow follows the effective confirm mode for the corresponding
93
+ transition. A `fix` round stays inside REVIEW and therefore
93
94
  does not create a status transition unless the outcome changes.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ec-task-management
3
- description: Task panel for Easy Coding tasks. Use when the user runs {{skill_trigger}}ec-task-management, asks to see tasks, create a task, continue a task, or take over a task handed off by another agent.
3
+ description: Task and session panel for Easy Coding. Use when the user runs {{skill_trigger}}ec-task-management, asks to see/create/continue/take over tasks, or asks to view or change the current session confirm mode.
4
4
  ---
5
5
 
6
6
  # ec-task-management — the task panel
@@ -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`
@@ -62,6 +62,28 @@ The command returns `status_line` and `status_context`. If the command sets or c
62
62
  `current_task`, use the returned context as the authoritative status source for the rest of
63
63
  the current turn instead of older hook-injected status text.
64
64
 
65
+ ### View or change this session's confirm mode
66
+
67
+ Call `snapshot --session-file <P>` and show:
68
+ - `project_confirm_mode`
69
+ - `session_confirm_mode` (`project default` when null)
70
+ - `effective_confirm_mode`
71
+
72
+ When the user asks to change the current session, use native choice UI when available and offer
73
+ exactly `approve`, `guard` (recommended default), and `auto`. The native free-form Other input
74
+ may receive `restore project default`; do not invent a fourth button when the UI is limited to
75
+ three choices.
76
+
77
+ Set an override through the state API, never by editing the session JSON:
78
+ `{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py set-confirm-mode --session-file <P> --mode <approve|guard|auto> --agent <agent-id>`.
79
+
80
+ Restore project configuration through:
81
+ `{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py clear-confirm-mode --session-file <P> --agent <agent-id>`.
82
+
83
+ Use the returned snapshot as authoritative and report the effective mode. Preserve any existing
84
+ `pending_transition`; when it becomes automatic, ec-workflow consumes its original target via
85
+ `auto-transition` instead of losing the completed stage outcome.
86
+
65
87
  ## Boundaries
66
88
 
67
89
  - Do not close or cancel tasks — that is ec-task-close.