11# Migration plan: consumer-generated reports (v2)
22
3+ > ** Status: complete.** Released as v0.2.0 (2026-07-02). All checkboxes below
4+ > reflect verified repo state as of that release; see ` docs/PROGRESS.md ` for
5+ > the canonical completion record.
6+
37Moves coverage, complexity, and duplication from "the Action runs the tool" to
48"the consumer runs the tool, the Action reads the file." LCOV is accepted
59wherever a language's tooling produces it; Cobertura and JaCoCo are supported,
8387
8488This also removes the old "invoke ` collect.sh` via `bash`" workaround.
8589
86- - [ ] Delete `collect.sh` and all inline Python parsers
87- - [ ] New entrypoint `src/index.ts` does, in order :
90+ - [x ] Delete `collect.sh` and all inline Python parsers
91+ - [x ] New entrypoint `src/index.ts` does, in order :
8892 1. Resolve coverage file : ` coverage-path` input if set, else probe the
8993 documented default paths in a fixed, documented order; **fail with the
9094 probed-path list** if nothing is found
@@ -150,49 +154,49 @@ with the parser pipeline. Strip the collect.sh spawn path (and its
150154` require.main` guard trigger) out of run.ts; run.ts becomes a pure helper
151155module.
152156
153- - [ ] `src/index.ts` — new entrypoint (orchestration per Phase 2)
154- - [ ] `src/format.ts` — coverage format sniffer (4 formats incl. Go profile)
155- - [ ] `src/lcov.ts`
156- - [ ] `src/goprofile.ts` — native `go tool cover` profile parser
157- - [ ] `src/cobertura.ts` + quirks table (uses fast-xml-parser)
158- - [ ] `src/jacoco.ts` (already written) — extend to emit `cyclomatic` from
157+ - [x ] `src/index.ts` — new entrypoint (orchestration per Phase 2)
158+ - [x ] `src/format.ts` — coverage format sniffer (4 formats incl. Go profile)
159+ - [x ] `src/lcov.ts`
160+ - [x ] `src/goprofile.ts` — native `go tool cover` profile parser
161+ - [x ] `src/cobertura.ts` + quirks table (uses fast-xml-parser)
162+ - [x ] `src/jacoco.ts` (already written) — extend to emit `cyclomatic` from
159163 ` COMPLEXITY` /`METHOD` counters
160- - [ ] `src/complexity/radon.ts`, `src/complexity/gocyclo.ts`,
164+ - [x ] `src/complexity/radon.ts`, `src/complexity/gocyclo.ts`,
161165 ` src/complexity/lizard.ts` , `src/complexity/detect.ts` (shape sniffer)
162- - [ ] `src/duplication.ts` (jscpd JSON)
163- - [ ] `src/paths.ts` — input-or-default-probe resolution for all three
166+ - [x ] `src/duplication.ts` (jscpd JSON)
167+ - [x ] `src/paths.ts` — input-or-default-probe resolution for all three
164168 report kinds, incl. probe-order tables above and the
165169 fail-vs-skip rule from Phase 1
166- - [ ] `src/run.ts` — remove collect.sh invocation; helpers only
167- - [ ] Add `fast-xml-parser` to dependencies
168- - [ ] Update `action.yml` inputs : ` coverage-path` (optional, probed),
170+ - [x ] `src/run.ts` — remove collect.sh invocation; helpers only
171+ - [x ] Add `fast-xml-parser` to dependencies
172+ - [x ] Update `action.yml` inputs : ` coverage-path` (optional, probed),
169173 ` coverage-tool` (conditional, Cobertura only), `complexity-path`
170174 (optional), `duplication-path` (optional); remove anything tied to
171175 auto-run behavior
172- - [ ] Rebuild : commit `dist/index.js`; **delete `dist/run.js`**; update any
176+ - [x ] Rebuild : commit `dist/index.js`; **delete `dist/run.js`**; update any
173177 reference to the old bundle path
174178
175179# ## Phase 4 — Tests
176180
177- - [ ] Layer 1 (vitest) : keep the existing 52 run.ts tests as-is; add unit
181+ - [x ] Layer 1 (vitest) : keep the existing 52 run.ts tests as-is; add unit
178182 tests per new module, fixture-per-format (LCOV, Go profile, Cobertura
179183 per quirks entry, JaCoCo incl. complexity derivation, Radon, gocyclo,
180184 Lizard, jscpd); add tests for probe order/precedence and the
181185 threshold-configured-but-missing failure
182- - [ ] Layer 2 (`test/collect-parsers.sh`) : retire entirely; fold remaining
186+ - [x ] Layer 2 (`test/collect-parsers.sh`) : retire entirely; fold remaining
183187 fixture checks into the vitest suite
184- - [ ] Re-enable `.github/workflows/action-test.yml` (dogfood) : run vitest
188+ - [x ] Re-enable `.github/workflows/action-test.yml` (dogfood) : run vitest
185189 with the `lcov` coverage reporter, then invoke the local Action with
186190 no `coverage-path` — the probe finds `coverage/lcov.info`, closing the
187191 zero-config LCOV loop end-to-end. Keep the push-main / feature-branch /
188192 PR threshold matrix from the previous self-test
189- - [ ] Verify (no code change expected) : Worker `POST /api/ci/coverage`
193+ - [x ] Verify (no code change expected) : Worker `POST /api/ci/coverage`
190194 accepts payloads with only `line_coverage` — complexity/duplication
191195 fields optional per existing zod schema
192196
193197# ## Phase 5 — Markdown documentation
194198
195- - [ ] `docs/generating-coverage-reports.md` — **generated file, do not edit
199+ - [x ] `docs/generating-coverage-reports.md` — **generated file, do not edit
196200 directly.** Canonical source is `generating-coverage-reports.svx` in
197201 the coveragetracker.dev repo (see Plan B, Phase 2a). Author these
198202 changes there; the sync pipeline PRs them into this repo :
@@ -205,20 +209,22 @@ module.
205209 - If the sync pipeline isn't live yet when Plan A reaches this phase,
206210 make the edits in the `.svx` and copy the exported output over
207211 manually once — never fork the content
208- - [ ] `.github/actions/report/README.md` — inputs table : ` coverage-path` now
212+ - [x ] `.github/actions/report/README.md` — inputs table : ` coverage-path` now
209213 optional (probed), `complexity-path` / `duplication-path` optional with
210214 probe fallback; document fail-vs-skip semantics
211- - [ ] `docs/PROGRESS.md` — new phase entry; mark superseded auto-run entries
215+ - [x ] `docs/PROGRESS.md` — new phase entry; mark superseded auto-run entries
212216 as superseded rather than deleting history
213- - [ ] `docs/INSTALLATION.md` — update the CI example under "Next steps" :
217+ - [x ] `docs/INSTALLATION.md` — update the CI example under "Next steps" :
214218 explicit test/coverage step, then the Action with zero config
215- (complexity/duplication shown as optional additions)
216- - [ ] Root `README.md` — update quick-start snippet (zero-config example)
219+ (complexity/duplication shown as optional additions) — landed via the
220+ ` docs-sync` PR (#42, 2026-07-02) from the coveragetracker.dev source
221+ - [x] Root `README.md` — update quick-start snippet (zero-config example)
217222
218223# ## Phase 6 — Release
219224
220- - [ ] Major version tag
221- - [ ] `CHANGELOG.md` : before/after workflow example; **explicitly call out**:
225+ - [x] Version tag — released as **v0.2.0** (minor bump under 0.x semver, per
226+ the breaking-change note in `CHANGELOG.md`)
227+ - [x] `CHANGELOG.md` : before/after workflow example; **explicitly calls out**:
222228 (a) the Action no longer runs tests or coverage tools, (b) jscpd is no
223229 longer auto-installed — duplication silently disappears for consumers
224230 who relied on it unless they add a jscpd step or set
0 commit comments