easy-coding-harness 0.10.0-beta.1 → 0.10.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "easy-coding-harness",
3
- "version": "0.10.0-beta.1",
3
+ "version": "0.10.0-beta.3",
4
4
  "description": "CLI scaffold for installing Easy Coding harness files into agent-native directories.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -85,9 +85,11 @@ initialization standard. Check each item:
85
85
  and non-empty?
86
86
  - **Project profile**: `project.yaml` exists with `mode` and `test` fields (ec-init owns it;
87
87
  `config.yaml` is CLI-owned — not ec-init's concern)?
88
- - **TDD runtime contract**: CLI-owned `config.yaml` has schema 4 TDD defaults and
89
- `.easy-coding/tools/easy_coding_java_coverage.py` exists? Missing fields or tool mean
90
- `easy-coding upgrade` is required; ec-init must not repair them directly.
88
+ - **TDD runtime contract**: CLI-owned `config.yaml` has schema 5 TDD defaults and both
89
+ `.easy-coding/tools/easy_coding_java_coverage.py` and
90
+ `.easy-coding/tools/easy_coding_tdd_readiness.py` exist? Missing fields or tools mean
91
+ `easy-coding upgrade` is required; ec-init must not repair them directly. Project-specific
92
+ JaCoCo/GitLab readiness remains owned by `ec-tdd-init`, not `ec-init`.
91
93
  - **Platform hook config freshness**: for each installed platform in `.easy-coding/config.yaml`,
92
94
  read the platform hook config and verify managed Easy Coding hook commands use the portable
93
95
  relative hook launcher bound to this project root's `project.id`. If `project.id` is missing,
@@ -159,7 +161,8 @@ agent must be able to see what was generated and on what evidence.
159
161
  you verified exist (read package.json scripts or equivalent — do not guess).
160
162
  If effective TDD is disabled, do not inspect JaCoCo or GitLab and do not add TDD-specific
161
163
  requirements. If it is enabled for Java, additionally document JUnit/JaCoCo commands,
162
- production/test source roots, XML report paths, and the existing GitLab TEST-stage gate.
164
+ production/test source roots, XML report paths, the local acceptance gate, and the generated
165
+ GitLab TEST-stage job as non-blocking automation infrastructure.
163
166
  5. **Memory migration probe** — Check for old-format memory files:
164
167
  - `.easy-coding/memory/long/MEMORY.md` exists but lacks `memory_schema: 2` frontmatter
165
168
  - `.easy-coding/memory/long/BUSINESS.md` or `TECHNICAL.md` missing
@@ -58,8 +58,9 @@ and config fingerprints, and MEMORY keeps the conditional long-memory threshold
58
58
  Java TDD is a third independent, default-off control managed by `ec-config`. Session overrides
59
59
  project configuration; ANALYSIS freezes enabled state and the 1..100 changed-line threshold
60
60
  (default 90) on entry to IMPLEMENT. Disabled TDD changes no ordinary workflow test depth. Enabled
61
- TDD adds lifecycle evidence, a TDD review dimension, and the same JaCoCo diff gate locally and in
62
- GitLab TEST-stage CI.
61
+ TDD adds lifecycle evidence, a TDD review dimension, passed local unit-test evidence, and a local
62
+ JaCoCo diff gate. `ec-tdd-init` still generates the equivalent GitLab TEST-stage job, but remote
63
+ pipeline execution and status are not Harness acceptance dependencies.
63
64
 
64
65
  The active task pointer lives in `sessions/{agent}-{session-id}.json` (with an agent-prefixed PPID fallback only
65
66
  when a hook payload has no logical session ID);
@@ -14,7 +14,7 @@ What lives in each platform directory and how the three platforms differ.
14
14
  | Sub-agent defs | `.claude/agents/*.md` | `.codex/agents/*.toml` | `.qoder/agents/*.md` |
15
15
  | CN variant | — | — | `.qodercn/` |
16
16
 
17
- Each skill is installed as `{skills-dir}/ec-{name}/SKILL.md`. The 14 skills are
17
+ Each skill is installed as `{skills-dir}/ec-{name}/SKILL.md`. The 15 skills are
18
18
  platform-agnostic — one template, resolved per platform at write time. The agent's native
19
19
  discovery surfaces them under `/ec-` or `$ec-`.
20
20
 
@@ -96,8 +96,14 @@ Code tasks require `test-strategy.md`; explicit `doc`, `analysis`, and `report`
96
96
  ## Optional Java TDD analysis
97
97
 
98
98
  Read `effective_tdd_enabled` and `effective_tdd_coverage_threshold` from the state snapshot.
99
+ For a `type=tdd-init` task, treat frozen TDD as off even if the project/session requests it. That
100
+ task is the sole exception allowed to inspect and plan build/CI coverage infrastructure while TDD
101
+ is off. Its scope is infrastructure only: never plan historical business-test backfill or a
102
+ repository-wide coverage target, and explicitly record `coverage scope: changed production lines`.
103
+
99
104
  When TDD is disabled, stop here: do not inspect GitLab CI or JaCoCo, do not add TDD fields or
100
- extra tests, and do not strengthen the selected Workflow Mode's ordinary acceptance depth.
105
+ extra tests, and do not strengthen the selected Workflow Mode's ordinary acceptance depth. This
106
+ zero-cost rule applies to ordinary tasks, not the explicit `tdd-init` infrastructure task above.
101
107
 
102
108
  When TDD is enabled for a Java code task, make `test-strategy.md` record:
103
109
 
@@ -107,18 +113,24 @@ When TDD is enabled for a Java code task, make `test-strategy.md` record:
107
113
  toward 100% while treating the threshold as the mechanical minimum;
108
114
  - feature/bug RED -> GREEN -> REFACTOR evidence, or for pure refactors a pre-change
109
115
  characterization GREEN -> post-change GREEN sequence without inventing a RED failure;
110
- - `.gitlab-ci.yml` and included configuration, the TEST-stage job, JUnit/JaCoCo artifacts, and an
111
- equivalent changed-line gate. Reuse a gate only when its threshold is at least the configured
112
- value; otherwise include the CI change in the confirmed implementation scope.
116
+ - the local unit-test command and local changed-line acceptance command. Record that
117
+ `ec-tdd-init` generated the GitLab TEST-stage job, but remote execution, pipeline identity, and
118
+ status are non-blocking and never require an intermediate commit or push. Include these exact,
119
+ language-independent contract markers: `local_test_gate: required` and
120
+ `remote_ci_acceptance: non-blocking`.
121
+ - current `tdd_readiness_status=ready`; if missing or drifted, stop before IMPLEMENT and route to
122
+ `ec-tdd-init`. Never plan to initialize CI inside an already-enabled TDD feature task.
113
123
 
114
124
  The state API mechanically freezes current Git `HEAD` per repository into `task.tdd_baselines`
115
- when ANALYSIS advances to IMPLEMENT. Plan both local and GitLab commands with that exact SHA and
116
- the frozen threshold; never use a mutable `HEAD` fallback at verification time. Non-Canonical TDD
117
- is limited to one Git repository; multi-repository TDD must use Canonical repository bindings.
125
+ when ANALYSIS advances to IMPLEMENT. Plan the local command with that exact SHA and the frozen
126
+ threshold. The generated GitLab job remains parameterized for infrastructure parity, but the
127
+ Harness acceptance plan never waits for remote CI. Never use a mutable `HEAD` fallback at
128
+ verification time. Non-Canonical TDD is limited to one Git repository; multi-repository TDD must
129
+ use Canonical repository bindings.
118
130
 
119
131
  Also append a `### TDD Mode` section to `dev-spec.md` with enabled state, frozen threshold,
120
- baseline, local gate, GitLab TEST gate, and lifecycle evidence. Do not add this section when TDD
121
- is disabled.
132
+ baseline, local unit-test gate, local coverage gate, generated GitLab job as non-blocking
133
+ infrastructure, and lifecycle evidence. Do not add this section when TDD is disabled.
122
134
 
123
135
  If the task is not a Java project, explain that Java-only TDD cannot be activated and obtain a
124
136
  mode decision before advancing. The CLI never installs JaCoCo or edits CI automatically.
@@ -18,7 +18,15 @@ Call `snapshot` and show project, session, effective, and frozen task values for
18
18
 
19
19
  Use the returned fields directly, including `project_tdd_enabled`, `session_tdd_enabled`,
20
20
  `effective_tdd_enabled`, their threshold counterparts, `task_tdd_enabled`, and the task's
21
- per-repository `task_tdd_baselines` frozen state.
21
+ per-repository `task_tdd_baselines` frozen state. When `tdd_readiness_status=not_checked` because
22
+ TDD is off, explicitly run the read-only readiness command below before showing readiness:
23
+
24
+ ```bash
25
+ python3 .easy-coding/tools/easy_coding_tdd_readiness.py --cwd . check
26
+ ```
27
+
28
+ This explicit configuration-panel check is the only disabled-mode readiness scan; ordinary hooks
29
+ must not inspect build or CI files while TDD is off.
22
30
 
23
31
  Explain precedence as `session override > project config > defaults`. Defaults are Approval
24
32
  `guard`, Workflow `adaptive`, TDD disabled, and TDD changed-line coverage threshold 90%. An active
@@ -29,6 +37,7 @@ changes affect future tasks and ANALYSIS only.
29
37
 
30
38
  Use `easy-coding config` for project settings. The CLI confirms one atomic update of Approval,
31
39
  Workflow, TDD, and (when enabled) the threshold. The threshold must be an integer from 1 to 100.
40
+ Enabling TDD is rejected atomically unless `ec-tdd-init` readiness is currently `ready`.
32
41
 
33
42
  ## Session configuration
34
43
 
@@ -51,4 +60,11 @@ After explicit user selection, use the current logical session file:
51
60
  Turning TDD off must preserve the existing Fast/Standard/Strict test depth exactly: do not inspect
52
61
  CI, request JaCoCo, add TDD artifacts, run coverage commands, or strengthen acceptance criteria.
53
62
  When TDD is on, explain that it applies only to Java code tasks and activates RED/GREEN/REFACTOR,
54
- TDD review, local changed-line JaCoCo coverage, and GitLab TEST-stage gate planning.
63
+ TDD review, a passed local unit-test gate, and local changed-line JaCoCo coverage. `ec-tdd-init`
64
+ still generates the GitLab TEST-stage job, but Harness does not wait for or record remote pipeline
65
+ results as acceptance evidence.
66
+
67
+ Before any project/session enable action, require `tdd_readiness_status=ready`. If it is not ready,
68
+ offer only `ec-tdd-init` or cancellation; never offer or persist "enable now, initialize later".
69
+ Readiness means infrastructure can measure future changed production lines. It does not certify
70
+ repository-wide coverage and does not require tests for unchanged historical code.
@@ -28,9 +28,10 @@ Name it `{memory_id}_{YYYYMMDD}_{smart_name}.md` and set
28
28
  `.easy-coding/memory/short/`, then register it with
29
29
  `memory-short-complete`. Never invent test results or commit hashes.
30
30
 
31
- When frozen TDD is enabled, add its threshold, lifecycle evidence, local changed-line result,
32
- and remote CI status to the short memory's execution evidence. When TDD is off, omit TDD fields
33
- entirely so ordinary tasks incur no additional memory work.
31
+ When frozen TDD is enabled, add its threshold, lifecycle evidence, passed local unit-test result,
32
+ and local changed-line result to the short memory's execution evidence. Remote CI status is not
33
+ part of Harness acceptance or task memory. When TDD is off, omit TDD fields entirely so ordinary
34
+ tasks incur no additional memory work.
34
35
 
35
36
  Ask the state API for `memory-instruction`. Distill only when it returns `action:distill`;
36
37
  otherwise record `no-op`. Long memory receives reusable facts only, not file dumps, transient
@@ -24,8 +24,10 @@ review dimension. A global record without source ownership cannot satisfy the ga
24
24
  When frozen TDD is enabled, add a passed review dimension named exactly `tdd` for each source
25
25
  task. Review whether RED/GREEN/REFACTOR (or characterization GREEN for pure refactors) is genuine,
26
26
  tests exercise changed behavior and boundaries, mocks do not merely mirror implementation, and
27
- the local/CI changed-line coverage gates share the frozen threshold. When TDD is off, do not add
28
- this dimension or raise the ordinary review depth.
27
+ the local unit-test command genuinely passes while the changed-line coverage command uses the
28
+ frozen baseline and threshold. Generated CI configuration may be reviewed when it changed, but
29
+ remote CI status is never a review or acceptance dependency. When TDD is off, do not add this
30
+ dimension or raise the ordinary review depth.
29
31
 
30
32
  ## Depth by workflow mode
31
33
 
@@ -0,0 +1,101 @@
1
+ ---
2
+ name: ec-tdd-init
3
+ description: Initialize or refresh Java changed-line TDD coverage infrastructure before TDD can be enabled.
4
+ ---
5
+
6
+ # ec-tdd-init — Java changed-line gate initialization
7
+
8
+ Communicate in the user's language. This skill owns TDD infrastructure readiness, not historical
9
+ test-debt cleanup. It must never bulk-generate tests for existing business code, require
10
+ repository-wide coverage, or modify production behavior merely to raise coverage.
11
+
12
+ ## Non-circular ordering
13
+
14
+ The only legal order is:
15
+
16
+ ```text
17
+ TDD off -> initialize infrastructure -> readiness ready -> user explicitly enables TDD
18
+ ```
19
+
20
+ Run this skill as a dedicated code task with `type=tdd-init`. The state API always freezes that
21
+ task with `tdd_enabled=false`, even when a legacy project/session setting or a suspended task has
22
+ TDD enabled. Never offer "enable now and initialize later". Never enable TDD automatically after
23
+ initialization.
24
+
25
+ ## Read-only preflight
26
+
27
+ First run:
28
+
29
+ ```bash
30
+ python3 .easy-coding/tools/easy_coding_tdd_readiness.py --cwd . check
31
+ ```
32
+
33
+ If it returns `ready`, report the recorded build/CI contract and stop without creating a task.
34
+ The user may then use `ec-config` or `easy-coding config` to enable TDD.
35
+
36
+ If it returns `needs_init`, inspect only the infrastructure needed to form a confirmed plan:
37
+
38
+ - Maven/Gradle files and the existing JUnit runner;
39
+ - JaCoCo XML generation configuration;
40
+ - `.gitlab-ci.yml` and its repository-local include chain;
41
+ - TEST-stage job, JUnit/JaCoCo artifacts, and invocation of
42
+ `.easy-coding/tools/easy_coding_java_coverage.py` with task-supplied baseline/threshold values.
43
+
44
+ Do not measure current whole-project coverage. A project with no historical business tests may
45
+ still become ready when the test runner, JaCoCo reporting, and parameterized changed-line gate
46
+ are functional.
47
+
48
+ ## Initialization task
49
+
50
+ After the user confirms the exact infrastructure scope, create one task and route it through the
51
+ ordinary workflow:
52
+
53
+ ```bash
54
+ {{PYTHON_CMD}} {{platform_config_dir}}/hooks/easy_coding_state.py create-task \
55
+ --task-id <safe-unique-id> --type tdd-init \
56
+ --title "Initialize Java changed-line TDD infrastructure" \
57
+ --agent <agent-id> --session-file <P>
58
+ ```
59
+
60
+ ANALYSIS may plan build files, GitLab CI files, common scripts, and the readiness receipt. It must
61
+ state `historical coverage required: no` and `coverage scope: changed production lines since each
62
+ future task baseline`. IMPLEMENT changes infrastructure only. It must not add tests whose sole
63
+ purpose is to cover unchanged production code.
64
+
65
+ The reusable GitLab job must consume a baseline SHA and threshold supplied for the future task;
66
+ do not hardcode the initialization commit or the default 90% threshold. The same Python coverage
67
+ tool must be usable locally and remotely. This generated job is remote automation infrastructure,
68
+ not a Harness task acceptance dependency: later tasks require local unit-test and coverage
69
+ evidence only, and never wait for a pipeline URL, job identity, or remote success status.
70
+
71
+ ## Readiness receipt and verification
72
+
73
+ At the end of IMPLEMENT, after the infrastructure files are stable, record their fingerprints.
74
+ The receipt is part of the implementation and must exist before REVIEW so review/verification
75
+ fingerprints do not change after review. The recorder automatically includes the harness-managed
76
+ `.easy-coding/tools/easy_coding_java_coverage.py` fingerprint:
77
+
78
+ ```bash
79
+ python3 .easy-coding/tools/easy_coding_tdd_readiness.py --cwd . record \
80
+ --build-file <pom.xml-or-build.gradle> [--build-file <included-build-file>]... \
81
+ --ci-file .gitlab-ci.yml [--ci-file <repository-local-include>]... \
82
+ --coverage-report <jacoco-xml-pattern> [--coverage-report <pattern>]... \
83
+ --gate-command "python3 .easy-coding/tools/easy_coding_java_coverage.py check --base \$EASY_CODING_TDD_BASE_SHA --threshold \$EASY_CODING_TDD_THRESHOLD" \
84
+ --agent <agent-id>
85
+ ```
86
+
87
+ REVIEW includes the receipt and its declared infrastructure boundary. VERIFICATION runs the
88
+ frozen Workflow Mode's applicable build/test/CI syntax checks, then performs only the read-only
89
+ readiness check:
90
+
91
+ ```bash
92
+ python3 .easy-coding/tools/easy_coding_tdd_readiness.py --cwd . check
93
+ ```
94
+
95
+ The `VERIFICATION -> MEMORY` gate requires the final check to return `ready`. If any recorded
96
+ build or CI file changes after the receipt was created, readiness becomes `needs_init`; return to
97
+ IMPLEMENT, refresh the receipt, and repeat REVIEW before verifying again. Rerun this skill when
98
+ the same drift occurs after task completion.
99
+
100
+ After completion, tell the user that TDD remains off and provide the explicit project/session
101
+ enable route. Do not treat readiness as consent to enable it.
@@ -26,10 +26,12 @@ Read-only tasks never enter this stage. Obtain fresh fingerprints before running
26
26
  - `strict`: run the project's full applicable lint, typecheck, test, and build gates.
27
27
 
28
28
  These rules remain unchanged when frozen TDD is off: do not discover JaCoCo reports, run the
29
- coverage tool, inspect GitLab, or add a coverage record.
29
+ coverage tool, inspect GitLab, or add a coverage record. The explicit `type=tdd-init` task is an
30
+ infrastructure exception: run its planned build/CI syntax checks and readiness tool, but do not
31
+ measure repository-wide coverage or append TDD coverage evidence for unchanged production code.
30
32
 
31
- When frozen TDD is on, first run the planned Java unit command and generate JaCoCo XML, then run
32
- the same deterministic gate intended for GitLab:
33
+ When frozen TDD is on, first run the planned local Java unit command and generate JaCoCo XML,
34
+ then run the deterministic local acceptance gate:
33
35
 
34
36
  ```bash
35
37
  python3 .easy-coding/tools/easy_coding_java_coverage.py check \
@@ -41,10 +43,10 @@ The tool measures covered added/modified production Java executable lines only.
41
43
  comment, blank, import, and test-source lines are excluded by diff/JaCoCo intersection. Missing
42
44
  or ambiguous source files and reports older than their modified source fail; zero modified
43
45
  executable lines is explicit N/A. Always regenerate JaCoCo XML after the final source change.
44
- Record CI as pending until the remote pipeline actually passes; local green is not remote green.
45
46
  Never substitute `HEAD`, a mutable ref, project defaults, or current session settings for the
46
- task-frozen baseline SHA and threshold. GitLab must invoke the tool with the same two frozen
47
- values; a session override therefore requires the CI command/variable for this task to match it.
47
+ task-frozen baseline SHA and threshold. `ec-tdd-init` still generates a GitLab job that can run
48
+ the same tool, but remote pipeline execution and status are outside Harness acceptance. Never
49
+ request an intermediate commit or push merely to obtain CI evidence.
48
50
 
49
51
  The main Agent may run commands inline. Dispatch verifier sub-agents only when checks are
50
52
  independent and parallel execution materially saves time or isolates specialist environments.
@@ -84,23 +86,17 @@ For TDD coverage, copy the tool output into `coverage`: `baseline_sha`, `covered
84
86
  `applicable:false` plus the tool's reason only for zero executable modified lines. A percentage
85
87
  below the frozen threshold fails even when ordinary tests pass.
86
88
 
87
- Append two coverage records per repository (and per Canonical source task): one with
88
- `coverage_scope:"local"`, and one with `coverage_scope:"gitlab"`. The GitLab record may be
89
- appended only after the remote job succeeds and must also include:
90
-
91
- ```json
92
- {
93
- "ci": {
94
- "provider": "gitlab",
95
- "pipeline_url": "https://gitlab.example/.../pipelines/123",
96
- "job_name": "changed-line-coverage",
97
- "status": "success"
98
- }
99
- }
100
- ```
101
-
102
- Both records must preserve the same task-frozen baseline and threshold. A local-only result,
103
- pending/failed pipeline, missing job identity, or synthetic remote pass cannot satisfy MEMORY.
89
+ Append one coverage record with `coverage_scope:"local"` per repository (and per Canonical
90
+ source task). The state gate also requires a passed local `check_type:"test"` record for the same
91
+ owner. The coverage record preserves the task-frozen baseline and threshold. Do not append or
92
+ wait for GitLab pipeline evidence; historical remote coverage records are ignored by acceptance
93
+ without modifying or deleting the stored records.
94
+
95
+ For `type=tdd-init`, the infrastructure receipt must already have been recorded during IMPLEMENT
96
+ and reviewed with the rest of the implementation. Run only `easy_coding_tdd_readiness.py check`
97
+ here. If it reports drift, return to IMPLEMENT to refresh the receipt and repeat REVIEW; never
98
+ rewrite it inside VERIFICATION. The state gate requires `ready` before MEMORY. This does not
99
+ enable TDD; report the explicit `ec-config`/`easy-coding config` next step.
104
100
 
105
101
  - Every must-test item has an executed check.
106
102
  - Bug fixes include a regression test when project infrastructure exists.
@@ -39,8 +39,11 @@ selection and reasons, allows the user to change it within the risk floor, and f
39
39
  ANALYSIS -> IMPLEMENT is applied.
40
40
 
41
41
  TDD resolves with the same session-over-project precedence and freezes its enabled flag and
42
- threshold on ANALYSIS -> IMPLEMENT. When off, it must add no CI scan, artifacts, commands,
43
- coverage work, or stronger acceptance. Use `ec-config` for all mode configuration.
42
+ threshold on ANALYSIS -> IMPLEMENT. It may be enabled only after `ec-tdd-init` readiness passes;
43
+ there is no enabled-but-pending-initialization state. A dedicated `tdd-init` task always freezes
44
+ TDD off so it can create or repair the required infrastructure without circular gating. When off,
45
+ ordinary tasks add no CI scan, artifacts, commands, coverage work, or stronger acceptance. Use
46
+ `ec-config` for all mode configuration.
44
47
 
45
48
  `confirm` and `auto` do not hide the proposal: show it in the plan. Confirm waits for that one
46
49
  plan decision; Auto continues immediately. Both remove later waiting, not quality gates.
@@ -87,7 +90,10 @@ plan decision; Auto continues immediately. Both remove later waiting, not qualit
87
90
 
88
91
  When multiple selected tasks depend on the same target, disambiguate creation evidence with
89
92
  `<source-task-id>-><dependency-task-id>=<evidence>`.
90
- 4. Match the user's intent against `current_task` and the active task list before resuming.
93
+ 4. When the user explicitly invokes `ec-tdd-init`, let that skill own preflight and create a
94
+ `type=tdd-init` code task only after scope confirmation. Do not reinterpret it as an ordinary
95
+ TDD-enabled feature task and do not require readiness before creating it.
96
+ 5. Match the user's intent against `current_task` and the active task list before resuming.
91
97
  If the user names or clearly matches another task, confirm the switch and call
92
98
  `claim-task --task-id <id> --agent <agent-id> --session-file <P>`. Do not execute task A
93
99
  under task B's request.
@@ -99,10 +105,10 @@ plan decision; Auto continues immediately. Both remove later waiting, not qualit
99
105
  to the requested deliverable. Feature, bugfix, refactor, performance, and workflow changes
100
106
  are code tasks. Use `doc`, `analysis`, or `report` only when the user explicitly requested
101
107
  a no-code deliverable; never downgrade a code request to the read-only completion path.
102
- 5. Resume the matched/current task, then load only state-relevant assets. Do not read five full
108
+ 6. Resume the matched/current task, then load only state-relevant assets. Do not read five full
103
109
  memories at every startup; ANALYSIS searches memory metadata and opens relevant entries on
104
110
  demand.
105
- 6. If another Agent last owned the task, summarize the stored handoff before continuing.
111
+ 7. If another Agent last owned the task, summarize the stored handoff before continuing.
106
112
 
107
113
  ## Stage dispatch
108
114
 
@@ -33,7 +33,7 @@ Trigger Easy Coding skills with your platform prefix — Codex: `$ec-*`, Qoder:
33
33
  - `ec-brainstorming` — design exploration before building (hard design gate)
34
34
  - `ec-analysis` `ec-implementing` `ec-reviewing` `ec-verification` — workflow stages
35
35
  - `ec-memory` — short/long memory archive
36
- - `ec-task-management` — task lifecycle panel · `ec-config` — Approval/Workflow/TDD settings · `ec-task-close` — interrupt a task
36
+ - `ec-task-management` — task lifecycle panel · `ec-config` — Approval/Workflow/TDD settings · `ec-tdd-init` — Java changed-line gate initialization · `ec-task-close` — interrupt a task
37
37
  - `ec-no-harness` — bypass only Easy Coding for the current session
38
38
  - `ec-git` — git discipline · `ec-meta` — understand/customize the harness
39
39
 
@@ -49,9 +49,13 @@ First run `ec-init`; daily work goes through `ec-workflow`.
49
49
  evidence gates.
50
50
  - TDD is session override > project `behavior.tdd_enabled` > `false`; its changed-line threshold
51
51
  is session override > project `behavior.tdd_coverage_threshold` > `90`. ANALYSIS -> IMPLEMENT
52
- freezes both. Disabled TDD adds no CI scan, JaCoCo work, commands, artifacts, or stronger gates.
53
- Enabled TDD applies only to Java code tasks and requires lifecycle, review, local coverage, and
54
- GitLab TEST-stage gate evidence.
52
+ freezes both. TDD may be enabled only after `ec-tdd-init` records valid infrastructure readiness;
53
+ there is no enable-now/init-later state. The dedicated `tdd-init` task always freezes TDD off and
54
+ initializes only changed-line coverage infrastructure, never historical business-test coverage.
55
+ Disabled TDD adds no CI scan, JaCoCo work, commands, artifacts, or stronger gates. Enabled TDD
56
+ applies only to Java code tasks and requires lifecycle, review, passed local unit tests, and
57
+ local coverage for production lines changed since the task baseline. `ec-tdd-init` still
58
+ generates GitLab TEST-stage automation, but remote CI status is not Harness acceptance evidence.
55
59
  - Confirmation-required edges use `pending_transition`; automatic edges use the restricted
56
60
  `auto-transition` API. A read-only task creates no test-strategy.md, never enters REVIEW,
57
61
  VERIFICATION, or MEMORY, and writes no task memory.
@@ -31,7 +31,7 @@ platform prefixes such as `/` or `$`. If no status line is injected, do not inve
31
31
  - `/ec-brainstorming` — design exploration before building (hard design gate)
32
32
  - `/ec-analysis` `/ec-implementing` `/ec-reviewing` `/ec-verification` — workflow stages
33
33
  - `/ec-memory` — short/long memory archive
34
- - `/ec-task-management` — task lifecycle panel · `/ec-config` — Approval/Workflow/TDD settings · `/ec-task-close` — interrupt a task
34
+ - `/ec-task-management` — task lifecycle panel · `/ec-config` — Approval/Workflow/TDD settings · `/ec-tdd-init` — Java changed-line gate initialization · `/ec-task-close` — interrupt a task
35
35
  - `/ec-no-harness` — bypass only Easy Coding for the current session
36
36
  - `/ec-git` — git discipline · `/ec-meta` — understand/customize the harness
37
37
 
@@ -47,9 +47,13 @@ First run `/ec-init`; daily work goes through `/ec-workflow`.
47
47
  evidence gates.
48
48
  - TDD is session override > project `behavior.tdd_enabled` > `false`; its changed-line threshold
49
49
  is session override > project `behavior.tdd_coverage_threshold` > `90`. ANALYSIS -> IMPLEMENT
50
- freezes both. Disabled TDD adds no CI scan, JaCoCo work, commands, artifacts, or stronger gates.
51
- Enabled TDD applies only to Java code tasks and requires lifecycle, review, local coverage, and
52
- GitLab TEST-stage gate evidence.
50
+ freezes both. TDD may be enabled only after `ec-tdd-init` records valid infrastructure readiness;
51
+ there is no enable-now/init-later state. The dedicated `tdd-init` task always freezes TDD off and
52
+ initializes only changed-line coverage infrastructure, never historical business-test coverage.
53
+ Disabled TDD adds no CI scan, JaCoCo work, commands, artifacts, or stronger gates. Enabled TDD
54
+ applies only to Java code tasks and requires lifecycle, review, passed local unit tests, and
55
+ local coverage for production lines changed since the task baseline. `ec-tdd-init` still
56
+ generates GitLab TEST-stage automation, but remote CI status is not Harness acceptance evidence.
53
57
  - Confirmation-required edges use `pending_transition`; automatic edges use the restricted
54
58
  `auto-transition` API. A read-only task creates no test-strategy.md, never enters REVIEW,
55
59
  VERIFICATION, or MEMORY, and writes no task memory.