easy-coding-harness 0.10.0-beta.9 → 1.0.0-beta.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/CHANGELOG.md +56 -1
- package/README.md +32 -25
- package/dist/cli.js +272 -37
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/templates/claude/agents/ec-implementer.md +7 -8
- package/templates/claude/agents/ec-reviewer.md +14 -2
- package/templates/claude/agents/ec-verifier.md +11 -2
- package/templates/codex/agents/ec-implementer.toml +7 -8
- package/templates/codex/agents/ec-reviewer.toml +14 -2
- package/templates/codex/agents/ec-verifier.toml +11 -2
- package/templates/common/bundled-skills/ec-init/SKILL.md +1 -1
- package/templates/common/bundled-skills/ec-meta/references/local-architecture/README.md +15 -11
- package/templates/common/skills/ec-analysis/SKILL.md +9 -8
- package/templates/common/skills/ec-config/SKILL.md +2 -2
- package/templates/common/skills/ec-implementing/SKILL.md +35 -30
- package/templates/common/skills/ec-lite/SKILL.md +74 -0
- package/templates/common/skills/ec-no-harness/SKILL.md +3 -0
- package/templates/common/skills/ec-quality/SKILL.md +153 -0
- package/templates/common/skills/ec-task-management/SKILL.md +9 -5
- package/templates/common/skills/ec-tdd-init/SKILL.md +5 -4
- package/templates/common/skills/ec-workflow/SKILL.md +22 -29
- package/templates/main-constraint/AGENTS.md.tpl +19 -13
- package/templates/main-constraint/CLAUDE.md.tpl +19 -13
- package/templates/qoder/agents/ec-implementer.md +7 -8
- package/templates/qoder/agents/ec-reviewer.md +14 -2
- package/templates/qoder/agents/ec-verifier.md +11 -2
- package/templates/runtime/templates/dev-spec-skeleton.md +2 -2
- package/templates/shared-hooks/easy_coding_state.py +2793 -318
- package/templates/claude/agents/ec-fixer.md +0 -37
- package/templates/codex/agents/ec-fixer.toml +0 -26
- package/templates/common/skills/ec-reviewing/SKILL.md +0 -109
- package/templates/common/skills/ec-verification/SKILL.md +0 -177
- package/templates/qoder/agents/ec-fixer.md +0 -37
package/package.json
CHANGED
|
@@ -9,8 +9,6 @@ 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`.
|
|
14
12
|
- Do not call any Skill tool.
|
|
15
13
|
- Do not read `.claude/skills/`, `.agents/skills/`, `.qoder/skills/`, or any `.easy-coding/`
|
|
16
14
|
file. All context you need is already in the task card.
|
|
@@ -19,25 +17,26 @@ complete exactly that unit. Your reply IS the return value, not a message to a h
|
|
|
19
17
|
- Follow the task card's `Local Baseline`: match nearby naming, control flow, null/error handling,
|
|
20
18
|
layering, object modeling, method granularity, literal usage, and comment style unless a stated
|
|
21
19
|
correctness, security, requirement, or hard-rule reason requires a deviation.
|
|
22
|
-
- Treat the task card's `Code Comments` author value and field
|
|
20
|
+
- Treat the task card's `Code Comments` author value and field rules as mandatory.
|
|
23
21
|
- Do not add generic defensive null checks, speculative abstractions/layers, fragmented one-use
|
|
24
22
|
micro-methods, or a constant that exists only to hold one getter return.
|
|
25
23
|
- Local, obvious magic values are allowed when they match surrounding code; create constants for
|
|
26
24
|
reuse, stable domain/config/protocol semantics, or established project convention.
|
|
27
25
|
- Every method and field in a new core Java class, and every added or materially modified method
|
|
28
|
-
or field in an existing core Java class, must have meaningful Javadoc;
|
|
29
|
-
where intent or constraints are not obvious.
|
|
26
|
+
or field in an existing core Java class, must have meaningful multiline Javadoc; use `//` for
|
|
27
|
+
ordinary one-line notes and comment complex logic where intent or constraints are not obvious.
|
|
28
|
+
- Do not change unrelated comments, formatting, imports, names, or code. Keep one blank line
|
|
29
|
+
between coherent logic sections and revert formatter spillover outside the requested scope.
|
|
30
30
|
- Treat acceptance criteria, test points, contracts, and risks in the card as required inputs.
|
|
31
|
-
-
|
|
31
|
+
- Do not run quality commands unless the card explicitly marks TDD lifecycle execution required.
|
|
32
32
|
- Preserve each existing file's original encoding; never silently convert.
|
|
33
33
|
|
|
34
34
|
## Output (return exactly this)
|
|
35
35
|
|
|
36
36
|
- `changed_files`: the files you actually modified
|
|
37
37
|
- `summary`: one line describing what you did
|
|
38
|
-
- `deliverable`: full no-code result, or `null` for a code unit
|
|
39
38
|
- `issues`: problems you hit (empty array if none)
|
|
40
39
|
- `needs_attention`: anything the main agent must decide (empty array if none)
|
|
41
|
-
- `checks`: commands run
|
|
40
|
+
- `checks`: TDD lifecycle commands actually run, otherwise an empty array
|
|
42
41
|
|
|
43
42
|
Do not claim a file is verified unless the card asked you to run a check and you ran it.
|
|
@@ -19,8 +19,12 @@ dimension named in your task card. Your reply IS the return value.
|
|
|
19
19
|
- Do not request defensive null checks, abstraction, constant extraction, or legacy-wide comment
|
|
20
20
|
cleanup solely as generic best practice. Flag unjustified local-style deviations, speculative
|
|
21
21
|
layers, fragmented one-use micro-methods, constants created only for a getter return, and
|
|
22
|
-
missing Javadoc on any method/field in a new core Java class or any added/materially
|
|
23
|
-
method/field in an existing core Java class.
|
|
22
|
+
missing multiline Javadoc on any method/field in a new core Java class or any added/materially
|
|
23
|
+
modified method/field in an existing core Java class.
|
|
24
|
+
- Treat unrelated comment, formatting, import, naming, or refactor changes as minimum-diff
|
|
25
|
+
violations. Do not ask to clean up untouched legacy code.
|
|
26
|
+
- On the first pass, report the complete in-scope finding set. On a repair pass, review only the
|
|
27
|
+
repair delta and direct interactions; do not introduce unrelated style findings.
|
|
24
28
|
- `error` means a demonstrated acceptance, contract, security, or build failure. Use `warning`
|
|
25
29
|
for a credible risk and `info` for non-blocking maintainability advice.
|
|
26
30
|
|
|
@@ -33,5 +37,13 @@ dimension named in your task card. Your reply IS the return value.
|
|
|
33
37
|
## Output (return exactly this)
|
|
34
38
|
|
|
35
39
|
- `dimension`: your assigned dimension
|
|
40
|
+
- `passed`: true only when there are no `error` findings
|
|
41
|
+
- `implementation_fingerprint`: copy unchanged from the task card
|
|
42
|
+
- `quality_attempt`: copy unchanged from the task card
|
|
43
|
+
- `failure_classes`: array of code-defect | test-defect | contract-ambiguity | environment for
|
|
44
|
+
blocking findings; empty when passed
|
|
45
|
+
- `reviewer`: your canonical Agent identity
|
|
46
|
+
- `timestamp`: current ISO timestamp with timezone
|
|
47
|
+
- `repo_id` and `source_task_id`: copy unchanged when present in the task card
|
|
36
48
|
- `findings`: array of `{file, line, issue, severity}` (`severity`: info | warning | error)
|
|
37
49
|
- `suggestion`: optional fix direction per finding
|
|
@@ -20,13 +20,22 @@ not pass.
|
|
|
20
20
|
|
|
21
21
|
## Hard constraints
|
|
22
22
|
|
|
23
|
-
- Run only the requested check. Do not fix code, do not run other checks, do not edit files.
|
|
23
|
+
- Run only the requested check. Do not fix code, do not run other checks, and do not edit files.
|
|
24
|
+
Keep the exact task-card candidate fingerprints; never combine another candidate's output.
|
|
25
|
+
- Distinguish environment/tooling failures from code or test failures in `failures`.
|
|
24
26
|
- Do not call any Skill tool. Do not make stage decisions.
|
|
25
27
|
|
|
26
28
|
## Output (return exactly this)
|
|
27
29
|
|
|
28
|
-
- `check_type`: lint | typecheck | test | build
|
|
30
|
+
- `check_type`: lint | typecheck | test | build | coverage
|
|
31
|
+
- `check`: copy unchanged from the task card
|
|
32
|
+
- `command`: the exact command that was run
|
|
29
33
|
- `passed`: true | false (from the real exit status)
|
|
34
|
+
- `quality_attempt`: copy unchanged from the task card
|
|
35
|
+
- `failure_classes`: array of code-defect | test-defect | contract-ambiguity | environment;
|
|
36
|
+
empty when passed
|
|
37
|
+
- `timestamp`: current ISO timestamp with timezone
|
|
38
|
+
- `repo_id` and `source_task_id`: copy unchanged when present in the task card
|
|
30
39
|
- `failures`: array of failure messages (empty if passed)
|
|
31
40
|
- `command_output`: the relevant tail of stdout/stderr
|
|
32
41
|
- `implementation_fingerprint`: copy unchanged from the task card
|
|
@@ -8,8 +8,6 @@ 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.
|
|
13
11
|
- Do not call any Skill tool.
|
|
14
12
|
- Do not read .agents/skills/, .codex/, or any .easy-coding/ file. All needed context is in
|
|
15
13
|
the card.
|
|
@@ -18,25 +16,26 @@ Hard constraints:
|
|
|
18
16
|
- Follow the task card's "Local Baseline": match nearby naming, control flow, null/error handling,
|
|
19
17
|
layering, object modeling, method granularity, literal usage, and comment style unless a stated
|
|
20
18
|
correctness, security, requirement, or hard-rule reason requires a deviation.
|
|
21
|
-
- Treat the task card's "Code Comments" author value and field
|
|
19
|
+
- Treat the task card's "Code Comments" author value and field rules as mandatory.
|
|
22
20
|
- Do not add generic defensive null checks, speculative abstractions/layers, fragmented one-use
|
|
23
21
|
micro-methods, or a constant that exists only to hold one getter return.
|
|
24
22
|
- Local, obvious magic values are allowed when they match surrounding code; create constants for
|
|
25
23
|
reuse, stable domain/config/protocol semantics, or established project convention.
|
|
26
24
|
- Every method and field in a new core Java class, and every added or materially modified method
|
|
27
|
-
or field in an existing core Java class, must have meaningful Javadoc;
|
|
28
|
-
where intent or constraints are not obvious.
|
|
25
|
+
or field in an existing core Java class, must have meaningful multiline Javadoc; use // for
|
|
26
|
+
ordinary one-line notes and comment complex logic where intent or constraints are not obvious.
|
|
27
|
+
- Do not change unrelated comments, formatting, imports, names, or code. Keep one blank line
|
|
28
|
+
between coherent logic sections and revert formatter spillover outside the requested scope.
|
|
29
29
|
- Treat acceptance criteria, test points, contracts, and risks in the card as required inputs.
|
|
30
|
-
-
|
|
30
|
+
- Do not run quality commands unless the card explicitly marks TDD lifecycle execution required.
|
|
31
31
|
- Preserve each existing file's original encoding; never silently convert.
|
|
32
32
|
|
|
33
33
|
Output (return exactly this):
|
|
34
34
|
- changed_files: the files you actually modified
|
|
35
35
|
- summary: one line describing what you did
|
|
36
|
-
- deliverable: full no-code result, or null for a code unit
|
|
37
36
|
- issues: problems you hit (empty array if none)
|
|
38
37
|
- needs_attention: anything the main agent must decide (empty array if none)
|
|
39
|
-
- checks: commands run
|
|
38
|
+
- checks: TDD lifecycle commands actually run, otherwise an empty array
|
|
40
39
|
|
|
41
40
|
Do not claim a file is verified unless the card asked you to run a check and you ran it.
|
|
42
41
|
"""
|
|
@@ -18,8 +18,12 @@ Stance:
|
|
|
18
18
|
- Do not request defensive null checks, abstraction, constant extraction, or legacy-wide comment
|
|
19
19
|
cleanup solely as generic best practice. Flag unjustified local-style deviations, speculative
|
|
20
20
|
layers, fragmented one-use micro-methods, constants created only for a getter return, and
|
|
21
|
-
missing Javadoc on any method/field in a new core Java class or any added/materially
|
|
22
|
-
method/field in an existing core Java class.
|
|
21
|
+
missing multiline Javadoc on any method/field in a new core Java class or any added/materially
|
|
22
|
+
modified method/field in an existing core Java class.
|
|
23
|
+
- Treat unrelated comment, formatting, import, naming, or refactor changes as minimum-diff
|
|
24
|
+
violations. Do not ask to clean up untouched legacy code.
|
|
25
|
+
- On the first pass, report the complete in-scope finding set. On a repair pass, review only the
|
|
26
|
+
repair delta and direct interactions; do not introduce unrelated style findings.
|
|
23
27
|
- error means a demonstrated acceptance, contract, security, or build failure. Use warning
|
|
24
28
|
for a credible risk and info for non-blocking maintainability advice.
|
|
25
29
|
|
|
@@ -30,6 +34,14 @@ Hard constraints:
|
|
|
30
34
|
|
|
31
35
|
Output (return exactly this):
|
|
32
36
|
- dimension: your assigned dimension
|
|
37
|
+
- passed: true only when there are no error findings
|
|
38
|
+
- implementation_fingerprint: copy unchanged from the task card
|
|
39
|
+
- quality_attempt: copy unchanged from the task card
|
|
40
|
+
- failure_classes: array of code-defect | test-defect | contract-ambiguity | environment for
|
|
41
|
+
blocking findings; empty when passed
|
|
42
|
+
- reviewer: your canonical Agent identity
|
|
43
|
+
- timestamp: current ISO timestamp with timezone
|
|
44
|
+
- repo_id and source_task_id: copy unchanged when present in the task card
|
|
33
45
|
- findings: array of {file, line, issue, severity} (severity: info | warning | error)
|
|
34
46
|
- suggestion: optional fix direction per finding
|
|
35
47
|
"""
|
|
@@ -16,12 +16,21 @@ What to do:
|
|
|
16
16
|
- Capture the real exit status and output.
|
|
17
17
|
|
|
18
18
|
Hard constraints:
|
|
19
|
-
- Run only the requested check. Do not fix code, run other checks, or edit files.
|
|
19
|
+
- Run only the requested check. Do not fix code, run other checks, or edit files. Keep the exact
|
|
20
|
+
task-card candidate fingerprints; never combine another candidate's output.
|
|
21
|
+
- Distinguish environment/tooling failures from code or test failures in failures.
|
|
20
22
|
- Do not call any Skill tool. Do not make stage decisions.
|
|
21
23
|
|
|
22
24
|
Output (return exactly this):
|
|
23
|
-
- check_type: lint | typecheck | test | build
|
|
25
|
+
- check_type: lint | typecheck | test | build | coverage
|
|
26
|
+
- check: copy unchanged from the task card
|
|
27
|
+
- command: the exact command that was run
|
|
24
28
|
- passed: true | false (from the real exit status)
|
|
29
|
+
- quality_attempt: copy unchanged from the task card
|
|
30
|
+
- failure_classes: array of code-defect | test-defect | contract-ambiguity | environment;
|
|
31
|
+
empty when passed
|
|
32
|
+
- timestamp: current ISO timestamp with timezone
|
|
33
|
+
- repo_id and source_task_id: copy unchanged when present in the task card
|
|
25
34
|
- failures: array of failure messages (empty if passed)
|
|
26
35
|
- command_output: the relevant tail of stdout/stderr
|
|
27
36
|
- implementation_fingerprint: copy unchanged from the task card
|
|
@@ -210,7 +210,7 @@ agent must be able to see what was generated and on what evidence.
|
|
|
210
210
|
- Every claim grounded in observed evidence — file paths and configs you actually read.
|
|
211
211
|
No filler like "follow best practices".
|
|
212
212
|
- SOUL stays short. RULES and ABSTRACT run as long as the evidence supports, in named
|
|
213
|
-
sections. TEST_STRATEGY must be concrete enough that
|
|
213
|
+
sections. TEST_STRATEGY must be concrete enough that QUALITY's Verification Gate can derive runnable
|
|
214
214
|
commands from it.
|
|
215
215
|
|
|
216
216
|
## Boundaries
|
|
@@ -42,23 +42,27 @@ analysis, workflow operation). The CLI never analyzes the project.
|
|
|
42
42
|
|
|
43
43
|
## Workflow state machine
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
`INIT → ANALYSIS → IMPLEMENT →
|
|
45
|
+
5 work stages + 2 terminals, owned by ec-workflow:
|
|
46
|
+
`INIT → ANALYSIS → IMPLEMENT → QUALITY → MEMORY → COMPLETE`, plus `CLOSED`
|
|
47
47
|
(user abort, no memory flow). INIT → ANALYSIS and completed MEMORY → COMPLETE are restricted
|
|
48
|
-
automatic edges.
|
|
49
|
-
|
|
50
|
-
task memory. Approval mode controls non-mechanical edge waiting: approve confirms each edge,
|
|
48
|
+
automatic edges. Pure read-only conversation stays Ready and creates no task; repository writes,
|
|
49
|
+
including documentation and configuration, use the full graph. Approval mode controls edge waiting: approve confirms each edge,
|
|
51
50
|
guard confirms two critical gates, confirm waits only at ANALYSIS -> IMPLEMENT, and auto
|
|
52
|
-
advances every legal edge after mechanical gates. After green
|
|
51
|
+
advances every legal edge after mechanical gates. After green QUALITY, Harness freezes an
|
|
53
52
|
acceptance checkpoint. A later code diff temporarily pauses every mode so the exact digest can be
|
|
54
53
|
accepted; unchanged `confirm`/`auto` tasks remain automatic.
|
|
55
54
|
Workflow mode is independently configured as adaptive/fast/standard/strict; ANALYSIS freezes
|
|
56
|
-
adaptive to a concrete mode, and every
|
|
57
|
-
bound to the final implementation fingerprint
|
|
55
|
+
adaptive to a concrete mode, and every mutation task still enters QUALITY. Its Review Gate is
|
|
56
|
+
bound to the final implementation fingerprint; Verification Gate evidence is bound to implementation
|
|
58
57
|
and config fingerprints, and an accepted post-checkpoint diff records its authorization plus
|
|
59
|
-
carry-forward/targeted/waived policy without forcing a second
|
|
58
|
+
carry-forward/targeted/waived policy without forcing a second review. MEMORY keeps the conditional
|
|
60
59
|
long-memory threshold gate.
|
|
61
60
|
|
|
61
|
+
`ec-lite` is an explicit session mode outside this graph. It offers one compact proposal and user
|
|
62
|
+
confirmation before a minimal mutation, creates no task/QUALITY/MEMORY artifacts, and remains on
|
|
63
|
+
until the user invokes it again. If a task is active, the user chooses whether to cancel startup,
|
|
64
|
+
close the task, or clear only the session task pointer before Lite starts.
|
|
65
|
+
|
|
62
66
|
Java TDD is a third independent, default-off control managed by `ec-config`. Session overrides
|
|
63
67
|
project configuration; ANALYSIS freezes enabled state and the 1..100 changed-line threshold
|
|
64
68
|
(default 90) on entry to IMPLEMENT. Disabled TDD changes no ordinary workflow test depth. Enabled
|
|
@@ -82,7 +86,7 @@ stage in `task.json`; no data is lost. Each task folder is self-contained.
|
|
|
82
86
|
Each task is a folder. `task.json` is metadata, including the current stage, workflow proposal,
|
|
83
87
|
frozen concrete mode, and any `pending_transition`; `dev-spec.md` is the human-readable plan;
|
|
84
88
|
`execution.jsonl` is an append-only plan-and-log (one `plan` record, then `dispatch`/`result`
|
|
85
|
-
/`review`/`verify`/`acceptance`/`handoff` records). Because plan and log live on disk, not in an agent's
|
|
89
|
+
/`quality`/`review`/`verify`/`acceptance`/`handoff` records). Because plan and log live on disk, not in an agent's
|
|
86
90
|
context window, a task survives session end and agent switches with zero information loss.
|
|
87
91
|
|
|
88
92
|
## Canonical Spec integration
|
|
@@ -103,7 +107,7 @@ keeps detailed evidence locally and projects cross-application Task/Step/depende
|
|
|
103
107
|
`EDS:EXECUTION` through one CAS/idempotent writer. Static changes use revision + READY +
|
|
104
108
|
`sync-spec-design`; agents never hand-edit the machine ledger. Explicit external locators are
|
|
105
109
|
allowed and rebind only by exact Canonical identity. Source tasks stay `implemented` after local
|
|
106
|
-
checks and become `verified` only when
|
|
110
|
+
checks and become `verified` only when QUALITY -> MEMORY is applied under explicit or
|
|
107
111
|
standing approval-mode authorization; the shared event includes the acceptance digest.
|
|
108
112
|
|
|
109
113
|
## Memory system
|
|
@@ -31,7 +31,7 @@ that a bounded task might be complicated.
|
|
|
31
31
|
For a task with `task.json.spec_source`, re-run `inspect-dev-spec` against the stored source, exact
|
|
32
32
|
`selected_spec_tasks`, and only their stored `task.repo_paths` bindings. Schema, Spec ID, design
|
|
33
33
|
revision, and `design_sha256` must still match. A changed `document_sha256` with the same design is
|
|
34
|
-
normal shared progress; refresh `execution_revision` without invalidating plan/
|
|
34
|
+
normal shared progress; refresh `execution_revision` without invalidating plan/QUALITY
|
|
35
35
|
evidence. An execution revision rollback is blocking. Then call the selector once for the exact
|
|
36
36
|
selection:
|
|
37
37
|
|
|
@@ -156,9 +156,10 @@ these markers mechanically.
|
|
|
156
156
|
Prefer one coherent unit over artificial file-level splitting. Do not split a class or method by
|
|
157
157
|
line count, or create many one-use helpers, merely to make the plan look modular. Extract only a
|
|
158
158
|
clear semantic boundary, reuse point, or independently testable responsibility. Use parallel only
|
|
159
|
-
for truly independent write scopes. Better unit contracts reduce later
|
|
159
|
+
for truly independent write scopes. Better unit contracts reduce later QUALITY rework.
|
|
160
160
|
|
|
161
|
-
|
|
161
|
+
Every Harness task is a repository-mutation task and requires `test-strategy.md`. Pure read-only
|
|
162
|
+
conversation never enters ANALYSIS and creates no task.
|
|
162
163
|
|
|
163
164
|
## Optional Java TDD analysis
|
|
164
165
|
|
|
@@ -221,15 +222,15 @@ self-reported floor. The state API rechecks the floor when the proposal is saved
|
|
|
221
222
|
|
|
222
223
|
The calculation is intentionally Standard-centered:
|
|
223
224
|
|
|
224
|
-
- `fast`:
|
|
225
|
+
- `fast`: up to three coherent low-risk units in one actually modified repository, at most eight
|
|
225
226
|
changed files, no explicit high-risk signal, and no public or cross-repository contract impact.
|
|
226
227
|
Small parameter changes, bounded field/mapping edits, and a few ordinary model files should
|
|
227
228
|
normally remain Fast.
|
|
228
|
-
- `standard`: the default for ordinary business work.
|
|
229
|
-
work, actual but contained multi-repository changes, broad low-risk work,
|
|
230
|
-
work remain Standard.
|
|
229
|
+
- `standard`: the default for ordinary business work. Four or more units, more than eight files,
|
|
230
|
+
bounded compatibility work, actual but contained multi-repository changes, broad low-risk work,
|
|
231
|
+
and bounded high-risk work remain Standard.
|
|
231
232
|
- `strict`: requires both an explicit high-risk signal and concrete complexity/blast-radius
|
|
232
|
-
evidence. Complexity means actual multi-repository edits, at least
|
|
233
|
+
evidence. Complexity means actual multi-repository edits, at least five units, at least fifteen
|
|
233
234
|
changed files, or a public/cross-repository contract. Parallel execution is a Standard signal
|
|
234
235
|
by itself. Generic domain words in a risk description, title, file path, Spec repository
|
|
235
236
|
catalog, or unselected task are never sufficient evidence of high risk.
|
|
@@ -34,9 +34,9 @@ task freezes its effective TDD values when ANALYSIS advances to IMPLEMENT; later
|
|
|
34
34
|
changes affect future tasks and ANALYSIS only.
|
|
35
35
|
|
|
36
36
|
Approval semantics stay independent from verification depth: `approve` waits at each
|
|
37
|
-
non-mechanical edge, `guard` waits at ANALYSIS -> IMPLEMENT and
|
|
37
|
+
non-mechanical edge, `guard` waits at ANALYSIS -> IMPLEMENT and QUALITY -> MEMORY, `confirm`
|
|
38
38
|
waits only for the plan, and `auto` advances legal green edges immediately. Every mode temporarily
|
|
39
|
-
pauses only when code changes after the frozen
|
|
39
|
+
pauses only when code changes after the frozen QUALITY checkpoint, because the user must see
|
|
40
40
|
and accept that exact new diff; this exception does not convert `auto` into `guard`.
|
|
41
41
|
|
|
42
42
|
## Project configuration
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ec-implementing
|
|
3
|
-
description: IMPLEMENT-stage skill. Executes the confirmed plan with workflow-mode-aware orchestration, strict scope control,
|
|
3
|
+
description: IMPLEMENT-stage skill. Executes the confirmed plan with workflow-mode-aware orchestration, strict scope control, minimal diffs, and structured execution evidence.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# ec-implementing — execute the confirmed plan
|
|
@@ -9,9 +9,10 @@ Use only after ANALYSIS has frozen `task.json.workflow_mode` to `fast`, `standar
|
|
|
9
9
|
`strict`. Read `dev-spec.md`, the latest `plan` record in `execution.jsonl`, relevant RULES
|
|
10
10
|
and ABSTRACT sections, and `test-strategy.md` for code tasks.
|
|
11
11
|
|
|
12
|
-
If frozen `task.tdd_enabled` is not `true`,
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
If frozen `task.tdd_enabled` is not `true`, IMPLEMENT writes production and planned test code but
|
|
13
|
+
does not run lint, typecheck, test, build, or coverage commands. Deterministic execution belongs
|
|
14
|
+
to QUALITY's Verification Gate. TDD is the only exception because RED/GREEN/REFACTOR commands are
|
|
15
|
+
part of the implementation method; current-fingerprint green evidence may be reused by QUALITY.
|
|
15
16
|
|
|
16
17
|
When frozen TDD is enabled, every feature/bug unit must capture a meaningful failing unit test
|
|
17
18
|
before production code (RED), the smallest passing implementation (GREEN), and a green refactor.
|
|
@@ -28,45 +29,49 @@ Communicate with the user in the user's language.
|
|
|
28
29
|
2. Preserve existing encoding and project comment conventions.
|
|
29
30
|
3. Each unit must carry `acceptance_criteria`, `test_points`, `contracts`, and `risks`.
|
|
30
31
|
Missing unit context is an analysis defect; do not make the implementer rediscover it.
|
|
31
|
-
4.
|
|
32
|
-
|
|
32
|
+
4. Do not execute quality commands in non-TDD IMPLEMENT. Preserve exact commands and test points
|
|
33
|
+
for the Verification Gate instead of duplicating them here.
|
|
33
34
|
5. Append `dispatch` and `result` records for every unit, including main-agent execution.
|
|
34
35
|
Main-agent execution uses `reason:"main-inline:<workflow_mode>"`.
|
|
35
|
-
6.
|
|
36
|
-
|
|
37
|
-
7. Read-only `doc` / `analysis` / `report` tasks remain `single` with `files:[]`, make no writes,
|
|
38
|
-
return a non-empty `deliverable`, then follow the mode-aware IMPLEMENT -> COMPLETE edge.
|
|
39
|
-
8. When a project template, local convention, or new source header uses author attribution, the
|
|
36
|
+
6. Every Harness task transitions from IMPLEMENT to QUALITY.
|
|
37
|
+
7. When a project template, local convention, or new source header uses author attribution, the
|
|
40
38
|
author value must be `<Current Agent Name> with Easy Coding`, for example
|
|
41
39
|
`Codex with Easy Coding`. `Current Agent Name` means the user-facing host Agent (for example,
|
|
42
40
|
Codex, Claude, or Qoder), never an implementation sub-agent role such as `ec-implementer`.
|
|
43
41
|
This value is display attribution only: never pass it to the workflow state API's `--agent`,
|
|
44
42
|
which accepts only `claude-code`, `codex`, or `qoder`. Never copy a previous human or Agent name
|
|
45
43
|
into newly authored code.
|
|
46
|
-
|
|
44
|
+
8. Every newly added field in a data-bearing model must have a meaningful field-level comment.
|
|
47
45
|
This includes new or extended entity/DO/DTO/VO/BO, request/response, configuration, and similar
|
|
48
|
-
model types.
|
|
46
|
+
model types. Document enum members and stable domain constants when the local style or
|
|
47
|
+
non-obvious semantics require it; do not extract a literal merely to create a documented name.
|
|
49
48
|
Describe the semantic meaning and, when relevant, units, format, allowed values, nullability,
|
|
50
49
|
default behavior, or compatibility constraints. A type-level comment does not replace comments
|
|
51
50
|
on its fields or members; do not add low-value comments to ordinary local variables.
|
|
52
|
-
|
|
51
|
+
9. Treat the task card's `Local Baseline` as the default implementation shape. Match the nearest
|
|
53
52
|
comparable code's naming, control flow, null/empty and error handling, layering, object model,
|
|
54
53
|
and extraction granularity unless correctness, security, an explicit requirement, or a hard
|
|
55
54
|
project rule requires a deviation. Do not add defensive null checks solely because they are a
|
|
56
55
|
generic best practice when the evidenced local contract intentionally omits them.
|
|
57
|
-
|
|
56
|
+
10. Implement the smallest coherent design. Do not add speculative abstractions, wrappers,
|
|
58
57
|
factories, layers, or extension points, and do not fragment one readable flow into many
|
|
59
58
|
single-use micro-methods. Extract code only for a clear semantic boundary, real reuse,
|
|
60
59
|
independent testability, or a material reduction in complexity.
|
|
61
|
-
|
|
60
|
+
11. Literals and magic values are allowed when they are obvious, local, and consistent with the
|
|
62
61
|
surrounding code. Introduce a constant for repeated use, stable domain/config/protocol
|
|
63
62
|
semantics, or an established project convention—not merely to hold the single return value of
|
|
64
63
|
a getter.
|
|
65
|
-
|
|
64
|
+
12. In a newly added core Java class, every method and field requires meaningful Javadoc. In an
|
|
66
65
|
existing core Java class, every added or materially modified method and field requires it.
|
|
67
66
|
Add focused inline comments to core or complex logic to explain intent, constraints, or
|
|
68
67
|
non-obvious tradeoffs. Do not mass-retrofit untouched legacy code, and for non-Java code
|
|
69
|
-
follow the language's doc-comment form plus the evidenced project convention.
|
|
68
|
+
follow the language's doc-comment form plus the evidenced project convention. Java Javadoc
|
|
69
|
+
must use a multiline `/** ... */` block; use `//` for an ordinary one-line logic note.
|
|
70
|
+
13. Apply the minimum-change rule to existing files. Do not reformat, rename, comment, reorder
|
|
71
|
+
imports, or refactor unrelated code. Revert formatter spillover outside the required diff;
|
|
72
|
+
report unrelated defects instead of fixing them without an approved scope change.
|
|
73
|
+
14. Use one blank line between coherent logic sections. Do not create noisy blank-line gaps or
|
|
74
|
+
compress unrelated steps into an unreadable block.
|
|
70
75
|
|
|
71
76
|
## Choose the execution owner
|
|
72
77
|
|
|
@@ -88,7 +93,7 @@ Communicate with the user in the user's language.
|
|
|
88
93
|
|
|
89
94
|
- Dispatch multi-unit or high-risk implementation to sub-agents using {{sub_agent_dispatch}}.
|
|
90
95
|
- For a truly indivisible unit, the main Agent may implement only when dispatch adds no
|
|
91
|
-
independence; record why and require independent
|
|
96
|
+
independence; record why and require independent Review Gate evidence in QUALITY.
|
|
92
97
|
- Process dependency levels in order. Platform spawn rule: {{platform_spawn_instruction}}
|
|
93
98
|
|
|
94
99
|
The main Agent owns orchestration, conflict resolution, evidence writing, and stage decisions.
|
|
@@ -107,7 +112,7 @@ Sub-agents never dispatch other sub-agents or read `.easy-coding` workflow asset
|
|
|
107
112
|
## Repository {repo_id + resolved repository root | current project}
|
|
108
113
|
## Source Steps {source_step_ids | NONE}
|
|
109
114
|
## Symbols {symbols | confirmed local symbols}
|
|
110
|
-
## Editable Scope {unit.files
|
|
115
|
+
## Editable Scope {unit.files}
|
|
111
116
|
## Acceptance {unit.acceptance_criteria}
|
|
112
117
|
## Test Points {unit.test_points and exact targeted commands}
|
|
113
118
|
## Contracts {inputs, outputs, invariants shared with other units}
|
|
@@ -118,7 +123,7 @@ Sub-agents never dispatch other sub-agents or read `.easy-coding` workflow asset
|
|
|
118
123
|
## Architecture {pre-digested ABSTRACT sections}
|
|
119
124
|
## Output
|
|
120
125
|
status:"completed", repo_id|null, source_task_id|null, changed_files[], summary,
|
|
121
|
-
|
|
126
|
+
checks:[], issues:[], needs_attention:[]
|
|
122
127
|
```
|
|
123
128
|
|
|
124
129
|
## Dispatch and result loop
|
|
@@ -134,15 +139,17 @@ deliverable|null, checks:[{command,passed,failures:[]}], issues:[], needs_attent
|
|
|
134
139
|
author value, the field/member/constant rules, and the core Java Javadoc rule above. Populate
|
|
135
140
|
`Local Baseline` from the Unit's analyzed evidence; sub-agents do not read this Skill.
|
|
136
141
|
2. Execute according to dependency order and selected owner.
|
|
137
|
-
3.
|
|
138
|
-
|
|
142
|
+
3. For non-TDD work, do not run tests; self-audit scope, contracts, TODOs, and introduced warnings.
|
|
143
|
+
For TDD, run only the lifecycle commands required by RED/GREEN/REFACTOR. Also audit new author
|
|
144
|
+
attributions and every new model field against
|
|
139
145
|
the comment requirements above, then check local-style deviations, unnecessary abstractions,
|
|
140
146
|
one-use constant extraction, and affected core Java Javadoc before recording success.
|
|
141
147
|
4. Append one `result` record. Only a successful unit uses `status:"completed"`; include
|
|
142
148
|
unresolved issues rather than hiding them, and do not advance while `issues` or
|
|
143
149
|
`needs_attention` is non-empty.
|
|
144
150
|
For Canonical-backed success, write each owned source Step `completed` through
|
|
145
|
-
`writeback-spec-step`, with
|
|
151
|
+
`writeback-spec-step`, with implementation evidence and a stable key. Canonical Test evidence
|
|
152
|
+
is written by QUALITY after deterministic verification, not fabricated during implementation.
|
|
146
153
|
After every source Step for that task is complete, write the task `implemented`. On failure,
|
|
147
154
|
write the affected Step `failed`; the shared writer moves its task to `blocked`. Local evidence
|
|
148
155
|
is appended first, shared projection second, and the returned acknowledgment last.
|
|
@@ -161,9 +168,7 @@ conversation overhead while keeping work observable.
|
|
|
161
168
|
|
|
162
169
|
## End state
|
|
163
170
|
|
|
164
|
-
-
|
|
165
|
-
IMPLEMENT -> REVIEW.
|
|
166
|
-
- Read-only task: output the full deliverable, then request or auto-apply IMPLEMENT -> COMPLETE.
|
|
171
|
+
- After all units are implemented, hand control to ec-workflow for IMPLEMENT -> QUALITY.
|
|
167
172
|
- New risk above the frozen mode: call `raise-workflow-mode`; modes may rise but never silently
|
|
168
173
|
fall after ANALYSIS.
|
|
169
174
|
|
|
@@ -171,12 +176,12 @@ conversation overhead while keeping work observable.
|
|
|
171
176
|
|
|
172
177
|
- [ ] Every changed file is in scope and keeps its encoding.
|
|
173
178
|
- [ ] Every unit has a dispatch/result pair and satisfied its acceptance criteria.
|
|
174
|
-
- [ ]
|
|
179
|
+
- [ ] Non-TDD quality commands were deferred; required TDD lifecycle commands have real evidence.
|
|
175
180
|
- [ ] Cross-unit contracts still match.
|
|
176
181
|
- [ ] The implementation follows the evidenced Local Baseline or records a required deviation.
|
|
177
182
|
- [ ] No speculative layer, fragmented micro-method set, or single-use getter constant was added.
|
|
178
183
|
- [ ] New author attributions use the user-facing host `<Current Agent Name> with Easy Coding`.
|
|
179
|
-
- [ ] Every new model field
|
|
184
|
+
- [ ] Every new model field and every non-obvious documented member follows the local comment rule.
|
|
180
185
|
- [ ] Every method/field in a new core Java class, and every added or materially modified one in
|
|
181
186
|
an existing core Java class, has Javadoc.
|
|
182
|
-
- [ ]
|
|
187
|
+
- [ ] The task enters QUALITY, regardless of workflow mode.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ec-lite
|
|
3
|
+
description: Toggle and operate Easy Coding Lite Direct mode for explicit minimal repository changes without task, QUALITY, or MEMORY artifacts.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ec-lite — explicit direct mode
|
|
7
|
+
|
|
8
|
+
`ec-lite` is controlled only by the user. Never enable it automatically from task size, Workflow
|
|
9
|
+
Mode, or inferred intent. Communicate in the user's language.
|
|
10
|
+
|
|
11
|
+
## Toggle
|
|
12
|
+
|
|
13
|
+
Read the current snapshot. If Lite is enabled, a repeated explicit invocation exits it:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py disable-lite \
|
|
17
|
+
--agent <agent-id> --session-file <P>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
If Lite is disabled, call `enable-lite` without a policy. When there is no active task it enables
|
|
21
|
+
immediately. When the API returns `lite-active-task-decision-required`, show the task ID, title,
|
|
22
|
+
and stage, then use the native choice UI with exactly these actions:
|
|
23
|
+
|
|
24
|
+
1. Cancel Lite startup: call `enable-lite --active-task-policy cancel`.
|
|
25
|
+
2. Close the task and start Lite: call
|
|
26
|
+
`enable-lite --active-task-policy close --expected-task-id <shown-id>`; this preserves task
|
|
27
|
+
files/history and records `user-switched-to-lite`.
|
|
28
|
+
3. Ignore the original task and start Lite: call
|
|
29
|
+
`enable-lite --active-task-policy ignore --expected-task-id <shown-id>`; this clears only the
|
|
30
|
+
current session task pointer and does not change the task or Canonical state.
|
|
31
|
+
|
|
32
|
+
Never select a branch for the user. If the task ID changed while waiting, show the new decision
|
|
33
|
+
instead of applying the old choice. Legacy `confirm_mode:lite` is only a migration alias for Guard
|
|
34
|
+
+ Fast and is unrelated to Lite Direct.
|
|
35
|
+
|
|
36
|
+
## Lite behavior
|
|
37
|
+
|
|
38
|
+
The status line must remain `Lite Direct` with `No Task / Quality / Memory`. Do not create task
|
|
39
|
+
folders, Dev-Specs, plans, test strategies, execution records, QUALITY evidence, or memory.
|
|
40
|
+
|
|
41
|
+
Pure read-only or ambiguous requests stay `Lite Direct · Ready` and use ordinary conversation.
|
|
42
|
+
For an explicit repository mutation:
|
|
43
|
+
|
|
44
|
+
1. Read only relevant EC rules, architecture, memory, nearest comparable code, and Git diff.
|
|
45
|
+
2. Present one compact proposal: behavior, exact target files, minimum-change boundary, and any
|
|
46
|
+
necessary risk. Do not edit yet.
|
|
47
|
+
3. Record the proposal and use its returned digest:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
{{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py set-lite-proposal \
|
|
51
|
+
--summary "<safe compact summary>" [--target-file <path>]... \
|
|
52
|
+
--agent <agent-id> --session-file <P>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
4. Ask the user to confirm the exact proposal. On confirmation call
|
|
56
|
+
`confirm-lite-proposal --digest <digest>`. The state API captures the current Git baseline when
|
|
57
|
+
the proposal is created and includes it in the digest; each proposal carries a fresh one-time
|
|
58
|
+
nonce, so even an identical replacement has a new digest and a confirmed digest cannot be
|
|
59
|
+
replayed or used with a rewritten baseline. Confirmation also requires the current Git state
|
|
60
|
+
to still match the captured baseline; otherwise replace and re-present the proposal;
|
|
61
|
+
target files must be 1..50 safe project-relative files in the current project repository.
|
|
62
|
+
Harness-owned `.easy-coding/sessions/` metadata is excluded from business change detection and
|
|
63
|
+
cannot be a target. Then implement only those files.
|
|
64
|
+
5. If scope expands, stop, replace the proposal, and confirm again.
|
|
65
|
+
6. Apply local style, core Java Javadoc, logical blank lines, and minimum modification exactly as
|
|
66
|
+
normal Easy Coding. Do not run tests by default; run only a command explicitly requested by
|
|
67
|
+
the user or mandated by a project/global hard rule.
|
|
68
|
+
7. Report changed files and any command actually run, then call
|
|
69
|
+
`complete-lite-proposal --digest <digest>`. Completion fails if no confirmed target changed,
|
|
70
|
+
another file changed after confirmation, or Git HEAD moved. Re-present the proposal rather
|
|
71
|
+
than bypassing that result. Lite remains enabled for the next request.
|
|
72
|
+
|
|
73
|
+
Lite intentionally omits TDD, QUALITY, MEMORY, task history, and completion transitions. Use a
|
|
74
|
+
normal Fast task instead when the user wants those guarantees.
|
|
@@ -25,6 +25,9 @@ After the command succeeds:
|
|
|
25
25
|
skills, and every other hook.
|
|
26
26
|
- Do not clear `current_task`, delete a pending transition, or modify task state. The task is
|
|
27
27
|
suspended intact and can resume after restoring Easy Coding or in a new session.
|
|
28
|
+
- Preserve `lite_mode` and any exact Lite proposal while bypassed. No-Harness has display and
|
|
29
|
+
routing priority; restoring Easy Coding resumes the same Lite state until the user explicitly
|
|
30
|
+
exits it through `ec-lite`.
|
|
28
31
|
|
|
29
32
|
If the invocation contains no request beyond enabling the bypass, briefly confirm that native
|
|
30
33
|
mode is active for the current session.
|