Show the problems inbox that a source stopped reporting
ProblemResponse.stale has been computed and serialised on every row since
the inbox was built; rowHtml never read it. A problem whose source has gone
quiet looked identical to one still being reported, while it kept climbing
the painhours ranking.
The described screen already renders the badge, so the note on row_for that
said the shipped screen still drops it is corrected in the same pass.
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
2 files changed,
+3 insertions,
-2 deletions
| 121 |
121 |
|
<span class="badge badge--xs" data-color="cyan">${esc(p.source)}</span>
|
| 122 |
122 |
|
${p.projectName ? `<span class="badge badge--xs" data-color="blue">${esc(p.projectName)}</span>` : ''}
|
| 123 |
123 |
|
${settled ? `<span class="badge badge--xs" data-color="${statusColor(p.status)}">${esc(p.status)}</span>` : ''}
|
|
124 |
+ |
${p.stale ? `<span class="badge badge--xs" data-color="yellow" title="The source's latest pull did not report this problem. Kept rather than deleted, so a source being briefly unreachable cannot erase triage history.">Stale</span>` : ''}
|
| 124 |
125 |
|
<span class="problem-age" title="${escAttr(p.sourceRef)}">${esc(p.age)}</span>
|
| 125 |
126 |
|
${tags}
|
| 126 |
127 |
|
</div>
|
| 200 |
200 |
|
/// source being briefly unreachable must not erase triage history. Nothing in
|
| 201 |
201 |
|
/// `problems.js` reads the field. So the backend computes a fact for the user,
|
| 202 |
202 |
|
/// serialises it, and the screen drops it on the floor. Described, it is a
|
| 203 |
|
- |
/// badge like any other. Filed rather than only fixed here, because the shipped
|
| 204 |
|
- |
/// screen has the same gap until it retires.
|
|
203 |
+ |
/// badge like any other. The shipped screen carries the same badge as of
|
|
204 |
+ |
/// 2026-08-10, so the two agree until `problems.js` retires.
|
| 205 |
205 |
|
fn row_for(
|
| 206 |
206 |
|
problem: &Problem,
|
| 207 |
207 |
|
project: Option<&str>,
|