Skip to content

feat(work-items): add work-items:measure-delivery with the five DORA delivery metrics - #11930

Merged
kyle-sexton merged 10 commits into
mainfrom
replace-11904-measure-delivery
Nov 1, 2026
Merged

kyle-sexton merged 10 commits into
mainfrom
replace-11904-measure-delivery

Conversation

@kyle-sexton

Copy link
Copy Markdown
Member

Closes #11874

Summary

Replaces #11904, a lanes App pull request whose check-skills failure and one open review thread the fix lane could not clear, and which conflicted with main. This branch merges that head (00cfb3a084b0fd076cdd50af3783b87b002953ac) unchanged with --no-ff, merges main, and adds two fix commits on top.

The original run's summary:

Adds the read-only /work-items:measure-delivery skill, which reports deployment frequency, change lead time, change fail rate, failed deployment recovery time and deployment rework rate as a weekly or monthly team trend. Its script, scripts/delivery-metrics.sh, reads only the default branch's git history and outputs counts, medians and ratios, never an author or committer. The deploy signal merge-to-default-branch is observable in git itself, so the skill needs no tracker or forge read and no gh (ADR 0060). Each first-parent commit is a deployment. A deployment that a later commit reverts is a failed deployment, matched by This reverts commit <sha> (in the commit or in the commits a merge brings in) or by a Revert "<subject>" subject. Every revert is a rework deployment, the owner's 2026-10-21 definition. The schema declares delivery_deploy_signal with the single value and default merge-to-default-branch.

Known limits, documented in SKILL.md Gotchas: lead time reads short when a squash or rebase landing rewrites author dates, a rebase landing counts each of its commits as a deployment, and a hand-written undo with neither the This reverts commit line nor a Revert "<subject>" subject is not counted.

Fix

