Validation: Woodpecker pipeline missing timestamps for DORA metrics
Verdict: PASS
Ticket
ldraney/landscaping-assistant#57 — Expose pipeline start/finish timestamps via Woodpecker MCP so DORA deployment frequency and lead time metrics can be calculated.
Merged PR: ldraney/woodpecker-mcp#8 (commit 56c9123)
Board item: #1296 on board-landscaping-assistant
Environment
Woodpecker MCP server (local MCP tool), restarted after merge to load committed code from commit 56c9123. Validated by querying MCP tools
list_pipelines, get_pipeline_status, and get_pipeline_failure_rate against ldraney/landscaping-assistant pipelines.Tiers Executed
Tier 1 (local code review) + Tier 3 (prod MCP tool queries). Per
skill-validate-ticket for arch:ci-pipeline / API repo type.Checks
| # | Criterion | How Verified | Result | Evidence |
|---|---|---|---|---|
| 1 | <code>started_at</code> and <code>finished_at</code> populated in API responses | <code>list_pipelines(repo_full_name="ldraney/landscaping-assistant", branch="main")</code> | PASS | Pipeline #898: created_at=2026-07-27T05:18:37Z, started_at=2026-07-27T05:18:38Z, finished_at=2026-07-27T05:24:24Z. All 3 pipelines returned have non-null timestamps. |
| 2 | Pipeline duration calculable from API data | <code>get_pipeline_status(repo="ldraney/landscaping-assistant", number=898)</code> | PASS | duration_seconds=346. Step-level durations also present: clone(8s), database(337s), bundle-install(23s), lint(6s), test(53s), build-and-push(261s). |
| 3 | DORA deployment frequency derivable from push-to-main pipeline history | <code>list_pipelines</code> with <code>branch=main</code> filter | PASS | All pipelines include created_at timestamps. Can filter by event=push, branch=main to count deployments over time. |
| 4 | <code>list_pipelines</code> timestamps non-null | Direct MCP tool call — checked 3 pipelines | PASS | Pipelines #898, #897, #895 all return non-null created_at, started_at, finished_at, duration_seconds. |
| 5 | <code>get_pipeline_status</code> step-level timing | <code>get_pipeline_status(number=898)</code> | PASS | 6 steps with started_at, finished_at, and duration_seconds each. Example: test step started_at=05:19:10, finished_at=05:20:03, duration_seconds=53. |
| 6 | <code>get_pipeline_failure_rate</code> DORA tool works with timestamps | <code>get_pipeline_failure_rate(repo="ldraney/landscaping-assistant")</code> | PASS | Returns 30-day stats: 233 total, 195 success, 38 failure (16.31% CFR). All 10 recent_failures include created_at, started_at, finished_at timestamps. |
Regression Check
All existing MCP functionality verified intact:
list_pipelines— returns correct pipeline data (status, event, branch, message, author) plus new timestamp fieldsget_pipeline_status— returns step-level status and exit codes plus new timestamp/duration fieldsget_pipeline_failure_rate— DORA module working correctly, returns failure rate with timestamp data
No regressions detected.
Prior Attempts
This ticket required three validation attempts:
- Attempt 1 (PARTIAL): MCP server had not been restarted after merge — old code still serving null timestamps.
- Attempt 2 (FAIL): Working tree had staged changes reverting PR #8 and deleting dora.py module.
- Attempt 3 (PASS): Working tree cleaned, MCP server restarted with committed code. All timestamps confirmed working.
Discovered Issues
None. All acceptance criteria satisfied.