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.
Files changed (34) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +32 -25
  3. package/dist/cli.js +272 -37
  4. package/dist/cli.js.map +1 -1
  5. package/package.json +1 -1
  6. package/templates/claude/agents/ec-implementer.md +7 -8
  7. package/templates/claude/agents/ec-reviewer.md +14 -2
  8. package/templates/claude/agents/ec-verifier.md +11 -2
  9. package/templates/codex/agents/ec-implementer.toml +7 -8
  10. package/templates/codex/agents/ec-reviewer.toml +14 -2
  11. package/templates/codex/agents/ec-verifier.toml +11 -2
  12. package/templates/common/bundled-skills/ec-init/SKILL.md +1 -1
  13. package/templates/common/bundled-skills/ec-meta/references/local-architecture/README.md +15 -11
  14. package/templates/common/skills/ec-analysis/SKILL.md +9 -8
  15. package/templates/common/skills/ec-config/SKILL.md +2 -2
  16. package/templates/common/skills/ec-implementing/SKILL.md +35 -30
  17. package/templates/common/skills/ec-lite/SKILL.md +74 -0
  18. package/templates/common/skills/ec-no-harness/SKILL.md +3 -0
  19. package/templates/common/skills/ec-quality/SKILL.md +153 -0
  20. package/templates/common/skills/ec-task-management/SKILL.md +9 -5
  21. package/templates/common/skills/ec-tdd-init/SKILL.md +5 -4
  22. package/templates/common/skills/ec-workflow/SKILL.md +22 -29
  23. package/templates/main-constraint/AGENTS.md.tpl +19 -13
  24. package/templates/main-constraint/CLAUDE.md.tpl +19 -13
  25. package/templates/qoder/agents/ec-implementer.md +7 -8
  26. package/templates/qoder/agents/ec-reviewer.md +14 -2
  27. package/templates/qoder/agents/ec-verifier.md +11 -2
  28. package/templates/runtime/templates/dev-spec-skeleton.md +2 -2
  29. package/templates/shared-hooks/easy_coding_state.py +2793 -318
  30. package/templates/claude/agents/ec-fixer.md +0 -37
  31. package/templates/codex/agents/ec-fixer.toml +0 -26
  32. package/templates/common/skills/ec-reviewing/SKILL.md +0 -109
  33. package/templates/common/skills/ec-verification/SKILL.md +0 -177
  34. package/templates/qoder/agents/ec-fixer.md +0 -37
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-coding-harness",
3
- "version": "0.10.0-beta.9",
3
+ "version": "1.0.0-beta.0",
4
4
  "description": "CLI scaffold for installing Easy Coding harness files into agent-native directories.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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/member/constant rules as mandatory.
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; comment complex logic
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
- - Run the exact targeted checks requested by the card and report their real outcome.
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 with pass/fail outcomes
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 modified
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/member/constant rules as mandatory.
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; comment complex logic
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
- - Run the exact targeted checks requested by the card and report their real outcome.
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 with pass/fail outcomes
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 modified
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 ec-verification can derive runnable
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
- 6 work stages + 2 terminals, owned by ec-workflow:
46
- `INIT → ANALYSIS → IMPLEMENT → REVIEWVERIFICATION → MEMORY → COMPLETE`, plus `CLOSED`
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. 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. 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 VERIFICATION, Harness freezes an
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 new code task still enters REVIEW. REVIEW evidence is
57
- bound to the final implementation fingerprint, VERIFICATION evidence is bound to implementation
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 REVIEW. MEMORY keeps the conditional
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 VERIFICATION -> MEMORY is applied under explicit or
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/review/verify
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 REVIEW rework.
159
+ for truly independent write scopes. Better unit contracts reduce later QUALITY rework.
160
160
 
161
- Code tasks require `test-strategy.md`; explicit `doc`, `analysis`, and `report` tasks do not.
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`: one coherent, non-parallel unit in one actually modified repository, at most five
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. Multiple units/files, bounded compatibility
229
- work, actual but contained multi-repository changes, broad low-risk work, and bounded high-risk
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 four units, at least ten
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 VERIFICATION -> MEMORY, `confirm`
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 VERIFICATION checkpoint, because the user must see
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, shift-left tests, and structured execution evidence.
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`, preserve the existing shift-left behavior exactly;
13
- do not load the Java coverage tool, require RED/GREEN/REFACTOR, inspect CI, or run extra test
14
- commands. TDD is an independent opt-in mode, not an implicit consequence of strict workflow.
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. Run the unit's cheapest meaningful test immediately after its implementation. Do not wait
32
- until VERIFICATION to discover local contract mistakes.
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. A code task never transitions directly from IMPLEMENT to VERIFICATION. Every new code task
36
- enters REVIEW.
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
- 9. Every newly added field in a data-bearing model must have a meaningful field-level comment.
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. Every new enum member and every new declared constant requires the same treatment.
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
- 10. Treat the task card's `Local Baseline` as the default implementation shape. Match the nearest
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
- 11. Implement the smallest coherent design. Do not add speculative abstractions, wrappers,
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
- 12. Literals and magic values are allowed when they are obvious, local, and consistent with the
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
- 13. In a newly added core Java class, every method and field requires meaningful Javadoc. In an
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 REVIEW later.
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 | NONE — read-only}
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
- deliverable|null, checks:[{command,passed,failures:[]}], issues:[], needs_attention:[]
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. Run targeted unit tests and self-audit scope, contracts, TODOs, and introduced warnings.
138
- Also audit new author attributions and every new model field, enum member, and constant against
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 passed evidence for every bound Canonical Test ID and a stable key.
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
- - Code task: after all units and targeted checks pass, hand control to ec-workflow for
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
- - [ ] Targeted tests ran or a concrete blocker is recorded.
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, enum member, and constant has a meaningful field-level comment.
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
- - [ ] Code tasks enter REVIEW, regardless of workflow mode.
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.