A research publication owned by Workflow Inspector. Not independent coverage of its owner.
The Handoff Review

Evidence on how work moves, waits, and gets recorded.

Original research / Pilot observation study / THR-2026-001

Closed is not the same as completed: a public-issue pilot study

A short closure interval can describe triage, rejection or duplicate handling. Without the status meaning and unfinished work, “fast” can answer the wrong question.

By The Handoff Review, a Workflow Inspector publication. Published September 30, 2026 UTC. Version 1.0.0. AI-assisted; not externally peer reviewed.

Scope: 22 real public issues, four repositories searched, 3 with qualifying records. This is a small pilot, not a customer case study or a benchmark for businesses.

The finding

Of 17 issues recorded as closed, 10 were marked “not planned,” 1 “duplicate,” and 6 “completed.” Another 5 issues remained open. These are the API's recorded reasons; we did not independently verify the underlying resolution.

Public issues in the pilot

22

17 closed; 5 still open at observation.

Closed for other recorded reasons

11 of 17

Marked “not planned” or “duplicate,” not “completed.”

Median recorded closure interval

1.02 h

Closed issues only. This is not time spent working.

The median opening-to-latest-closure interval across the 17 closed issues was 1.02 hours. 15 of those 17 closed within one calendar day. Those figures describe recorded closure, not engineering effort, successful delivery or accepted handoffs.

The work a closed-only chart would leave out

The 5 still-open issues represent 22.73% of this observed cohort. Their median age at collection was 34.64 days. That is a separate measure: their eventual closure times are unknown.

Closed at observationStill open at observation
pallets/flask
8 closed / 1 open
psf/requests
7 closed / 3 open
expressjs/express
2 closed / 1 open
encode/httpx
0 closed / 0 open
Figure 1. The scale is absolute issue count, shared across repositories. Zero qualifying records means no observation for this cohort, not zero delay or perfect performance. All values also appear in the table.
August 2026 creation cohort, observed September 30, 2026 UTC. Descriptive counts, not a league table.
RepositoryIssuesClosedOpenMedian to closure (hours; closed only)Median open age (days)
pallets/flask9811.3329.23
psf/requests10731.0234.64
expressjs/express3218.2735.64
encode/httpx000Not availableNot available

The repositories were fixed before collection and are shown in that original order. We retained encode/httpx in the table despite finding no API-visible qualifying issues in the chosen creation window. We did not substitute a busier project after seeing the results.

What an operations team should take from this

The practical implication is a question to ask about your own records: what event actually means the next team accepted the work? This pilot does not establish a universal causal rule. It shows, in an inspectable example, why one status field cannot safely stand in for several different outcomes.

A public issue can close because a request was declined, was already tracked elsewhere, or was classified as complete. None of these fields records a separate receiving team's acceptance time. A customer-onboarding workflow likewise needs its own explicit definition of “ready,” “accepted” and “finished”; that design suggestion is an interpretation, not a customer outcome measured here.

Before asking whether work moved faster, make sure the event you are timing means what you think it means.

How we collected and calculated this

We preselected pallets/flask, psf/requests, expressjs/express and encode/httpx as a deliberately limited Python/JavaScript web-library cohort. Selection was based on topic and a bounded first study, not a random draw or a ranking of popularity. We requested public issue lists from GitHub, including both open and closed records, ordered by creation time. The inclusion window was August 1, 2026 at 00:00:00 UTC through, but not including, September 1, 2026 at 00:00:00 UTC.

Pull requests were excluded using GitHub's pull_request field. Each repository's pagination continued until the start boundary or the end of available results was reached. A collection limit or request failure would stop publication rather than silently publish a partial sample. Each of the four repository collections reached its boundary in one page of 100 returned items.

Collection ran from to . Each row records when its API page was received. We saved issue URLs, numbers, repository identifiers, creation/closure timestamps, state and state reason. Issue titles, bodies, comments, usernames and customer data were not retained.

For closed issues, elapsed calendar days equal the latest recorded closure timestamp minus the creation timestamp, divided by 86,400,000 milliseconds. For open issues, age uses that row's observation timestamp instead of closure. The median is the middle sorted value, or the mean of the two middle values for an even count. Tables display rounded values; downloads retain precision. These are public descriptive methods, separate from Workflow Inspector's proprietary HRI.

What this study cannot tell you

This is a small, purposively selected pilot, not a random sample, industry benchmark or ranking. The repositories differ in scope and triage practices. Repository-level numbers must not be used to judge maintainers, choose software, or infer employee performance.

We observe issue creation, current state, latest recorded closure and the reason field exposed by GitHub. We did not inspect discussions, verify a fix, measure a first human response, identify an accountable owner, reconstruct reopen cycles or observe acceptance by a downstream team. A “completed” label is a recorded classification, not independent proof that the underlying problem was solved.

The closed-only median leaves out still-open issues. Open ages are right-censored: they show elapsed age at observation, not final completion time. We do not combine them with closed durations, estimate a population completion rate, or claim that a process intervention caused these outcomes.

Public GitHub issue work is not equivalent to SaaS customer onboarding. No customer data, customer outcomes, revenue effects, proprietary HRI scores or savings estimates are included. Deleted, transferred or otherwise API-invisible issues may be absent. Live records can change after this snapshot, and the API collection is not a transactionally frozen copy of GitHub.

Sources and supporting evidence

GitHub's issue API documentation describes the returned records and explains how issue endpoints also return pull requests. The dataset provides the precise queries, observation times and a link to each original issue.

Download data and reproduce the resultsResearch methods policy

Cite this study

The Handoff Review. (2026-09-30). Closed is not the same as completed: a public-issue pilot study. THR-2026-001, version 1.0.0. Workflow Inspector / WBZKLLC, LLC. https://workflow-inspector.com/research/studies/public-issue-lifetimes-2026-08/

BibTeX citation · Version history and corrections

Commercial interest: Workflow Inspector sells workflow-analysis software and owns this publication. No vendor sponsored this study, the listed projects did not endorse it, and no independent evaluation of Workflow Inspector is claimed.