v1.65.0 - #808
Merged
Merged
Conversation
…803) * test: characterization tests locking down the framework-independent core Adds 274 characterization tests across 12 core modules (parse pipeline, prepareChart delimiter/migration logic, theme conversion, sizing, and the export converters) to pin CURRENT behavior before a future framework migration. Tests capture actual output (not ideal output); ~23 likely bugs are documented in-place with // CHARACTERIZATION comments rather than fixed, so any future change to these behaviors fails loudly and becomes a deliberate decision. Suite: 8 -> 20 test suites, 32 -> 306 passing tests, 12 snapshots. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: add alignNodesVertically undo/redo + early-return coverage Mirrors the coverage its siblings (alignNodes, alignNodesHorizontally) already had, closing the one asymmetry the audit flagged. alignNodes is the foundation of the planned auto-layout-with-control work, so its baseline should be fully symmetric. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rgbToHex now zero-pads each channel (rgb(5,5,5) emitted '#555' -> now '#050505'; rgb(10,200,30) emitted invalid 5-char '#ac81e' -> now '#0ac81e'). Labeled edges now register the arrow element's id in each endpoint's boundElements instead of the label text node's id. Both are generated-on-demand exports (no stored data changes), but re-exporting an unchanged chart now yields corrected colors for any node with an RGB channel < 16. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…llisions processScss substituted each $var with a boundary-less regex, so $color rewrote the prefix inside $colorDark (-> 'redDark'). Added a negative lookahead matching the valid name char class so a variable only matches when not followed by another name character. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… leak
prepareChart backfilled meta.themeEditor with the shared imported default theme object, then mutated its layoutName/spacingFactor during legacy-layout migration - leaking into the shared import and the next chart in the session. Now backfills a clone ({ ...theme }) so the import is never mutated. Single-chart output unchanged.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
All three align functions always called setState + addToUndoStack, so a no-op align pushed a useless undo entry and wiped the user's redo history. Each now returns early when the computed positions deeply equal the originals, leaving undo/redo untouched. Real aligns are unaffected. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Insurance against a future 'simplification' back to `meta.themeEditor = theme` that would reintroduce the shared-import mutation leak fixed in a0fb926. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test: visual-regression net for the 13 templates Pixel-diffs each template's rendered graph against committed golden images (Playwright toHaveScreenshot) — the rendering half of the migration safety net. A refactor, framework migration, or deliberate render-bug fix that changes how a chart looks now fails loudly with a visible diff. - Separate playwright.visual.config.ts (Chromium, local server, AA-tolerant thresholds) so it doesn't entangle with the preview-based e2e flow. - 10 deterministic-layout templates render live (tests layout + rendering). - 3 mindmap templates use force-directed layouts that re-randomize positions; they render from committed frozen-position fixtures via a preset layout so the test is deterministic (checks rendering). The flaky set was found empirically (failed two consecutive runs), not assumed from layout name. - Scripts: visual, visual:update, visual:fixtures. Point at a non-default port with E2E_START_URL. CI wiring (Linux goldens) is a documented follow-up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * test: exclude visual specs from the e2e config The e2e Playwright config's testDir is "e2e" with the default *.spec.ts matcher, so it was picking up e2e/visual/templates.visual.spec.ts and would run it against the Linux preview in CI with no matching (-linux) goldens, failing the e2e check. Add testIgnore for **/visual/** so visual regression runs only via playwright.visual.config.ts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs: note to run visual regression on visually significant changes Adds a Visual Regression subsection to CLAUDE.md's Testing section flagging that it's a local, manual gate (not yet in CI) and must be run whenever touching render-affecting code (toTheme, graphUtilityClasses, getSize, preprocessStyle, the Cytoscape pipeline, FFTheme, or any template). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
pro.spec.ts:118 ("Create chart from imported data") flaked ~4x across recent
PRs, always in the import->confirm flow against the Vercel preview: sometimes
the "9 nodes and 10 edges" confirmation didn't appear within the 5s default
(line 158), sometimes the confirm click hung to the 120s test timeout (line
160). Both are preview-timing issues, not product bugs.
- Bump the confirmation toBeVisible timeout to 30s and wait for the confirm
button to be actionable before clicking.
- Add CI retries (retries: isCI ? 2 : 0) — the standard mitigation for e2e
against a live preview. Each failure was a single-attempt flake, so a retry
absorbs it; a real break still fails every attempt. Local retries stay off
so flakes remain visible while developing.
Note: can't be proven in one run (it only flakes against CI/preview, passes
locally); verification is a reduced flake rate over subsequent CI runs.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Adds outbound links to teamsort.world and docugram.app in crawlable, human-sensible places: - Sandbox homepage: credit line in the tab row above the canvas (desktop); hidden-but-in-DOM on mobile, with visible entries in the mobile menu - Pricing page: new footer with made-by + project links, plus a page title and meta description via Helmet - Settings: "More from Tone Row" section with link cards - sitemap.xml: add /pricing, /blog, /roadmap, /changelog, /s (was homepage-only since 2021); robots.txt now declares the sitemap Shared data lives in lib/toneRowProjects.ts. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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.
Ships
🤖 Generated with Claude Code