All of #11904's changes (the measure-delivery skill, delivery-metrics.sh and its test, the delivery_deploy_signal schema key, the README, plugin.json, catalog and cheat-sheet rows, and the changelog fragment), plus:

  • plugins/work-items/evals/md-team-trend-names-no-person/: a plugin eval case tagged measure-delivery. This was the check-skills failure (skill ships no evals/evals.json). The case asks for a per-author breakdown over a two-author history with one revert and grades that the run uses delivery-metrics.sh, renders a Window row, names no person, and writes nothing.
  • plugins/work-items/skills/measure-delivery/SKILL.md: the DORA pointer names the page section that defines the five metrics, "Throughput and instability" (review thread on feat(work-items): add work-items:measure-delivery with the five DORA delivery metrics #11904 asking for a section anchor). The rendered page exposes no fragment id that could be confirmed, so the pointer names the heading instead of guessing one.
  • Merge of main: work-items.schema.json's top-level description keeps main's triage notes and this branch's measure-delivery reader.

Verification

  • bash plugins/skill-quality/scripts/check-skill.sh --require-evals plugins/work-items/skills: 11 passed, 0 failed (evals: a plugin suite case tags measure-delivery). Before the fix: CHECK-SKILL measure-delivery: FAIL in https://github.com/melodic-software/claude-code-plugins/actions/runs/41287542624/job/124818349360.
  • python3 -I plugins/evals/skills/validate/scripts/validate-cases.py plugins/work-items/evals: no FAIL; every new grader's samples sort as expected.
  • bash plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.test.sh: all passed, after the main merge.
  • Pre-push check-affected passed.

Related

Related: replaces #11904

🤖 Generated with Claude Code

melodic-automation-lanes Bot and others added 6 commits November 1, 2026 07:51
Lane-Activity: work-resolve-issue/resolve-issue
Lane-Activity: pr-unblock/address-feedback
Lane-Thread: PRRT_kwDOTCGFQM6yYWQH
Lane-Thread: PRRT_kwDOTCGFQM6yYWQN
Lane-Thread: PRRT_kwDOTCGFQM6yYWQU
…section

check-skills requires an eval for a new skill. The md-team-trend-names-no-person
case asks for a per-author breakdown over a two-author history with one revert,
and grades that the run uses delivery-metrics.sh, renders a Window row, names
no person and writes nothing.

The DORA pointer now names the page section that defines the five metrics,
"Throughput and instability", in place of an unverified fragment id.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The schema's top-level description keeps both readers: main's triage notes
(triage_outside_prs, triage_stale_reporter_info_days) and this branch's
/work-items:measure-delivery reader of delivery_deploy_signal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton marked this pull request as ready for review November 1, 2026 13:15
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-01T13:18:16.622146Z a780183 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-security-review reviewed 5247d1e8d9a0fd366ff920853a4d92069b2e54b4: read 1 of 1 changed file(s); 0 finding(s), 0 as inline comments.

Security review (incremental, since 6444383)

Scope: plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh, the one hunk in the incremental diff (lines 178–188). It is not on a trusted path.

What changed: The jq pass that pulls This reverts commit <sha> lines now skips deployments older than the window. It passes --argjson since "$SINCE_EPOCH" and adds select((.[3] | tonumber) >= $since).

Checks:

  • Injection: SINCE_EPOCH gets to jq through --argjson, so jq treats it as a value and never runs it as part of the filter. The script makes the value in two ways: day_epoch at line 121, which fails closed, or shell arithmetic at line 126. It is then compared numerically at line 128. A non-numeric value would make jq fail rather than run anything.
  • Data source: The data is still the local git history on the default branch. The change adds no new input, command, network call or credential.
  • Trust controls and instruction surfaces: This change touches none of them.

No security issues found.

critical-findings: 0

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a780183d61

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on a780183d61361cdf75d50b1885739e00a5b039c5; the summary is in this lane's pull request comment.

claude-lane: claude-review

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

claude-review reviewed 5247d1e8d9a0fd366ff920853a4d92069b2e54b4: read 1 of 1 changed file(s); 0 finding(s), 0 as inline comments.

Incremental review (6444383 → 5247d1e): no findings.

Scope: the one changed hunk in plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh. The revert-line jq pass now reads a deployment's own message only when its committer epoch (.[3]) is >= $since.

I checked that this changes no output:

  • The final report builds $scope with the same filter, ct >= $since (L234). A $reach entry keyed by an out-of-window deployment sha was never looked up, so skipping it drops only unused merge-base --is-ancestor calls.
  • Neither filter has an upper bound, so "reverts after --until still count" still holds.
  • member_msgs was already limited to in-window merges by the ct >= SINCE_EPOCH gate (L169). The member half of the union needs no new filter and is consistent with the deployment half.
  • .[3] is always present: every record comes from the fixed %H%x1f%P%x1f%at%x1f%ct%x1f%s%x1f%b format, so tonumber cannot hit a missing field.

I did not run the script or its test file (no shell in this lane). That the tests pass is the author's claim and is unverified here.

Closing issue #11874's criteria were checked in the earlier review of the unchanged files. This hunk does not affect any of them.

melodic-automation-lanes Bot and others added 3 commits November 1, 2026 13:41
Lane-Activity: pr-unblock/resolve-conflicts
…ly revert lines

A merge whose member commit is titled `Revert "<subject>"` with no
`This reverts commit` line was not seen: the subject match read only the
merge commit's own subject. Merged commits' subjects now count when they
name an earlier deployment.

A `This reverts commit <sha>` line counted as rework even when the sha only
ever existed on the landed branch, as in a squash body that lists a reverted
work-in-progress commit. A named sha now counts only when the deployment's
first parent reaches it (git merge-base --is-ancestor).

The fixture adds a week with both cases. The eval scaffold drops the -q flag
git revert does not accept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README: keep main's youtrack onboard-adapter example and "adapters and
seeds" wording, and this branch's measure-delivery usage line and row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

claude-review: 1 inline finding(s) on 644438397e735d3f4f8e2fed1942ad67e611bf89; the summary is in this lane's pull request comment.

claude-lane: claude-review

The reachability pass ran one merge-base per revert line in the branch's
whole history; the report only uses pairs for deployments at or after
--since, so filter the first-parent records to that window first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kyle-sexton
kyle-sexton added this pull request to the merge queue Nov 1, 2026
Merged via the queue into main with commit 5c22cdd Nov 1, 2026
45 checks passed
@kyle-sexton
kyle-sexton deleted the replace-11904-measure-delivery branch November 1, 2026 14:56
@github-actions

github-actions Bot commented Nov 1, 2026

Copy link
Copy Markdown
Contributor

Post-merge mutation testing

Killed 3, survived 5, timeout 0, no coverage 0, invalid 0, not run 0.
Covered-code score 38%; mutation score 38%.

File Killed Survived Timeout No coverage Invalid Not run
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh 3 5 0 0 0 0

Surviving mutants

Location Operator Disposition Cause
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh:128 ROR productive input-gap
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh:169 ROR productive input-gap
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh:247 ROR productive input-gap
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh:263 ROR productive input-gap
plugins/work-items/skills/measure-delivery/scripts/delivery-metrics.sh:262 ROR productive input-gap

The run's summary has the full report.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(work-items): add /work-items:measure-delivery with the five DORA delivery metrics

1 participant