Skip to content

development → staging - #780

Merged
gaidheal1 merged 9 commits into
stagingfrom
development
Aug 14, 2026
Merged

development → staging#780
gaidheal1 merged 9 commits into
stagingfrom
development

Conversation

@gaidheal1

@gaidheal1 gaidheal1 commented Aug 14, 2026

Copy link
Copy Markdown
Member

Summary

Fixes and UX improvements

  • Task editing now shows a parent task as a removable chip, with the due date split into separate date and time fields.
  • Task timestamps (created/modified/completed) moved into a small tooltip on the edit view instead of cluttering the task summary.
  • "Add a subtask" now opens the same familiar task editor used everywhere else, and only creates the subtask once you've actually given it a name.
  • Behind the scenes: linking up player presence to character activity again — being online and active applies XP bonuses in real time, and pausing an activity briefly keeps its bonus active for a few minutes instead of dropping it instantly.

Developer experience and quality

  • Added Storybook coverage for a broad set of shared UI components (lists, achievements, mode switcher, banners, search input, tutorial modal, toast manager, and layout chrome: navbar, nav drawer, footer, infobar), plus supporting decorator/mock infrastructure for auth and query-client context.
  • Refactored activity-timer internals (import/dependency cleanup) and bumped mkdocs/mkdocs-material.

Technical notes

  • 5d894c2 re-enables previously-disabled activity XP modifier signals (handle_online_login, set_activity_active_modifiers, schedule_online_end), routed through a shared activate_link_modifier helper; stopping an activity now uses a 5-minute grace window (schedule_modifier_end) before ending its activity_active modifier, and restarting within that window refreshes the existing modifier row instead of recreating it.
  • No new migrations or env vars in this batch.

gaidheal1 and others added 9 commits August 14, 2026 10:10
…eation

- Display a parent task chip in the task edit modal (with remove/select),
  and split the due-date input into separate date/time fields (#762).
- Move task timestamp display (created/modified/completed) out of the
  inline summary into a clock-icon tooltip on the edit modal's title row
  (#764).
- Rework "Add a subtask": clicking it now opens the same task edit/detail
  modal used everywhere else, seeded with a blank, unsaved draft, instead
  of adding a "Subtask of X" chip before the task input (#774). The draft
  is only actually created once its name has been genuinely edited (via
  usePlayerItemModal's existing no-op-edit guard); closing the modal
  without editing the name discards the draft with no API call.
- Add PlayerItemList `hiddenItemIds` (keep an item deep-linkable without
  rendering it as a row) and `onModalClose` (notify the caller which item's
  modal just closed) to support the draft-subtask flow.
Parent task chip, due-date split, timestamp tooltip, subtask creation
…ivity

Re-enables handle_online_login, set_activity_active_modifiers, and
schedule_online_end (disabled in 870afd2 pending premium-XP isolation),
routing all modifier creation through the shared activate_link_modifier
helper (extended with a scope param so it can target PLAYER as well as
CHARACTER modifiers).

Stopping an activity no longer ends its activity_active modifier
immediately - ends_at is pushed out by a 5-minute grace window via
schedule_modifier_end, and starting another activity within that window
refreshes the same modifier row instead of dropping and reactivating it.

Adds progression.ap.get_productivity (baseline constant x live active
XpModifier multiplier) and Character.get_productivity as the authored,
live-read productivity signal called for in the issue - deliberately not
derived from lifetime AP total.

Closes #750

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N8Siy6MEuhLq9kCa3ujBwf
Adds stories for the pure, prop-driven component gaps identified in #749:
PlayerItemList, List/Li, Achievements, ModeSwitcher, EntitySearchInput,
TutorialModal, WaitlistForm, StaticBanner, BackToTopButton, ToastManager.

Also adds the minimal decorator infra these turned out to need:
- withQueryClient (global): a fresh, retry-off QueryClient per story, for
  components that call TanStack Query hooks directly or transitively
  (EntitySearchInput, TutorialModal both do, despite being listed as
  context-free in the issue's audit).
- withGameContext + testUtils/mockGameContext: a minimal GameContext mock
  for EntitySearchInput's indirect useGame() dependency (via useFeatureFlag).

ActivityInput was left out of this batch - it now pulls in useGame,
useSupportFlow, useFeatureFlag and timer state, which is bucket-2/3-level
complexity, not the "prop-driven, no context" component the issue described.
Stories Navbar, NavDrawer, Footer, and Infobar - the layout chrome
called out as bucket 3 in #749, step 4 of its suggested approach.

- Split AuthContext's raw context into context/authContext.ts,
  mirroring the existing GameContext.tsx/gameContext.ts split, so it
  can be mounted directly in stories without pulling in AuthProvider's
  real bootstrap/fetch logic.
- Add testUtils/mockAuthContext.ts (mockAuthContextValue({authenticated,
  ...overrides})) and .storybook/decorators/withAuthContext.tsx,
  following bucket-1's conventions.
- Navbar.stories.tsx: LoggedOut, LoggedIn, WithAnnouncements (play test
  opens the popover), WithMapEnabled - wrapped in MemoryRouter + a
  seeded QueryClient (appConfig, announcements) + mock
  AuthContext/GameContext.
- NavDrawer.stories.tsx: LoggedIn (play test clicks close, asserts
  onClose fires), LoggedOut, WithMapEnabled, Closed.
- Footer.stories.tsx: LoggedOut (play test asserts no Admin Panel
  link), LoggedIn, StaffUser (play test asserts the link appears).
- Infobar.stories.tsx: Default (play test asserts name/level),
  PremiumPlayer, Loading, NoPlayer (renders null).

Verified via eslint, tsc --noEmit, and storybook build (all clean),
plus vitest on AuthContext.test.tsx and the Navbar/NavDrawer unit
tests (24 passing) to confirm the context split didn't break anything.
test:storybook (Playwright-driven play functions/a11y) still can't run
in this sandbox - no sudo for Chromium's system deps - run
locally/CI before merging.

Remaining gap per #749: bucket 2 (data-fetching panels - Categories/
Projects/Skills/Tasks/ActivitiesPanel, ComingSoonPanel, NotesPanel,
DetailSurface, SupportFlow screens, UnifiedTimerHome, ActivityTimeline,
CurrentActivity, CharacterCurrentActivity) and the deferred
ActivityInput. Per the issue's own plan, step 5 is to revisit whether
those need separate stories given PlayerItemList's existing coverage.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…et-1

feat: Storybook coverage — bucket 1 + layout chrome (#749)
Re-enable player-presence XP modifiers and add live character productivity
@gaidheal1
gaidheal1 merged commit fd4aa91 into staging Aug 14, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants