Skip to content

[QA] Streaming widget — full exploratory sweep (ties to PR #256) #263

Open

Description

@goodbounties-nanoclaw-agent

Summary

@goodwidget/streaming-widget has never had a recorded QA pass. PR #256 (light-theme parity + button/primitive alignment, closes #255) adds the first full set of Storybook fixtures and gives every flow light/dark coverage — this is the first point where a full sweep is actually possible. Goal: find out what's actually wrong with the widget, not just whether #256 broke anything.

Branch to test against: copilot/goodbounty-patch-streaming-widget-light-theme (PR #256).

Bounty Details

Bounty Reward: 200.000G$'s
A generic template can be seen here to file your reports; https://github.com/GoodDollar/.github/blob/master/.github/ISSUE_TEMPLATE/GoodBounties-QA-Template.md

you can also check a recent QA report flow in this pull-request and what is expected: GoodDollar/GoodSDKs#69

How to run it

pnpm install
pnpm storybook

Each fixture below is a Storybook story. Load it directly via:

/iframe.html?id=qa-streamingwidget-runtime-fixtures--<story-id>&viewMode=story&args=defaultTheme:<theme>

Theme-overrides playground uses a different story id (widgets-streamingwidget-theme-overrides--playground). Check both defaultTheme:dark and defaultTheme:light for every fixture, and both mobile (390px) and desktop (1280px) widths for the populated state.

Checklist — every fixture, both themes

Connection / navigation

  • no-wallet — disconnected wallet gate
  • wrong-chain — unsupported network prompt
  • populated-state — tab navigation across Streams / History / Pools / Balances

Streams list

  • loading-state — loading streams + loading history
  • empty-state — empty streams + empty history
  • error-state — error + retry, streams + history
  • populated-state — incoming / outgoing / all filters
  • Stream details expand / collapse
  • History — active filter / ended filter

Create / update / cancel stream

  • create-update-invalid-input — validation messaging, frequency dropdown options
  • create-update-pending / create-update-success / create-update-failure
  • cancel-stream-pending / cancel-stream-failure
  • update-stream-form

Pools

  • pool-claim-state — claimable amount + claim button
  • pool-connected-state — connected, no claim/connect actions shown
  • pool-claim-pending / pool-claim-success / pool-claim-error
  • pool-claimable-amount-error + retry → loading

Balances

  • base-sup-balance-and-reserve — SUP balance + reserve locker (available/staked)
  • non-base-sup-reserve-disabled — off-Base behavior

Theme / layout

  • Theme-overrides playground — light_*/dark_* keys both register
  • Mobile (390px) and desktop (1280px) — populated state at minimum, note anything that breaks at other widths

Known open items from #256 — confirm still outstanding or note if resolved

  • Light-theme button contrast: white on light_Button ≈ 2.4:1, $primary secondary text ≈ 2.3:1 (shared packages/ui preset, also affects GovernanceWidget — don't fix here, just confirm)
  • SUP Reserve off-Base still renders data instead of being hidden/disabled ([GoodBounty] Finalize Streaming Widget PR #36)
  • Pool refresh after receipt — needs a live wallet, not coverable via Storybook; note if this can be checked another way

Free exploration

The checklist above is derived from existing Playwright fixtures — it won't catch everything. Spend time outside it: resize mid-interaction, switch tabs mid-load, toggle theme mid-flow, anything else that seems off. Record anything found even if it's not on this list.

How to report findings

Submit one report here linking PR #256. Record Pass, Fail, Blocked or Not run for each check in both themes, including the required viewport checks. Include the tested commit, browser/OS, screenshots or recordings, and expected versus actual behavior for failures. Link reproducible bug reports; don’t duplicate known issues. Summarize exploratory findings and whether the known open items remain reproducible.
Finish with Ready or Hold for the tested scope and list remaining gaps. Storybook results do not verify live transactions or pool refresh after a real receipt. Finding bugs does not prevent QA completion; blocked or skipped required checks need maintainer acceptance. QA does not authorize merge or deployment.

Activity

  1. livastic-vm3-primary-tmp-260920 commented on Oct 21, 2026

    @livastic-vm3-primary-tmp-260920

    Interested in this specific QA assignment, subject to clarifying its bounty terms before undertaking the full fixture sweep.

    I can test the existing PR #256 Storybook branch without a production wallet: both themes, the listed state fixtures, populated-state mobile (390px) and desktop (1280px), and focused mid-transition/tab-switch checks. I would provide a concise fixture-by-fixture pass/fail matrix, screenshots of concrete regressions, and separate reproducible issues for verified defects. I will label any state that requires live wallet transactions Not tested rather than claim onchain coverage.

    I work as one AI-assisted QA operator (not multiple independent contributors). Is this task open to that participation, and is a specific sponsor-funded reward attached to issue #263? Before starting, could you confirm amount and currency/network, eligible payout/onboarding route, whether prior assignment is needed, and what report/acceptance criteria release the award? If the QA has no funded budget, that's fine—I'll treat it as an unpaid invitation rather than a promised payout.

    No wallet keys, transfers or production customer data are required for the proposed Storybook-only scope.

  2. Khemmie-Ray commented on Oct 21, 2026

    @Khemmie-Ray

    Can I work on this?

  3. Adejokemi commented on Oct 21, 2026

    @Adejokemi

    Hi! I'd like to work on this issue. Could you assign it to me?

  4. Wills17 commented on Oct 21, 2026

    @Wills17

    Hi. I’m interested in this issue and would appreciate it if you could assign it to me. Thank you!

  5. L03TJ3 commented on Oct 21, 2026

    @L03TJ3
    Contributor

    @Khemmie-Ray You are assigned

  6. moved this from Prepare AI Task to In Progress in GoodBountieson Oct 21, 2026
  7. Khemmie-Ray commented on Oct 22, 2026

    @Khemmie-Ray

    QA report: Streaming widget full exploratory sweep (#263)

    Linked PR: #256

    • Commit: 4625089809ad5e50b232bce8cf27a2f9dd162de2 on copilot/goodbounty-patch-streaming-widget-light-theme
    • Setup: [Browser + version], macOS M2 Pro, Node v26.9.0, pnpm v12.14.0. Commands: pnpm install, pnpm build, pnpm storybook
    • Verdict: Hold — three Fails open (wrong-chain overflow, outlined-button labels, SUP Reserve off-Base), none blocking but all visible.

    Storybook fixtures only. No live wallet or transactions used.

    Case results

    Results: Pass / Fail / Blocked / Not run

    Connection / navigation

    ID Case Dark Light Observation and evidence Finding / next action
    C-01 no-wallet: disconnected wallet gate Pass Pass Gate card and Connect Wallet button render in both themes; gate stays across all four tabs. Connect Wallet click does nothing, as expected: fixture uses a mock adapter where connect is a no-op. No console errors. None
    C-02 wrong-chain: unsupported network prompt Fail Fail "Unsupported network" card renders with Switch to Celo / Switch to Base buttons. "Switch to Base" overflows the card's right edge at 390px. See FIND-01
    C-03 populated-state: tab navigation Streams / History / Pools / Balances Pass Pass Streams and History both show populated data with an accurate filter option. Outlined filter buttons lose their label on hover/press. See FIND-02

    Streams list

    ID Case Dark Light Observation and evidence Finding / next action
    S-01 loading-state: streams + history loading Pass Pass Loading state renders in both themes, consistent across both tabs. None
    S-02 empty-state: streams + history empty Pass Pass Empty state renders in both themes, consistent across streams and history. See FIND-02
    S-03 error-state: error + retry, streams + history Pass Pass Error state renders in both themes, consistent across streams and history. See FIND-02
    S-04 populated-state: incoming / outgoing / all filters Pass Pass Filters work for incoming and outgoing in both themes. See FIND-02
    S-05 Stream details expand / collapse Pass Pass Expand renders populated data in both themes; collapse keeps a concise summary. See FIND-02
    S-06 History: active filter / ended filter Pass Pass Filters work for active and ended in both themes. See FIND-02

    Create / update / cancel stream

    ID Case Dark Light Observation and evidence Finding / next action
    F-01 create-update-invalid-input: validation messaging, frequency dropdown options Pass Pass Validation message shows for an invalid recipient address, but a zero-value input produces none. Confirm whether zero-value should be rejected; if so, missing validation is a minor gap.
    F-02 create-update-pending Pass Pass Loading state signifies the pending state and renders in both themes. None
    F-03 create-update-success Pass Pass Success message is visible. See FIND-02
    F-04 create-update-failure Pass Pass Failure message is visible. See FIND-02
    F-05 cancel-stream-pending Pass Pass Loading state depicts pending in both themes. None
    F-06 cancel-stream-failure Pass Pass Failure message and cancel button are visible. See FIND-02
    F-07 update-stream-form Pass Pass Form renders properly in both themes. None

    Pools

    ID Case Dark Light Observation and evidence Finding / next action
    P-01 pool-claim-state: claimable amount + claim button Pass Pass Claimable amount and button render in both themes. See FIND-02
    P-02 pool-connected-state: connected, no claim/connect actions Pass Pass Connected state is visible; no claim or connect action present, only a disconnect button. None
    P-03 pool-claim-pending Pass Pass Pending badge is visible in both themes. None
    P-04 pool-claim-success Pass Pass Done badge is visible in both themes. None
    P-05 pool-claim-error Pass Pass Error message and failed badge render in both themes. None
    P-06 pool-claimable-amount-error + retry → loading Pass Pass Error message and a retry button that leads to a loading state render in both themes. See FIND-02

    Balances

    ID Case Dark Light Observation and evidence Finding / next action
    B-01 base-sup-balance-and-reserve: SUP balance + reserve locker (available/staked) Pass Pass Base balance and reserve locker address are visible in both themes. None
    B-02 non-base-sup-reserve-disabled: off-Base behavior Fail Fail SUP Balance and SUP Reserve cards render identically on Celo (chain 42220) and Base (chain 8453), both labelled read-only Base. Only the Super Token Balance tracks the connected chain (712.1 SUP on Base vs 128.5 G$ on Celo); the reserve section does not change or disable off-Base. Tracked as K-02 / GoodWidget #36. See K-02. Confirm expected off-Base behavior (hide vs disable vs read-only), then gate the reserve cards on chain === Base if they should not show off-Base.
    Image

    Image |

    Theme / layout

    ID Case Dark Light Observation and evidence Finding / next action
    T-01 Theme-overrides playground: light_* and dark_* keys both register Pass Pass With a brand preset applied (Teal, Cobalt), overrides register in both themes: dark mode picks up the dark_* keys and light mode the light_* keys. Neither prefix is dropped and values do not bleed across themes. None
    T-02 populated-state at 390px (mobile) Pass Pass Content renders appropriately within this viewport. None
    T-03 populated-state at 1280px (desktop) Pass Pass Content renders appropriately within this viewport. None
    T-04 Other widths (note breakpoints that break) Fail Fail wrong-chain fixture breaks at 390px (Switch to Base overflow). See FIND-01

    Known open items from #256

    Item Status Evidence
    K-01 Light-theme button/text contrast (white on light_Button, $primary secondary text) Still reproducible — measured ratios: 2.4:1, 2.3:1 (both below WCAG AA: 4.5:1 text, 3:1 UI). From the shared packages/ui preset, so also affects GovernanceWidget. See FIND-03
    K-02 SUP Reserve off-Base still renders data (#36) Still reproducible — renders read-only Base data on Celo instead of hiding/disabling; identical across chains. See B-02. B-02 screenshots
    K-03 Pool refresh after receipt Not run: requires live wallet and real receipt, not coverable in Storybook. Alternative: verify via testnet wallet against a live deployment, or an E2E test with a forked-chain/mocked receipt event.

    Findings

    FIND-01: Switch to Base button overflows the Unsupported network card

    • Case / impact: C-02, T-04, both themes, at 390px. Button breaks out of its container; layout looks broken on the network-switch prompt.
    • Reproduction steps: Open wrong-chain story, set viewport to 390px.
    • Expected vs actual: Expected both buttons to fit inside the card (wrap or shrink when space is tight). Actual: "Switch to Base" extends past the card border.
    • Evidence:
    Image

    FIND-02: Outlined buttons lose their label in hover / pressed states

    • Case / impact: C-03, S-02, S-03, S-04, S-05, S-06, F-03, F-04, F-06, P-01, P-06, both themes. Button labels become invisible when interacted with, so users can't tell what the button does.
    • Instances:
    Button Location Story Trigger
    Connect Pools pool-claim-state pressed / focus
    Refresh History populated-state pressed / focus
    Update Streams → expanded stream populated-state pressed / focus
    All / Active / Ended filters History empty-state pressed / focus
    All / Active / Ended filters History error-state hover
    All / Incoming / Outgoing filters Active streams populated-state hover
    Reset Streams → create/update create-update-success hover
    Retry / Connect Pools → claimable amount error pool-claimable-amount-error hover
    • Reproduction steps: Open populated-state, go to History, press Refresh. Or open error-state, go to History, hover over the All / Active / Ended filter.
    • Expected vs actual: Expected labels to stay readable in every state. Actual: background fills with the primary color while the label stays primary-colored, so the text disappears.
    • Evidence: [before] Image

    [after] Image

    FIND-03: Light-theme contrast below WCAG AA (shared preset, do not fix here)

    • Case / impact: Light theme. White on light_Button ≈ 2.4:1 and $primary secondary text ≈ 2.3:1, both below WCAG AA (4.5:1 for text, 3:1 for UI components). Originates in the shared packages/ui preset, so it also affects GovernanceWidget.
    • Reproduction steps: Open any light-theme story with a primary button / secondary text and measure foreground-to-background contrast.
    • Expected vs actual: Expected ≥ 4.5:1 for text. Actual: 2.4:1 and 2.3:1.
    • Finding / next action: Confirmed, do not fix in this widget. Raise against the shared packages/ui preset so the correction covers both GoodWidget and GovernanceWidget.
    • Evidence: [add contrast-checker screenshots if available]

    Exploratory notes

    • Wrong chain: badge shows the raw chain ID ("Chain 1") rather than a network name.

    Verdict

    Hold for the tested Storybook scope.

    Remaining gaps: Live transactions and pool refresh after a real receipt (K-03) are not verified by Storybook. No cases Blocked; K-03 is the only Not run.

  8. L03TJ3 commented on Oct 23, 2026

    @L03TJ3
    Contributor

    thanks @Khemmie-Ray
    for now okay, next time please post the QA report in the relevant pull-request that is requested for.
    if you need permissions to do this or comment on the open-pull-request just ping me and ask

  9. L03TJ3 commented on Oct 23, 2026

    @L03TJ3
    Contributor

    @blueogin up for confirmation, review and potential copilot pick-up

  10. cyzcz commented on Nov 7, 2026

    @cyzcz

    Submitted PR #291 (#291) resolving the remaining QA Hold item B-02 / K-02 (SUP Reserve off-Base Base only badge and guidance in BalancesTab.tsx), the exploratory raw Chain 1 header badge (<WidgetTabs chainId={...} /> in StreamingWidgetView.tsx), and explicit light_* / dark_* sub-theme registration in packages/streaming-widget/src/config.ts.

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

Metadata

Metadata

Assignees

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions