The CI gate and the dashboard do not use the transient/permanent split of a failed forge read #781

Open
opened 2026-10-11 00:18:05 +00:00 by claude · 1 comment
Member

Found during IW-513, which gave the forge clients a TrackerError that tells Unreachable (transient) from Refused (permanent). Two readers still treat every failure the same way. Items:

  • Let the CI gate stop at once on a Refused read instead of treating every read failure as "forge silent". — IW-513 FOLLOW-UPS.md
  • The dashboard could keep a cached pull request on Unreachable instead of dropping it, now that the client says the failure is transient. — IW-513 FOLLOW-UPS.md
Found during IW-513, which gave the forge clients a `TrackerError` that tells `Unreachable` (transient) from `Refused` (permanent). Two readers still treat every failure the same way. Items: - [ ] Let the CI gate stop at once on a `Refused` read instead of treating every read failure as "forge silent". — IW-513 FOLLOW-UPS.md - [ ] The dashboard could keep a cached pull request on `Unreachable` instead of dropping it, now that the client says the failure is transient. — IW-513 FOLLOW-UPS.md
Author
Member

Intake: needs-input

1. The dashboard already keeps a cached pull request when a forge read fails. What should the dashboard item change?

The item says the dashboard drops a cached pull request when a read fails. It does not. The card and the cache both fall back to the stale entry on every failure (WorktreeCardService.scala, PullRequestCacheService.scala). The dashboard readers also reduce the error to a plain message, so the kind of failure is lost.

case Left(_) => // Fetch failed - fall back to cached if available

  • a) Drop the dashboard item. This issue covers only the CI gate: stop at once on Refused. The dashboard does not change.
  • b) Act on Refused in the dashboard. Keep the cache on Unreachable. On Refused, drop the entry or mark the card. This changes what users see when authentication fails or a repository is missing.
  • c) Only show the failure kind on the card. Keep the cache in both cases. The card says "forge unreachable" or "forge refused".

Recommended: a) — the behaviour the item asks for exists already, and b) or c) is new work that nobody has asked for.

Answer in a comment on this issue, per number, for example "1: a", or in your own words; intake reads it on its next iteration.

Intake: needs-input ### 1. The dashboard already keeps a cached pull request when a forge read fails. What should the dashboard item change? The item says the dashboard drops a cached pull request when a read fails. It does not. The card and the cache both fall back to the stale entry on every failure ([WorktreeCardService.scala](https://code.iterative.works/iterative-works/iw-cli/src/branch/main/dashboard/jvm/src/application/WorktreeCardService.scala#L170-L180), [PullRequestCacheService.scala](https://code.iterative.works/iterative-works/iw-cli/src/branch/main/dashboard/jvm/src/application/PullRequestCacheService.scala#L93-L100)). The dashboard readers also reduce the error to a plain message, so the kind of failure is lost. > case Left(_) => // Fetch failed - fall back to cached if available - **a) Drop the dashboard item.** This issue covers only the CI gate: stop at once on `Refused`. The dashboard does not change. - **b) Act on `Refused` in the dashboard.** Keep the cache on `Unreachable`. On `Refused`, drop the entry or mark the card. This changes what users see when authentication fails or a repository is missing. - **c) Only show the failure kind on the card.** Keep the cache in both cases. The card says "forge unreachable" or "forge refused". **Recommended: a)** — the behaviour the item asks for exists already, and b) or c) is new work that nobody has asked for. Answer in a comment on this issue, per number, for example "1: a", or in your own words; intake reads it on its next iteration.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
iterative-works/iw-cli#781
No description provided.