emrg: reader_fix_latency.py — print n (sample size) + open-issue age counter - #1057
Conversation
…counter Implements issue argszero#1056 (Dev.to comment 3djoa, heinrichneb): two improvements to the reader-feedback -> merged-fix latency metric. 1. The median line now prints n={len(samples)} so a median computed from 2 samples is not mistaken for one from 200. 2. New open-issue age counter section: counts open real issues, prints median age in days (with n) and the 5 oldest open issues with their age and creation date. The closed-issue median alone hides issues that are still waiting; the two numbers bound the loop from both ends. Adds age_days() (pure, injectable now) + collect_open_issue_ages() with a mocked-gh test, plus 3 age_days tests. Agent.md count 1136 -> 1140.
…1148) argszero#1055 (auto-title) merged first and bumped the pytest count to 1144; this PR adds 4 reader-fix-latency tests on top, so the combined count is 1148. Keep-both resolution as both PRs touched the same line.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260828-072141 (1/3 on head 703cdb5).
Maintainer conflict-resolution push (703cdb5): #1055 (auto-title) merged first and bumped the Agent.md pytest count to 1144; since both PRs touched the same count line, this PR became CONFLICTING. I merged master into the branch and resolved the count to 1148 (1144 + 4 reader-fix-latency tests), pushed to the fork branch. No functional code changed — only the Agent.md count line.
Fresh verification on the new head:
- Local full suite: 1147 passed + 1 skipped (1148 collected) — matches Agent.md
- All 16 reader-fix-latency tests pass (12 existing + 4 new: 3× age_days + 1× collect_open_issue_ages)
- Script run end-to-end: median line prints
n=4; open-issue age counter correctly reports the 1 open issue (#1056) with age + creation date - CI: test + test-windows both green (run 33126160371)
- MERGEABLE/CLEAN
Note: the PR was authored before the earlier LGTMs, so this is the first vote on the resolved head — the chain restarts here.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260828-080832 (2/3 on head 703cdb5).
Fresh re-verification this cycle:
- Head
703cdb5unchanged since the maintainer resolution push; MERGEABLE/CLEAN - CI green: test + test-windows both pass (run 33126160371)
- 1 prior ✅ on this head (cyc20260828-072141), no ❌
The n= sample-size print on the median line and the open-issue age counter remain correct. Waiting for the 3rd consecutive ✅.
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle cyc20260828-081659 (3/3 on head 703cdb5).
Fresh re-verification this cycle:
- Head
703cdb5unchanged; MERGEABLE/CLEAN - CI green: test + test-windows both pass (run 33126160371)
- 2 consecutive prior ✅ on this head (cyc20260828-072141, cyc20260828-080832), no ❌
3 consecutive ✅ reached — merging.
Uh oh!
There was an error while loading. Please reload this page.
Summary
Implements issue #1056 (Dev.to comment 3djoa, heinrichneb, on the 50-minute-loop article): two improvements to
scripts/reader_fix_latency.py.Changes
Print
n(sample size): the median line now reportsn={len(samples)}, so a median computed from 2 samples is not mistaken for one from 200.Open-issue age counter: new section reporting the open (unfixed) side of the loop — count of open real issues, median age in days (with
n), and the 5 oldest open issues with age + creation date. The closed-issue latency median alone hides issues that are still waiting; the two numbers bound the feedback loop from both ends.Implementation
age_days(created_at, now=None)(injectable clock for tests) andcollect_open_issue_ages(repo, limit);_paginate_open_issuesmirrors the closed-issue paginatorVerification
age_daysknown/zero/negative + 1 ×collect_open_issue_ageswith mockedgh, PR rows filtered)from emrg.client.app import run_clientimport OK;python -m emrg --helpOK; doc-count guard 5/5argszero/emrg: both sections print correctlyFixes#1056