Conversation
…ter, timeline) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ail surfaces Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The connector was anchored to both circles with left/right, but also carried a fixed `width: 79.5%` that won over the right anchor — so the line stopped short of step 2 at every viewport except the one the percentage was eyeballed at. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The two fields stack in the same form but were never given the same geometry, so they read as two unrelated controls: different heights and only the dropdown had a divider before its chevron. The multi-select now mirrors the dropdown trigger — 44px tall, 8px radius, and a chevron wrapper that carries the divider and recolors with the border on hover. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The placeholder row was pinned to 50px, which with the wrapper's 12px padding made a 74px box holding a single line of text. Pinning the row to its 20px line box brings the container to 44px. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Every hit box had drifted off its artwork — up to 4% horizontally and 14% vertically — so only the rooflines answered the pointer. Each box is now measured against the silhouette its glow SVG actually draws, for the wide and panorama art independently. house-2 is the tree behind the buildings rather than a building of its own, so its box necessarily overlaps John's pagoda. Overlapping triggers share a z-index and the last declaration wins the pointer, so the tree moves to the front of the array and the buildings keep their own areas. Verified by hovering a 5x5 grid inside each building at 1024/1440/1920/ 2560px: every building resolves to its own card, and the samples where the tree loses are the ones John's pagoda sits in front of. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
fix(library): four polish fixes to the library UI
The Cybersecurity row and the #offsec hash handler in UXCoreLayout were ungated, so merging would have leaked the dev-only OffSec layer to prod in a half-broken state (row active, modal showing HR). The gate is back as a single shared isOffsecEnabled helper used by layout and modal. initUseUXCoreGlobals had zero callers: every localStorage write of the PM/HR choice was dead weight and each reload reset to PM. It is now idempotent (absolute values, safe on every mount), gates the OffSec flag on isOffsecEnabled, and runs on /uxcore mount with an explicit URL hash winning over the restored state. Also adds the machine-readable font passport to CLAUDE.md (commit gate requirement). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… cache TTL - Back/Forward now lands on the right bias: modal state follows the route prop instead of freezing at mount, so the stuck-dimmed modal is gone. - Use-case switch inside the modal is a shallow no-scroll hash update (was a full ISR refetch + jump to top), and OffSec state writes #offsec instead of mislabeling the URL as #hr. - Share previews: og:image/twitter:image static fallback is absolute (scrapers drop relative URLs), the Strapi ogImage path lost its bogus double .OGTags nesting, twitter:url is the canonical URL (was a hardcoded domain with a double slash), and social share links are URL-encoded so hashes/ampersands in titles survive. - getStrapiBiases: 5-minute TTL instead of a permanent module cache, and an empty/incomplete response is never cached — a transient Strapi failure no longer 404s all bias pages until restart, and ISR revalidation actually picks up content edits. - Rating: thanks-state only after the vote lands (failed vote stays retryable), double-click guard, response.ok check, and a failed geo lookup no longer aborts the vote. - mentionedQuestionsIds parse failure degrades to no mentions instead of crashing the bias page. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- A search with zero hits now renders as empty (labels faded, map filtered to nothing) instead of silently falling back to the full library while claiming 'found 0'. useBiasSearch carries an explicit isSearchActive flag so empty-query and zero-hit are distinguishable. - Clearing the input cancels the in-flight debounce, so a pending search can no longer repopulate results over a cleared field. - getSearchLabels indexed a locale-keyed object numerically and always returned undefined: EN plural 's' and RU declensions never rendered. It now takes the locale. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- addPersona/updatePersona/deletePersona built auth headers at module load, so logging in after page load kept sending 'Bearer null'. Headers are now resolved per request, and non-2xx responses throw. - Save/overwrite no longer flip to 'saved' optimistically: the state is confirmed only after the request lands, and a failure surfaces the new localized saveFailed message via the existing error slot. - A failed delete keeps the persona in the list instead of hiding an entry the server still has. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… server - A dropped submit no longer advances the test: the answer is confirmed by the server before moving on. On failure the question stays with a localized retry message and the button re-enables, so a network blip means a retry instead of a wrong score or a test finished with unrecorded answers. - Double submits closed: an in-flight ref guards clicks, and Enter now mirrors the Next button's disabled state instead of firing the same question twice. - Resuming a test uses the server's ongoingTest.isFinal instead of a localStorage flag, so a 30-question final resumed in another browser (or after cleared storage) keeps its real length instead of ending at question 10 with negative numbering. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
# Conflicts: # src/uxcore/api/biases.ts # src/uxcore/components/UXCoreModal/UXCoreModal.tsx # src/uxcore/hooks/useUXCoreGlobals.ts # src/uxcore/layouts/UXCoreLayout/UXCoreLayout.tsx # src/uxcore/lib/offsec.ts
fix: UX Core functional audit fixes + OffSec bias cases
- OffsecBiasView: conditional classNames via the cn() helper instead of raw template strings, per AGENTS.md convention. - rating.ts: geo payload typed as TUserGeo instead of an explicit any. - OngoingLayout.module.scss: submit-error color reuses the shared error red as a named variable instead of a fresh hardcoded literal. Fourth review note (OffSec bias-schema sign-off) needs no code change: the content and its dev-only gating were explicitly approved by Wolf. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
fix(uxcore): address PR #181 review comments
|
Claude finished @manager's task in 3m 35s —— View job Review of PR #184 (dev → main release)Todo list
SummaryThis is a release PR bundling commits already reviewed individually in #181 and its follow-up #183, plus the earlier Umami/CSP/SEO/library-polish work already on What's solid:
Minor, non-blocking observations:
No security, SSR/hydration, or hooks-dependency issues found in the reviewed hunks. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Promotes dev to production.
Includes since the last release:
🤖 Generated with Claude Code