Skip to content

Bug fixes - #166

Merged
MaryWylde merged 13 commits into
mainfrom
dev
Aug 4, 2026
Merged

Bug fixes#166
MaryWylde merged 13 commits into
mainfrom
dev

Conversation

@MaryWylde

Copy link
Copy Markdown
Contributor

No description provided.

MaryWylde and others added 13 commits June 30, 2026 15:20
…lize field/control sizing

Filter tags by the owning user so accounts no longer see each other's tags,
and surface them in guest mode from the populated objects. Add a Create
Library button on the home page and disable both it and the dropdown's My
Library entry when the user can neither create nor already owns a library.
Route library cards by id to sidestep the username->id filter the API
currently 500s on. Standardize library inputs, buttons, date picker, and
dropdown to a 44px height with 16px input text, plus assorted toolbar,
overview, and step-indicator polish.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
# Conflicts:
#	src/components/UserProfile/UserProfile.tsx
- Tag labels now use self-hosted Source Sans Pro (400) via a new @font-face
  and the --font-source-sans token, overriding the inherited serif face
- Sidebar: hide the About divider when there is no About text, drop the
  fixed height on Edit buttons (keep padding 4px 8px), and show a
  "No tags yet." empty state at 50px
- LibraryToolbar: remove the owner-view divider, preserving its 16px
  spacing on the controls row

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Replace the stock code-review plugin config with a tailored setup:
concurrency cancellation, draft/fork skip, scoped permissions, a 15m
timeout, track_progress, and a KeepSimpleOSS-specific review prompt
(Pages Router, SCSS tokens, no App Router/Tailwind, UX Core data guard).
Lock --allowedTools to the inline-comment tool to resist prompt injection
from untrusted PR content.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
library: self-host Source Sans Pro for tags and polish sidebar/toolbar
ci: harden Claude PR review workflow, mirroring agents-forge-frontend
uxCoreData was hardcoded to null in the UX Core context value, so every
consumer of the shared bias list saw an empty array. On the ongoing test
the bias name comes from the test API and rendered fine, but the
description came from context and sat on a skeleton forever. Reported as
a geo/VPN issue; it affected everyone.

Populate it client-side from a slim Strapi query gated to /uxcat routes.
The full bias payload is ~1.4 MB and those screens only read number,
title, description, slug and mentionedQuestionsIds, so select just those
and cache per module. mentionedQuestionsIds is required: test-result
JSON.parses it to pick recommended reading and would throw on null.

Also fixes QuestionAnalyse, which built its list in an effect with an
empty dependency array and so never saw the data arrive.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The wrapper had no height ceiling, so on short viewports it grew past
the screen and the centred overlay clipped it at both ends — the header
and the footer buttons were unreachable. Reported against the "Our
projects" modal on /ru, but it is the shared UX Core modal, so every
consumer had it.

Cap the wrapper, stop the header shrinking, and give the body
min-height:0 — without that the flex child cannot shrink below its
content height and overflow:auto never engages. The mobile
fullHeightMobile override still wins by source order.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The downloaded file was missing PRODID, UID and DTSTAMP — all required
by RFC 5545 — used LF instead of CRLF, and wrote NaN for the dates:
nextTestTime arrives as an epoch string and new Date('1758...') is an
Invalid Date, so the timestamps never rendered. Apple Calendar rejects
the file outright; more lenient clients had been hiding it.

Replace react-icalendar-link with a small local builder that emits the
required properties, escapes TEXT per 3.3.11, leaves URL unescaped since
it is a URI value, and folds lines at 75 octets rather than characters
(Cyrillic copy overruns a character-based fold). The UID is derived from
the start time so re-downloading updates the event instead of stacking
duplicates.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Those pages keep their own controls in the bottom-right corner, where
the pill sits. Add clearance via a --ks-aux-lift custom property, set
from the uxcorePage body class that _app.tsx already applies to
/uxcore, /uxcg, /uxcp, /uxcat and /uxcore-api.

The margin goes on the root rather than the pill: the panel is
positioned against the root, so raising the pill alone would leave the
panel anchored low and overlapping it. On mobile the panel height comes
from --ks-aux-panel-h, and a JS-set custom property overrides the CSS
fallback entirely, so the lift has to be subtracted there too —
otherwise the panel keeps its full height and runs off the top of short
screens.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(uxcat): bias descriptions, modal scrolling, Apple Calendar .ics, pill offset
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown

Claude finished @MaryWylde's task in 6m 28s —— View job


