Skip to content

web-og ResultCard ignores result.partial, so a truncated traversal unfurls as a final answer #160

Description

@lukaso-bot

Found while reviewing #158 (thread on packages/web-og/src/index.tsx:242). Pre-existing on main, not introduced by that PR, so it is split out rather than bundled into it.

What

ResultCard in packages/web-og/src/index.tsx never reads result.partial. The web page does — packages/web/src/ui/result-card.tsx renders PartialResult (:23) and BestEffortBanner (:31) — so the two surfaces disagree about the same result, and the one that disagrees is the one that gets screenshotted into Slack, X and GitHub unfurls.

Two shapes render wrong today:

  1. partial with firstRelease: null. The card shows the green --ship dot, "First released in", and not yet released. A truncated traversal is not evidence the commit is unreleased. If the commit is released, the unfurl asserts the opposite of the truth.
  2. partial WITH a firstRelease. The card shows the green SHIPPED badge with no caveat. The gallop hit is the release we happened to land on, and the bisect that would confirm no EARLIER release contains the commit is exactly what the soft deadline cut short — so v2.0.0 can unfurl as final when v1.9.0 was the true earliest.

That is the CLAUDE.md guardrail — "Partial state ≠ 'not yet released'" — broken on the share surface.

Why it is not urgent-but-still-real

#158 gives both shapes a 300s PENDING_CACHE instead of the 24h pin, so a mislabeled card now lives 5 minutes at a time rather than a day. Right direction, but the copy is still wrong for those 5 minutes, and unlike the web page there is no caveat anywhere on the PNG.

Interaction with the PRs in flight

So: fix this with #156, not before it. Fixing it before #144 lands would be writing copy for a path #144 closes; fixing it after #156 lands without this would reopen the path with the same wrong copy.

Shape of the fix

Mirror what result-card.tsx already does, within the OG card's space budget:

  • partial + firstRelease → keep the tag, replace the SHIPPED badge with a "best effort" / "not confirmed earliest" treatment.
  • partial + null → do not say "not yet released"; say the lookup was cut short.

Guard it with a routing test per shape asserting the rendered copy, alongside the lifetime test added in #158 (a soft-deadline partial with NO release renders the not-yet copy, PENDING-cached), which will need updating in the same commit.

Related: #159 (the same partial pinned as terminal on the web + badge surfaces), #151, #156.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions