Repository navigation
Description
What
Make lane outcomes read the same way everywhere, and cheaply. Today three readers fetch check-run annotations with one extra REST call per run:
- the pr-unblock dispatchers (
limit-stop.mjsthroughlistAnnotationsindispatch.mjsandfeedback-dispatch.mjs) - the morning brief's Lanes section (
--lane-read-limit, 200 runs by default; past that the section readsPARTIAL) - the babysit scripts
Researched against GitHub's docs (verified 2026-10-17), the posted check run's output is the better carrier for a machine record. Annotations are better kept for findings tied to a file and line.
Proposal (fewest moving parts first)
- Posted check runs (pr-pipeline lanes).
report-check-runwrites the lane record as one line of stablekey=valuetokens at the top ofoutput.summary, for examplelane=pr-unblock activity=… class=rate-limit resets=… turns=… max-turns=…. The JSON form goes inoutput.text, andexternal_idgets<lane>:<run_id>:<attempt>. Readers parse it from the check-run list they already fetch, which removes the per-run annotations call. Keep the feat(pr-pipeline): write the lane record into check-run annotations and lane.json #7766 annotation for one release so readers can switch over, then remove it.- Basis: docs.github.com/en/rest/checks/runs.
summaryandtexteach have a 65535-character maximum, per the OpenAPI description, and the 2026-03-10 version description gives the same limit. List endpoints returnoutputand cannot filter onexternal_id.
- Basis: docs.github.com/en/rest/checks/runs.
- Job-level lanes (ci-workflows reusable workflows: review, intake). These post no separate check run, so the
report-lane-outcomeworkflow-command annotation remains their only record. Keep it, but treat it as capped: the toolkit docs state 10 per type per step and 50 per job. GitHub's REST page names only warning and error per step, an unresolved conflict. User reports say annotations past the cap are dropped silently, but no primary source confirms that.- Basis: actions/toolkit
docs/problem-matchers.md; docs.github.com/en/rest/checks/runs.
- Basis: actions/toolkit
- Job summaries are for humans only. No REST or GraphQL endpoint returning their content was found (MEDIUM; checked: the OpenAPI description, GraphQL CheckRun, community discussion #27649). No lane reads one, and none should start.
- Retention. Since 2026-10-01, check runs and statuses follow the Actions retention setting, at most 90 days on public repositories. The morning brief's 7-day window fits that. Build no archive unless a consumer needs more than 90 days.
- Basis: GitHub changelog, 2026-10-01.
- Log line.
report-lane-outcomealready prints the record to the log, where the step-logs endpoint (actions: read) can read it. No change needed.
Done when
report-check-run writes the summary line, and the dispatchers and the morning brief read the record from the check run's output without an annotations call. Existing restarts keep working through the switch-over.
Evidence
The research record (memory tier, not committed) holds 16 accepted claims, three Gaps at MEDIUM and one at LOW, and passed verification on 2026-10-17. It also found that a check run posted with the GITHUB_TOKEN probably cannot use requested actions (LOW, unverified), so do not design around them.
🤖 Generated with Claude Code
Activity
github-actions commentedon Oct 17, 2026
Thanks for the detailed write-up. As understood: this proposes moving the lane record's primary carrier from check-run annotations to the posted check run's
output(summary line + JSON text), keeping annotations only for file/line findings and as a one-release migration bridge for #7766's readers (pr-unblock dispatchers, morning brief, babysit scripts). Job-level lanes (review, intake) keep thereport-lane-outcomeannotation since they post no separate check run. Done-when criteria and research basis are already included, so this reads as actionable rather than needing more info.No exact duplicate found; it's a direct follow-up to the just-merged #7766 (and references #7765), not a repeat of either.
Automated triage. A maintainer reviews it.