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
@@ -1,37 +0,0 @@
1
- ---
2
- name: ec-fixer
3
- model: sonnet
4
- description: Easy Coding fix sub-agent. Applies targeted fixes to specific issues identified during review. Returns structured results with changed files.
5
- ---
6
-
7
- You are an Easy Coding fix sub-agent. You receive one semantic-unit fix card listing related issues
8
- (with file:line locations) and apply the fixes. Your reply content IS the return value,
9
- not a message to a human.
10
-
11
- ## Hard constraints
12
-
13
- - Fix ONLY the related issues listed in the semantic-unit card. Do not refactor unrelated code.
14
- - Preserve acceptance criteria and cross-unit contracts; report if the fix would change them.
15
- - Modify ONLY the files listed in the fix card's scope.
16
- - Do not call any Skill tool.
17
- - Do not read `.claude/skills/`, `.agents/skills/`, or any `.easy-coding/` file.
18
- - Make no workflow stage-transition decisions.
19
- - Preserve file encoding.
20
-
21
- ## Output (return exactly this structure)
22
-
23
- ```json
24
- {
25
- "changed_files": ["file1.ts", "file2.ts"],
26
- "fixes_applied": [
27
- {"file": "file1.ts", "line": 42, "original_issue": "...", "fix_description": "..."}
28
- ],
29
- "issues": [],
30
- "needs_attention": []
31
- }
32
- ```
33
-
34
- - `changed_files`: files you actually modified
35
- - `fixes_applied`: what you fixed with file:line reference
36
- - `issues`: problems you hit that prevented a fix (empty if none)
37
- - `needs_attention`: anything requiring a design decision that should escalate to the user
@@ -1,26 +0,0 @@
1
- [agent]
2
- name = "ec-fixer"
3
- model = "sonnet"
4
- description = "Easy Coding fix sub-agent. Applies targeted fixes to specific issues identified during review."
5
- sandbox = "workspace-write"
6
-
7
- [agent.instructions]
8
- text = """
9
- You are an Easy Coding fix sub-agent. You receive one semantic-unit fix card listing related issues
10
- (with file:line locations) and apply the fixes. Your reply content IS the return value.
11
-
12
- Hard constraints:
13
- - Fix ONLY the related issues listed in the semantic-unit card. No unrelated refactoring.
14
- - Preserve acceptance criteria and cross-unit contracts; report if the fix would change them.
15
- - Modify ONLY the files listed in the fix card's scope.
16
- - Do not call any Skill tool.
17
- - Do not read .agents/skills/ or any .easy-coding/ file.
18
- - Make no workflow stage-transition decisions.
19
- - Preserve file encoding.
20
-
21
- Output structure (return as JSON):
22
- - changed_files: files you modified
23
- - fixes_applied: [{file, line, original_issue, fix_description}]
24
- - issues: problems preventing a fix (empty if none)
25
- - needs_attention: design decisions needing user escalation (empty if none)
26
- """
@@ -1,109 +0,0 @@
1
- ---
2
- name: ec-reviewing
3
- description: REVIEW-stage skill. Performs workflow-mode-aware review against the final implementation fingerprint, blocks only actionable acceptance risks, and records reusable evidence.
4
- ---
5
-
6
- # ec-reviewing — proportional but mandatory review
7
-
8
- Every new code task enters REVIEW. Read-only tasks do not. Obtain the current fingerprints:
9
-
10
- ```bash
11
- {{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py evidence-fingerprints --agent <agent-id> --session-file <P>
12
- ```
13
-
14
- Review the final diff against `dev-spec.md`, RULES, unit acceptance criteria, tests, contracts,
15
- the Unit's Local Baseline, and obvious security risks. Every finding cites `file:line`.
16
-
17
- Review local fit before recommending generic cleanup. Flag an implementation when it departs from
18
- the nearest comparable naming, control flow, null/error handling, layering, modeling, or method
19
- granularity without a correctness, security, requirement, or hard-rule reason. Also flag
20
- speculative layers, fragmented one-use micro-methods, constants created only for one getter
21
- return, and missing Javadoc in core Java code: check every method/field in a new core class and
22
- each added or materially modified one in an existing core class. Do not demand defensive null
23
- checks, abstraction, constant extraction, or legacy-wide comment retrofits merely because they
24
- are generic best practices. A violation of an explicit task-card coding/comment contract is a
25
- contract defect, not optional stylistic advice.
26
-
27
- For Canonical-backed tasks, group evidence by `repo_id` and `source_task_id`. Every selected
28
- Spec task needs an implementation result and source test evidence; file references remain
29
- repo-relative within the owning repository. Missing or expanded source change/step coverage is
30
- a blocking correctness finding. Every Canonical review record includes its `repo_id` and
31
- `source_task_id`; emit at least one current-fingerprint record per selected task and required
32
- review dimension. A global record without source ownership cannot satisfy the gate.
33
-
34
- When frozen TDD is enabled, add a passed review dimension named exactly `tdd` for each source
35
- task. Review whether RED/GREEN/REFACTOR (or characterization GREEN for pure refactors) is genuine,
36
- tests exercise changed behavior and boundaries, mocks do not merely mirror implementation, and
37
- the local unit-test command genuinely passes while the changed-line coverage command uses the
38
- frozen baseline and threshold. Generated CI configuration may be reviewed when it changed, but
39
- remote CI status is never a review or acceptance dependency. When TDD is off, do not add this
40
- dimension or raise the ordinary review depth.
41
-
42
- ## Depth by workflow mode
43
-
44
- - `fast`: main Agent performs one final-diff self-review across correctness, scope, tests, and
45
- obvious security risks.
46
- - `standard`: dispatch one independent focused reviewer covering correctness, contract
47
- completeness, tests, and compliance.
48
- - `strict`: dispatch at least two independent dimensions (correctness/contracts and
49
- compliance/tests/security) in parallel via {{sub_agent_dispatch}}.
50
-
51
- Platform spawn rule: {{platform_spawn_instruction}}
52
-
53
- Reducing reviewer count must not reduce checked dimensions; it only combines them into fewer
54
- passes when the change is low risk.
55
-
56
- ## Severity and verdict
57
-
58
- - `error`: demonstrably breaks an acceptance criterion, contract, security boundary, or build.
59
- Blocks transition.
60
- - `warning`: credible risk. Blocks only when it can affect a confirmed acceptance criterion.
61
- - `info`: maintainability suggestion or optional improvement. Never blocks the current task.
62
-
63
- Verdict:
64
-
65
- - `accept`: no blocking finding.
66
- - `fix`: in-scope implementation defect.
67
- - `replan`: design/scope/contract is wrong.
68
- - `blocked`: missing external input or environment.
69
-
70
- ## Fix loop
71
-
72
- 1. Merge findings by semantic unit, not by file or reviewer.
73
- 2. Prefer returning the bundle to the original implementation context.
74
- 3. Run targeted checks for the affected unit, then re-review only the affected dimensions.
75
- 4. Expand to full review only if the fix changes scope, public contracts, or shared behavior.
76
- 5. If the same issue class survives two consecutive rounds, stop blind repair and return
77
- `replan` or `blocked` with evidence.
78
-
79
- In-scope defects are fixed automatically. Ask the user only for a new design choice, changed
80
- public contract, or contradiction with a confirmed decision.
81
-
82
- For Canonical-backed review, append the local review record first. Any blocking finding then
83
- writes the owning source task `blocked` through `writeback-spec-task`, referencing the local
84
- record. A passed review does not change shared task status. A `replan` verdict returns to ANALYSIS;
85
- confirmed static Spec changes use revision + READY + `sync-spec-design` rather than edits to the
86
- derived plan or machine execution block.
87
-
88
- ## Evidence record
89
-
90
- Append one final record per executed dimension for the current implementation fingerprint.
91
- Fast and Standard normally use `combined`; Strict uses at least two distinct dimension names:
92
-
93
- ```json
94
- {
95
- "type": "review",
96
- "dimension": "correctness-contracts",
97
- "passed": true,
98
- "reviewer": "main-or-independent-agent",
99
- "implementation_fingerprint": "<state-api value>",
100
- "timestamp": "<ISO-8601>",
101
- "repo_id": "<canonical repo-id; omit for non-Canonical tasks>",
102
- "source_task_id": "<canonical task-id; omit for non-Canonical tasks>",
103
- "findings": []
104
- }
105
- ```
106
-
107
- The state API rejects REVIEW -> VERIFICATION when any latest dimension evidence is missing,
108
- stale, failed, or contains an `error`. Strict also requires at least two passed dimensions. A
109
- code change after review produces a new fingerprint and invalidates all prior dimensions.
@@ -1,177 +0,0 @@
1
- ---
2
- name: ec-verification
3
- description: VERIFICATION-stage skill. Runs the minimum sufficient final gate for the frozen workflow mode and binds green evidence to implementation and config fingerprints.
4
- ---
5
-
6
- # ec-verification — fingerprinted final evidence
7
-
8
- Read-only tasks never enter this stage. Obtain fresh fingerprints before running checks:
9
-
10
- ```bash
11
- {{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py evidence-fingerprints --agent <agent-id> --session-file <P>
12
- ```
13
-
14
- ## Iron laws
15
-
16
- - No completion claim without executed verification evidence.
17
- - Evidence is reusable only while both returned fingerprints remain unchanged.
18
- - Relevant code or config changes invalidate old evidence automatically unless the exact
19
- post-verification code diff is explicitly accepted under the checkpoint protocol below.
20
- - Failed or missing evidence never becomes acceptance because of approval mode.
21
-
22
- ## Verification depth
23
-
24
- - `fast`: run the smallest command(s) that directly cover changed behavior plus required
25
- regression tests.
26
- - `standard`: run impacted lint/typecheck/test scopes and every must-test item.
27
- - `strict`: run the project's full applicable lint, typecheck, test, and build gates.
28
-
29
- These rules remain unchanged when frozen TDD is off: do not discover JaCoCo reports, run the
30
- coverage tool, inspect GitLab, or add a coverage record. The explicit `type=tdd-init` task is an
31
- infrastructure exception: run its planned build/CI syntax checks and readiness tool, but do not
32
- measure repository-wide coverage or append TDD coverage evidence for unchanged production code.
33
-
34
- When frozen TDD is on, first run the planned local Java unit command and generate JaCoCo XML,
35
- then run the deterministic local acceptance gate:
36
-
37
- ```bash
38
- python3 .easy-coding/tools/easy_coding_java_coverage.py check \
39
- --base <task.tdd_baselines[repo-id-or-project]> \
40
- --threshold <task.tdd_coverage_threshold> [--report <jacoco.xml>]...
41
- ```
42
-
43
- The tool measures covered added/modified production Java executable lines only. Deleted,
44
- comment, blank, import, and test-source lines are excluded by diff/JaCoCo intersection. Missing
45
- or ambiguous source files and reports older than their modified source fail; zero modified
46
- executable lines is explicit N/A. Always regenerate JaCoCo XML after the final source change.
47
- Never substitute `HEAD`, a mutable ref, project defaults, or current session settings for the
48
- task-frozen baseline SHA and threshold. `ec-tdd-init` still generates a GitLab job that can run
49
- the same tool, but remote pipeline execution and status are outside Harness acceptance. Never
50
- request an intermediate commit or push merely to obtain CI evidence.
51
-
52
- The main Agent may run commands inline. Dispatch verifier sub-agents only when checks are
53
- independent and parallel execution materially saves time or isolates specialist environments.
54
- Platform spawn rule: {{platform_spawn_instruction}}
55
-
56
- ## Evidence
57
-
58
- Append one record per executed check:
59
-
60
- ```json
61
- {
62
- "type": "verify",
63
- "check": "test",
64
- "check_type": "test",
65
- "command": "npm test",
66
- "passed": true,
67
- "implementation_fingerprint": "<state-api value>",
68
- "config_fingerprint": "<state-api value>",
69
- "timestamp": "<ISO-8601>",
70
- "repo_id": "<canonical repo-id; omit for non-Canonical tasks>",
71
- "source_task_id": "<canonical task-id; omit for non-Canonical tasks>"
72
- }
73
- ```
74
-
75
- `check_type` is one of `lint`, `typecheck`, `test`, `build`, or (TDD only) `coverage`. In `strict`, append current
76
- evidence for all four types. When a type genuinely does not apply, record `applicable: false`
77
- and a non-empty `not_applicable_reason`; it does not count as the required applicable executed
78
- check, and must not be represented by an invented successful command.
79
-
80
- Record failures in `failures[]`. If any current-fingerprint record fails, return to IMPLEMENT;
81
- do not append a later synthetic pass without rerunning the failed command. For a Canonical-backed
82
- failure, append the local verify record first, then write the owning source task `blocked` with a
83
- concise reference to that record. The repair transition automatically reopens blocked source tasks
84
- only; unaffected implemented tasks retain their latest shared conclusion.
85
-
86
- ## Coverage and acceptance
87
-
88
- For TDD coverage, copy the tool output into `coverage`: `baseline_sha`, `covered_lines`,
89
- `total_lines`, `percentage`, frozen `threshold`, `report_paths`, and `report_sha256`. Set
90
- `applicable:false` plus the tool's reason only for zero executable modified lines. A percentage
91
- below the frozen threshold fails even when ordinary tests pass.
92
-
93
- Append one coverage record with `coverage_scope:"local"` per repository (and per Canonical
94
- source task). The state gate also requires a passed local `check_type:"test"` record for the same
95
- owner. The coverage record preserves the task-frozen baseline and threshold. Do not append or
96
- wait for GitLab pipeline evidence; historical remote coverage records are ignored by acceptance
97
- without modifying or deleting the stored records.
98
-
99
- For `type=tdd-init`, the infrastructure receipt must already have been recorded during IMPLEMENT
100
- and reviewed with the rest of the implementation. Run only `easy_coding_tdd_readiness.py check`
101
- here. If it reports drift, return to IMPLEMENT to refresh the receipt and repeat REVIEW; never
102
- rewrite it inside VERIFICATION. The state gate requires `ready` before MEMORY. This does not
103
- enable TDD; report the explicit `ec-config`/`easy-coding config` next step.
104
-
105
- - Every must-test item has an executed check.
106
- - Bug fixes include a regression test when project infrastructure exists.
107
- - Present changed scope, commands, results, and unverified items.
108
- - `approve` and `guard` request VERIFICATION -> MEMORY after acceptance.
109
- - `confirm` and `auto` advance after the green gate without introducing another mandatory
110
- user wait.
111
- - A reported in-scope problem returns to IMPLEMENT; out-of-scope work becomes a separate task.
112
-
113
- After the final green evidence is recorded, freeze the acceptance baseline before presenting the
114
- result or applying the boundary:
115
-
116
- ```bash
117
- {{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py verification-checkpoint \
118
- --agent <agent-id> --session-file <P>
119
- ```
120
-
121
- Then request or auto-apply VERIFICATION -> MEMORY according to `approval_mode`. `auto` remains
122
- automatic when the checkpoint is unchanged. If any in-scope code changed after the checkpoint,
123
- the state API returns `action:"acceptance-drift"`, keeps the task in VERIFICATION, and includes
124
- the exact unified patches or binary/mode-change descriptions plus a stable `diff_sha256`. This
125
- exceptional drift pauses every approval mode, including `auto`; it does not permanently change
126
- the configured mode.
127
-
128
- Show the complete returned diff and ask whether to accept that exact digest. Do not re-enter
129
- IMPLEMENT or rerun REVIEW merely because this drift exists. On acceptance, call
130
- `confirm-transition --stage MEMORY --diff-sha256 <digest>` with exactly one policy:
131
-
132
- - `carry-forward`: only when every changed hunk is confidently non-executable and existing
133
- verification remains applicable;
134
- - `targeted`: executable behavior changed; append passed current-fingerprint targeted verification
135
- before confirming. Canonical tasks must cover every affected source task reported by the
136
- acceptance record, without rerunning checks for unaffected source tasks;
137
- - `waived`: the user explicitly accepts the stated unverified risk.
138
-
139
- Include `--decision-summary` with the user's decision. A changed digest invalidates the pending
140
- confirmation and must be shown again. Behavior config, execution plan, workflow, Canonical
141
- design, or nested-repository metadata drift cannot use this shortcut; return to ANALYSIS or
142
- IMPLEMENT as reported by the state API. The acceptance record bridges only the accepted
143
- implementation fingerprints, so prior REVIEW evidence remains valid without a second REVIEW.
144
-
145
- For Canonical-backed tasks, run each repository's commands from `task.repo_paths[repo_id]` and
146
- cover every selected task's source test IDs. Report pending integration edges separately from
147
- local green checks. They do not block local implementation evidence, but the state API blocks
148
- `VERIFICATION -> MEMORY` until evidence is recorded with `satisfy-spec-dependency`. Never claim
149
- end-to-end completion while an integration edge remains pending. Every Canonical verify record
150
- includes the owning `repo_id` and `source_task_id`; duplicate check names in different source
151
- tasks remain separate evidence records. In `strict`, every involved repository independently
152
- records all four check types; a repository-specific non-applicable record still needs its reason
153
- and source ownership.
154
-
155
- After implementation and local checks, each selected Canonical source task remains
156
- `implemented`. Do not call `writeback-spec-task --status verified` from VERIFICATION. Applying
157
- VERIFICATION -> MEMORY is the authoritative acceptance boundary: the state API writes each
158
- still-implemented source task to `verified` through CAS/idempotent recoverable events with its
159
- accepted test evidence and acceptance digest, then enters MEMORY only after every write is
160
- confirmed. For `approve`/`guard`, that authority is the explicit boundary
161
- confirmation; for `confirm`/`auto`, it is the standing approval-mode authorization when no new
162
- drift exists. If writeback is interrupted, run `reconcile-spec-execution` before retrying the
163
- transition. Remote CI remains outside this acceptance gate.
164
-
165
- Record the exact integration edge only after its evidence exists:
166
-
167
- ```bash
168
- {{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py satisfy-spec-dependency \
169
- --task-id <harness-task-id> \
170
- --source-task <source-spec-task-id> \
171
- --spec-task <target-spec-task-id> \
172
- --evidence "<verifiable evidence>" \
173
- --agent <agent>
174
- ```
175
-
176
- The state API rejects VERIFICATION -> MEMORY unless all effective evidence is green and the
177
- checkpoint is either unchanged or bound to an exact accepted diff.
@@ -1,37 +0,0 @@
1
- ---
2
- name: ec-fixer
3
- model: sonnet
4
- description: Easy Coding fix sub-agent. Applies targeted fixes to specific issues identified during review. Returns structured results with changed files.
5
- ---
6
-
7
- You are an Easy Coding fix sub-agent. You receive one semantic-unit fix card listing related issues
8
- (with file:line locations) and apply the fixes. Your reply content IS the return value,
9
- not a message to a human.
10
-
11
- ## Hard constraints
12
-
13
- - Fix ONLY the related issues listed in the semantic-unit card. Do not refactor unrelated code.
14
- - Preserve acceptance criteria and cross-unit contracts; report if the fix would change them.
15
- - Modify ONLY the files listed in the fix card's scope.
16
- - Do not call any Skill tool.
17
- - Do not read `.qoder/skills/`, `.agents/skills/`, or any `.easy-coding/` file.
18
- - Make no workflow stage-transition decisions.
19
- - Preserve file encoding.
20
-
21
- ## Output (return exactly this structure)
22
-
23
- ```json
24
- {
25
- "changed_files": ["file1.ts", "file2.ts"],
26
- "fixes_applied": [
27
- {"file": "file1.ts", "line": 42, "original_issue": "...", "fix_description": "..."}
28
- ],
29
- "issues": [],
30
- "needs_attention": []
31
- }
32
- ```
33
-
34
- - `changed_files`: files you actually modified
35
- - `fixes_applied`: what you fixed with file:line reference
36
- - `issues`: problems you hit that prevented a fix (empty if none)
37
- - `needs_attention`: anything requiring a design decision that should escalate to the user