Review complete

Tasks

  • Gather context (PR diff, changed files, AGENTS.md conventions)
  • Review correctness & React best practices
  • Review TypeScript quality
  • Check project conventions (AGENTS.md)
  • Check accessibility & UX
  • Check security
  • Check styling / SCSS hygiene
  • Post inline comments for specific issues
  • Post final summary

Summary

This is a well-scoped bug-fix batch touching the library tag-scoping/create-flow, the UXCAT calendar reminder (replacing react-icalendar-link with a hand-rolled RFC 5545 .ics builder + getSlimBiases), modal scroll clipping, and some widget/CSS polish. Overall quality is high — the diffs are heavily commented with the why, and several changes are genuine security/correctness fixes worth calling out:

  • src/api/library/tag/getTagsList.ts now requires userId and filters server-side (filters[user][id][$eq]), refusing to fall back to the unscoped /api/tags list. This closes a real cross-account tag leak — all 5 call sites (Sidebar.tsx, AddObjectModal.tsx) were updated consistently.
  • src/uxcore/lib/ics.ts is a solid, dependency-free .ics builder — correct RFC 5545 line folding by UTF-8 octet count (matters for Cyrillic SUMMARY/DESCRIPTION), text escaping, and a deterministic UID so re-downloads update rather than duplicate. getEventWindow/buildICS are pure and SSR-safe; downloadICS's document/URL.createObjectURL use is correctly confined to a click handler, not module scope.
  • getSlimBiases (src/uxcore/api/biases.ts) fetches only the fields UXCAT actually reads (number/title/description/slug/mentionedQuestionsIds) — I traced every consumer now reachable via _app.tsx's new uxCoreData wiring (QuestionAnalyse, OngoingLayout, uxcat/test-result.tsx) and confirmed none of them dereference fields outside that slim set (e.g. UXCoreModalMobile, which does need usage/usageHr, is only used on /uxcore/[slug], which stays on the untouched null uxCoreData path — no schema/data concern here, this is a fetch-shape optimization, not a UX Core schema change).
  • The QuestionAnalyse.tsx effect dependency fix ([][uxCoreData]) is correct: uxCoreData was previously hardcoded null in _app.tsx, so this effect never ran; it's now real and stable (set once), so no re-render loop risk.

Issue found (inline comment posted):

  • StepIndicator.module.scss:106 — the new width: 79.5% over-constrains the absolutely-positioned .connector alongside left: 46px; right: 46px, so right gets silently recomputed per CSS spec and the symmetric circle-to-circle anchoring the adjacent comment describes breaks on viewport widths other than whatever this was tuned against.

Minor / non-blocking:

  • react-icalendar-link is no longer imported anywhere (CalendarItems.tsx now uses the new ics.ts + a <button>) but is still listed in package.json:68 — worth an unyarn remove in a follow-up.
  • Header.tsx and Home.tsx both independently added an identical hasLibrary/getMyLibrary(accountData.id) effect — same request fires twice when a logged-in user with a library hits the homepage. Not wrong, but a shared useHasLibrary() hook would avoid the duplication.
  • Sidebar.tsx's tag-list refetches now pass accountData?.id, which is correct for the owner's own tags, but note it also fires (harmlessly) on visitor page loads since it's unconditional in the mount effect — the result is just unused there (displayedTags uses libraryTags for non-owners).

No SSR/hydration issues, no dangerouslySetInnerHTML/XSS surface, no App Router or forbidden-dependency violations, no barrel or import-order issues spotted.

Not run: no lint/typecheck script exists in package.json, and node_modules isn't installed in this environment, so I reviewed manually rather than via ESLint/tsc/build. Worth a CI check before merge if not already covered elsewhere.

top: 18px;
left: 46px;
right: 46px;
width: 79.5%;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

width: 79.5% over-constrains this absolutely-positioned element alongside left: 46px / right: 46px. Per CSS 10.3.7, when left, right, and width are all non-auto on an absolutely positioned box, right is recomputed from left + width and effectively ignored — so the symmetric "46px = circle + gap on each side" anchoring the comment above describes no longer holds. On any viewport where the parent width isn't the exact one this 79.5% was tuned against, the right end of the line will drift off the 46px anchor (and vice versa for left in RTL). Recommend dropping the width line (letting left/right alone determine the box) or removing right if width is the intended fix, and updating the comment either way.

Fix this →

@MaryWylde
MaryWylde merged commit 123a460 into main Aug 4, 2026
3 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.

1 participant