You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes 3 issues reported after v2.1.1:
1. 'Dismiss 之后框还是红的' (rail stays red after banner dismiss)
Root cause: `health` is server-derived from queue state. Frontend dismiss
only hides the banner row; rail color stayed bright red/amber even after
user acknowledged.
Fix: new hook `useAllBannersDismissed(keys)` subscribes to the same
sessionStorage + custom-event stream the banner uses. When every banner
on a card has been dismissed, the rail and card-tint drop to opacity-40
(still the same semantic color, just visually quiet). If a new banner
appears (count changes → new signature → new key → not-yet-dismissed),
the rail un-dims automatically. Exports `bannerKey()` from expandState
so banner and card agree on the storage key format.
2. '卡片点不开了,只能看概况' (card body no longer clickable)
Root cause: in v2.1.1 I moved the expand toggle onto the `▾ more` text
button alone and removed onClick from the card <div> itself. Users
instinctively click anywhere on the card and got no response.
Fix: restore `onClick={onToggleExpand}` on the card body. All inner
interactive regions (banner [×], section headers, session/job items,
action buttons) already call `e.stopPropagation()` so clicking a Retry
button or expanding a section does not also toggle the whole card.
Added role="button", tabIndex, aria-expanded, and Enter/Space keyboard
handler for accessibility.
The `▾ more` label stays as a visual hint (no longer a button — the
whole card is the button now).
3. 'Callback 不知道对象是谁' (CALLBACK verb too generic)
Root cause: `humanize_verb` returned a hard-coded 'Resuming after
callback' for CALLBACK kind. The route already had `instances` (list of
in_progress module_instances with module_class + description) but
humanize_verb didn't receive them.
Fix: add `instances` param to humanize_verb and produce:
- 0 inst → 'Processing callback'
- 1 inst → 'Running SocialNetworkModule: syncing entity graph'
(module_class + description, truncated at 60 chars)
- N inst → 'Running 3 modules (Mod1, Mod2, Mod3)'
Same treatment extended to SKILL_STUDY and MATRIX — all three kinds now
name the active module instance instead of showing a generic label.
Tests: 80 backend pytest pass (27 v2.1 tests after adding 5 new CALLBACK
cases). tsc -b exit 0. eslint dashboard files: 0 errors.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 commit comments