Skip to content

Daily RC#478

Merged
softmarshmallow merged 10 commits intomainfrom
canary
Dec 21, 2025
Merged

Daily RC#478
softmarshmallow merged 10 commits intomainfrom
canary

Conversation

@softmarshmallow
Copy link
Copy Markdown
Member

@softmarshmallow softmarshmallow commented Dec 20, 2025

Summary by CodeRabbit

  • New Features

    • Resize handles now hide on very small viewports
    • Corner-radius presets for quick uniform border styling
    • Navbar logo updated (image, alt text, and link)
    • Reset now preserves editor-level webfont list
  • Documentation

    • New editor features, UX surface, and detailed selection guides
    • Assertion added documenting resize-handle visibility threshold
  • Style

    • Multiple UI buttons adjusted to icon sizing for cleaner layout
  • Chores

    • Sitemap support and local dev start script added
    • CI/workflow and test build tweaks for faster, safer runs

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link
Copy Markdown

vercel Bot commented Dec 20, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
backgrounds Ready Ready Preview, Comment Dec 21, 2025 7:51pm
blog Ready Ready Preview, Comment Dec 21, 2025 7:51pm
docs Ready Ready Preview, Comment Dec 21, 2025 7:51pm
grida Ready Ready Preview, Comment Dec 21, 2025 7:51pm
viewer Ready Ready Preview, Comment Dec 21, 2025 7:51pm
2 Skipped Deployments
Project Deployment Review Updated (UTC)
code Ignored Ignored Dec 21, 2025 7:51pm
legacy Ignored Ignored Dec 21, 2025 7:51pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Dec 20, 2025

Walkthrough

Adds Docusaurus sitemap configs and blog dev script, new editor WG docs, a UI constant and viewport-driven resize-handle visibility gating, several sidecontrol button-size tweaks and corner-radius preset UI, and preserves the editor webfont list during reset.

Changes

Cohort / File(s) Change Summary
Docusaurus sitemap & navbar
apps/blog/docusaurus.config.ts, apps/docs/docusaurus.config.ts
Added sitemap configurations (changefreq, priority, lastmod, ignorePatterns). Updated blog navbar logo fields (alt, src, srcDark) and added href and target.
Blog scripts & deps
apps/blog/package.json
Added dev script (docusaurus start) and dependency @docusaurus/plugin-sitemap@3.7.0.
Editor WG docs
docs/wg/feat-editor/index.md, docs/wg/feat-editor/ux-surface/index.md, docs/wg/feat-editor/ux-surface/selection.md
New documentation introducing editor features, UX surface scope, and detailed selection behavior and rules.
Resize-handle visibility
editor/grida-canvas-react/ui-config.ts, editor/grida-canvas-react/viewport/surface.tsx
Added MIN_NODE_OVERLAY_RESIZE_HANDLES_VISIBLE_UI_SIZE = 12; compute scaled UI rect size and gate rendering of resize handles in SelectionGroupOverlay and NodeOverlay based on that threshold.
Editor reset behavior
editor/grida-canvas/editor.i.ts, editor/grida-canvas/editor.ts
Reset now preserves editor-level webfontlist (in addition to camera transform); document-level state remains replaced.
Assertions
editor/grida-canvas/ASSERTIONS.md
Updated several dates to 2025 and added an assertion describing the resize-handle visibility threshold behavior.
Corner-radius presets & font-size styling
editor/scaffolds/sidecontrol/controls/corner-radius.tsx, editor/scaffolds/sidecontrol/controls/font-size.tsx
Added uniform corner-radius preset Select UI with preset mapping and selection flow; FontSizeControl container gets flex-1 styling.
Sidecontrol button sizing
editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx, editor/scaffolds/sidecontrol/chunks/scale-tool.tsx, editor/scaffolds/sidecontrol/controls/blend-mode.tsx, editor/scaffolds/sidecontrol/controls/color-picker.tsx, editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx, editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
Multiple Button components changed size from xs to icon (visual-only sizing adjustments).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Focus review on:
    • editor/grida-canvas-react/viewport/surface.tsx — scaled-size math and consistent gating across overlay branches.
    • editor/scaffolds/sidecontrol/controls/corner-radius.tsx — Select wiring, preset matching, and update handlers.
    • editor/grida-canvas/editor.ts — ensure webfontlist preservation is isolated to editor-level runtime state.

Possibly related PRs

Suggested labels

ux, canvas

Poem

🐇
Little paws on pixels bright,
Handles hide when view's too tight.
Presets hop into their place,
Icons shrink and save some space.
Docs hum softly — sitemap night.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Title check ❓ Inconclusive The title 'Daily RC' is vague and generic, using non-descriptive terms that don't convey meaningful information about the changeset's primary modifications. Replace with a specific, descriptive title that summarizes the main change, such as 'Add sitemap configuration and resize handle visibility threshold' or identify the primary objective of this release candidate.
✅ Passed checks (1 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch canary

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
editor/scaffolds/sidecontrol/controls/corner-radius.tsx (1)

193-218: Consider specifying radix for parseInt.

On line 196, parseInt(_v) is called without specifying the radix parameter. While the value will always be a numeric string from the preset, explicitly specifying radix 10 is a safer practice.

🔎 Suggested fix
               onValueChange={(_v) => {
-                  const value = parseInt(_v);
+                  const value = parseInt(_v, 10);
                   handleUniformChange(value);
               }}
editor/grida-canvas/ASSERTIONS.md (1)

45-47: Minor grammar suggestion from static analysis.

Consider hyphenating compound adjectives for better readability:

  • "single node selections" → "single-node selections"
  • "multiple node selection groups" → "multiple-node selection groups"

This is a minor stylistic improvement and doesn't affect the clarity of the assertion.

🔎 Proposed fix
-This behavior applies to both single node selections and multiple node selection groups, ensuring consistent interaction patterns across all selection types.
+This behavior applies to both single-node selections and multiple-node selection groups, ensuring consistent interaction patterns across all selection types.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between dc7f8d2 and 1d56295.

⛔ Files ignored due to path filters (3)
  • apps/blog/static/img/navbar-logo-dark.svg is excluded by !**/*.svg
  • apps/blog/static/img/navbar-logo.svg is excluded by !**/*.svg
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (17)
  • apps/blog/docusaurus.config.ts (2 hunks)
  • apps/blog/package.json (2 hunks)
  • apps/docs/docusaurus.config.ts (1 hunks)
  • docs/wg/feat-editor/index.md (1 hunks)
  • docs/wg/feat-editor/ux-surface/index.md (1 hunks)
  • docs/wg/feat-editor/ux-surface/selection.md (1 hunks)
  • editor/grida-canvas-react/ui-config.ts (1 hunks)
  • editor/grida-canvas-react/viewport/surface.tsx (5 hunks)
  • editor/grida-canvas/ASSERTIONS.md (1 hunks)
  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx (1 hunks)
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx (1 hunks)
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx (1 hunks)
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx (1 hunks)
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx (2 hunks)
  • editor/scaffolds/sidecontrol/controls/font-size.tsx (1 hunks)
  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx (2 hunks)
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx (2 hunks)
🧰 Additional context used
📓 Path-based instructions (7)
docs/**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Documentation source of truth is in the ./docs directory; deployment is handled by apps/docs

Files:

  • docs/wg/feat-editor/ux-surface/index.md
  • docs/wg/feat-editor/ux-surface/selection.md
  • docs/wg/feat-editor/index.md
docs/{wg,reference}/**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Only actively maintain docs/wg/** and docs/reference/** directories; see docs/AGENTS.md for contribution scope

Files:

  • docs/wg/feat-editor/ux-surface/index.md
  • docs/wg/feat-editor/ux-surface/selection.md
  • docs/wg/feat-editor/index.md
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Use TypeScript 5 as the main language for most apps
Use Lucide or Radix Icons for icons

Files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/font-size.tsx
  • apps/docs/docusaurus.config.ts
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx
  • editor/grida-canvas-react/ui-config.ts
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • apps/blog/docusaurus.config.ts
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
**/*.{jsx,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use React.js 19 for web applications

Files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/font-size.tsx
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
{editor/**/*.{ts,tsx},packages/grida-canvas-*/**/*.{ts,tsx}}

📄 CodeRabbit inference engine (AGENTS.md)

Use DOM (plain DOM as canvas) for website builder canvas, bound with React

Files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/font-size.tsx
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx
  • editor/grida-canvas-react/ui-config.ts
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
editor/scaffolds/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use /editor/scaffolds for feature-specific larger components, pages, and editors

Files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/font-size.tsx
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
editor/grida-*/**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

Use /editor/grida-* directories to isolate domain-specific modules; promote well-defined modules to /packages

Files:

  • editor/grida-canvas-react/ui-config.ts
  • editor/grida-canvas-react/viewport/surface.tsx
🧠 Learnings (15)
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/main.rs : Update `grida-canvas-wasm.d.ts` TypeScript definitions file when new APIs are introduced via `main.rs`

Applied to files:

  • docs/wg/feat-editor/ux-surface/index.md
  • editor/grida-canvas-react/ui-config.ts
  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-01T00:22:56.899Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: editor/app/(tools)/tools/halftone/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:56.899Z
Learning: Applies to editor/app/(tools)/tools/halftone/app/(tools)/tools/halftone/_page.tsx : When adding new shape types, update the Shape type union, add cases in drawShape() function, add cases in shapeToSVG() function, and add SelectItem in UI

Applied to files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/blend-mode.tsx
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/controls/color-picker.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-01T00:22:56.899Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: editor/app/(tools)/tools/halftone/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:56.899Z
Learning: Applies to editor/app/(tools)/tools/halftone/app/(tools)/tools/halftone/_page.tsx : When adding new parameters to the halftone tool, add state with useState, include in useEffect dependency array, pass to renderHalftone() function, use in rendering logic, and add UI control

Applied to files:

  • editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: For development and testing, use `just dev` command for debug builds with basic WebGL2 support

Applied to files:

  • apps/blog/package.json
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to editor/components/ui/**/*.{ts,tsx} : Use /editor/components/ui for shadcn UI components

Applied to files:

  • editor/scaffolds/sidecontrol/controls/font-size.tsx
  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to packages/grida-canvas-*/**/*.{ts,tsx,js,jsx} : Packages under /packages/grida-canvas-* power the canvas; some are published to npm, refer to individual package README

Applied to files:

  • editor/grida-canvas-react/ui-config.ts
  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to **/*.{ts,tsx} : Use Lucide or Radix Icons for icons

Applied to files:

  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to **/components/ui/**/*.{ts,tsx} : Use Shadcn UI for UI component library

Applied to files:

  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
📚 Learning: 2025-12-01T00:22:56.899Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: editor/app/(tools)/tools/halftone/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:56.899Z
Learning: Applies to editor/app/(tools)/tools/halftone/app/(tools)/tools/halftone/_page.tsx : Use React hooks for state management (imageSrc, shape, grid, maxRadius, gamma, jitter, opacity, color, customShapeImage, imageDataRef, sizeRef)

Applied to files:

  • editor/scaffolds/sidecontrol/controls/corner-radius.tsx
  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-14T23:30:50.384Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: docs/AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:50.384Z
Learning: Applies to docs/docs/wg/** : Actively maintain and edit documentation in `/docs/wg/**` (working group docs including design notes, architecture, proposals, and WIP)

Applied to files:

  • docs/wg/feat-editor/index.md
📚 Learning: 2025-12-01T00:22:56.899Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: editor/app/(tools)/tools/halftone/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:56.899Z
Learning: Applies to editor/app/(tools)/tools/halftone/app/(tools)/tools/halftone/_page.tsx : Image input should be automatically scaled down to a maximum of 1024px for performance

Applied to files:

  • editor/scaffolds/sidecontrol/chunks/scale-tool.tsx
  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to editor/scaffolds/**/*.{ts,tsx} : Use /editor/scaffolds for feature-specific larger components, pages, and editors

Applied to files:

  • editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx
  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to editor/components/**/*.{ts,tsx} : Use /editor/components for generally reusable components

Applied to files:

  • editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to {editor/**/*.{ts,tsx},packages/grida-canvas-*/**/*.{ts,tsx}} : Use DOM (plain DOM as canvas) for website builder canvas, bound with React

Applied to files:

  • editor/grida-canvas-react/viewport/surface.tsx
📚 Learning: 2025-12-01T00:22:56.899Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: editor/app/(tools)/tools/halftone/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:56.899Z
Learning: Applies to editor/app/(tools)/tools/halftone/app/(tools)/tools/halftone/_page.tsx : Cache ImageData and dimensions in refs (imageDataRef, sizeRef) for efficient exports

Applied to files:

  • editor/grida-canvas-react/viewport/surface.tsx
🧬 Code graph analysis (2)
editor/scaffolds/sidecontrol/controls/corner-radius.tsx (2)
editor/scaffolds/sidecontrol/ui/number.tsx (1)
  • InputPropertyNumber (127-246)
editor/components/ui/select.tsx (3)
  • Select (177-177)
  • SelectContent (178-178)
  • SelectItem (180-180)
editor/grida-canvas-react/viewport/surface.tsx (1)
editor/grida-canvas-react/ui-config.ts (1)
  • MIN_NODE_OVERLAY_RESIZE_HANDLES_VISIBLE_UI_SIZE (50-50)
🪛 LanguageTool
editor/grida-canvas/ASSERTIONS.md

[grammar] ~47-~47: Use a hyphen to join words.
Context: ...es. This behavior applies to both single node selections and multiple node select...

(QB_NEW_EN_HYPHEN)


[grammar] ~47-~47: Use a hyphen to join words.
Context: ...both single node selections and multiple node selection groups, ensuring consiste...

(QB_NEW_EN_HYPHEN)

docs/wg/feat-editor/ux-surface/selection.md

[style] ~23-~23: This phrase is redundant. Consider writing “space”.
Context: ...hanges (deferred to click) - Clicking empty space within the overlay clears selection (de...

(EMPTY_HOLE)


[style] ~55-~55: This phrase is redundant. Consider writing “space”.
Context: ... Shift) → adds to selection - Target is empty space (without Shift) → clears selection **R...

(EMPTY_HOLE)


[style] ~76-~76: This phrase is redundant. Consider writing “Space”.
Context: ..., selection changes ## Test Cases ### Empty Space Click Scenario: User clicks on emp...

(EMPTY_HOLE)


[style] ~78-~78: This phrase is redundant. Consider writing “space”.
Context: ...ace Click Scenario: User clicks on empty space (no target node) without Shift key. **...

(EMPTY_HOLE)


[style] ~160-~160: This phrase is redundant. Consider writing “Space”.
Context: ...rom drag intent. ### Multi-Selection - Empty Space Drag Within Overlay Scenario: - T...

(EMPTY_HOLE)


[style] ~165-~165: This phrase is redundant. Consider writing “space”.
Context: ... overlay - User presses pointer down on empty space within the selection overlay bounds (no...

(EMPTY_HOLE)


[style] ~174-~174: This phrase is redundant. Consider writing “space”.
Context: ...e selection group, not clear selection. Empty space within the overlay bounds is part of th...

(EMPTY_HOLE)


[style] ~176-~176: This phrase is redundant. Consider writing “Space”.
Context: ...election region. ### Multi-Selection - Empty Space Click Within Overlay Scenario: - ...

(EMPTY_HOLE)


[style] ~181-~181: This phrase is redundant. Consider writing “space”.
Context: ...roup overlay - User clicks (no drag) on empty space within the selection overlay bounds (no...

(EMPTY_HOLE)


[style] ~188-~188: This phrase is redundant. Consider writing “space”.
Context: ...ointerdown + pointerup without drag) on empty space is a clear intent to clear selection, e...

(EMPTY_HOLE)


[style] ~198-~198: This phrase is redundant. Consider writing “space”.
Context: ... node (with Shift) → add to selection - Empty space outside selection overlay (no Shift) → ...

(EMPTY_HOLE)


[style] ~205-~205: This phrase is redundant. Consider writing “space”.
Context: ...d node(s) → defer reset to that child - Empty space within selection overlay (no Shift) → d...

(EMPTY_HOLE)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: cargo test
🔇 Additional comments (22)
editor/scaffolds/sidecontrol/chunks/scale-tool.tsx (1)

184-184: LGTM: Button size standardization.

The change from size="xs" to size="icon" aligns with the UI consistency updates across the sidecontrol components.

editor/scaffolds/sidecontrol/controls/color-picker.tsx (1)

68-68: LGTM: Consistent button sizing.

The eye dropper button now uses size="icon", matching the UI standardization pattern across the PR.

editor/scaffolds/sidecontrol/sidecontrol-document-properties.tsx (1)

171-171: LGTM: Icon button sizing updates.

Both the gear and trash icon buttons now use size="icon", maintaining consistency with the broader UI standardization effort.

Also applies to: 191-191

editor/scaffolds/sidecontrol/controls/blend-mode.tsx (1)

152-152: LGTM: Blend mode trigger button sizing.

The button size update to size="icon" is consistent with the UI improvements across sidecontrol components.

editor/scaffolds/sidecontrol/controls/font-size.tsx (1)

23-23: LGTM: Layout adjustment for responsive sizing.

Adding flex-1 to the wrapper enables the font size control to grow and fill available space, improving the responsive layout behavior.

apps/docs/docusaurus.config.ts (1)

147-152: LGTM: Sitemap configuration added.

The sitemap configuration follows Docusaurus conventions with sensible defaults (weekly updates, 0.5 priority, date-based lastmod). Excluding /tags/** is a standard practice to avoid indexing tag archive pages.

editor/scaffolds/sidecontrol/sidecontrol-node-selection.tsx (1)

1532-1532: LGTM: Icon button sizing in text and effects sections.

Both the SectionText dropdown trigger and SectionEffects add button now use size="icon", completing the UI consistency updates across the sidecontrol scaffolds.

Also applies to: 1844-1844

apps/blog/package.json (1)

8-8: LGTM: Dev script and sitemap plugin added.

The dev script provides a convenient alias for docusaurus start, and the @docusaurus/plugin-sitemap@3.7.0 dependency correctly matches the Docusaurus core version and supports the sitemap configuration added to the blog site.

Also applies to: 20-20

docs/wg/feat-editor/ux-surface/selection.md (1)

1-218: Well-structured selection behavior documentation.

This document provides comprehensive coverage of selection interactions, including the important distinction between immediate and deferred selection changes. The test cases effectively illustrate edge cases like child hover during drag and empty space interactions within overlay bounds.

The static analysis warnings about "empty space" being redundant are false positives—"empty space" is standard UX terminology for areas without interactive elements.

apps/blog/docusaurus.config.ts (2)

52-57: Sitemap configuration looks good.

The sitemap settings with monthly change frequency and 0.5 priority are reasonable defaults. Excluding /tags/** and /page/** from the sitemap is appropriate for pagination and tag listing pages.


66-70: Logo assets confirmed to exist. The navbar-logo.svg and navbar-logo-dark.svg files are present in apps/blog/static/img/ and match the paths referenced in the configuration.

editor/scaffolds/sidecontrol/controls/corner-radius.tsx (2)

23-65: Good use of Tailwind-aligned presets.

The twradius constant provides a well-documented mapping of Tailwind CSS border-radius values. The reference to the official docs is helpful for maintainability.


200-204: Use the wrapped SelectTrigger component from @/components/ui-editor/select instead of SelectPrimitive.SelectTrigger.

The code imports the wrapped Select components but bypasses SelectTrigger in favor of the raw Radix primitive. This loses the intended styling, data attributes, and consistent configuration applied by the wrapper. Use <SelectTrigger asChild> with your custom button to maintain component abstraction.

Likely an incorrect or invalid review comment.

editor/scaffolds/sidecontrol/chunks/chunk-paints.tsx (1)

392-394: LGTM!

The button size change from "xs" to "icon" aligns with the broader UI standardization across sidecontrol components mentioned in the PR summary.

docs/wg/feat-editor/ux-surface/index.md (1)

1-23: LGTM!

This index file clearly defines the scope and purpose of the UX Surface documentation. The structure follows good documentation practices with explicit in-scope/out-of-scope boundaries. As per coding guidelines, the docs/wg/** directory is actively maintained, making this the appropriate location for this content.

docs/wg/feat-editor/index.md (1)

1-23: LGTM!

Clear and well-structured working group documentation. The scope definition and characteristics align well with the practical UX focus described in the accompanying code changes. Based on learnings, this is the appropriate location for actively maintained working group documentation.

editor/grida-canvas-react/ui-config.ts (1)

35-50: LGTM!

Well-documented constant with clear JSDoc explaining the calculation rationale. The threshold of 12px is appropriately small to allow resize handles on most visible nodes while hiding them for very thin elements where translate-drag should take priority.

editor/grida-canvas-react/viewport/surface.tsx (5)

78-78: LGTM!

Import correctly added alongside related ui-config constants.


1050-1055: LGTM!

Visibility calculation follows the established pattern in the file. The AND condition (&&) ensures resize handles are hidden when either dimension is too small, which aligns with the documented behavior for thin nodes like text.


1065-1124: LGTM!

All resize handles are correctly wrapped in the visibility conditional. The DistributeButton and SizeMeterLabel appropriately remain outside this block as they serve different UX purposes.


1227-1229: LGTM!

Visibility calculation is consistent with SelectionGroupOverlay. The reuse of the same pattern ensures uniform behavior across single and multiple selections.


1290-1290: LGTM!

The visibility condition is correctly combined with the existing is_resizable_node check using short-circuit evaluation.

…es including camera transform and webfontlist
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 492a441 and bd9211a.

📒 Files selected for processing (1)
  • .github/workflows/test-crates.yml (1 hunks)
🧰 Additional context used
🧠 Learnings (13)
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/+(grida-canvas-wasm.js|grida-canvas-wasm.wasm) : Include WASM artifacts (`grida-canvas-wasm.js` and `grida-canvas-wasm.wasm`) in git for faster CI builds

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-20T08:11:16.201Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas/AGENTS.md:0-0
Timestamp: 2025-12-20T08:11:16.201Z
Learning: Applies to crates/grida-canvas/**/*.rs : Run `cargo clippy --no-deps --all-targets --all-features` for linting to check style, performance, and correctness suggestions

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-20T08:11:16.201Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas/AGENTS.md:0-0
Timestamp: 2025-12-20T08:11:16.201Z
Learning: Applies to crates/grida-canvas/**/*.rs : Run `cargo fmt` to maintain code formatting standards

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:06.800Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-fonts/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:06.800Z
Learning: Applies to crates/grida-canvas-fonts/**/*.rs : Run all tests with: `cargo test`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/main.rs : Update `grida-canvas-wasm.d.ts` TypeScript definitions file when new APIs are introduced via `main.rs`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/Cargo.toml : Set environment variables `CC=emcc`, `CXX=em++`, and `AR=emar` when building Rust code for WebAssembly targets

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/Cargo.toml : Use the target `wasm32-unknown-emscripten` when building Rust code for WebAssembly compilation

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/*.{js,ts,jsx,tsx} : Use Web Workers for heavy graphics operations to improve performance and responsiveness

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Run cargo test for Rust crates testing

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:36.510Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-dev/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:36.510Z
Learning: Applies to crates/grida-dev/grida-dev/Cargo.toml : The `grida-dev` crate is marked `publish = false` and is intended solely for local development workflows and devtools

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:06.800Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-fonts/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:06.800Z
Learning: Applies to crates/grida-canvas-fonts/**/serde_test.rs : Run tests with serde feature using: `cargo test --features serde`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:36.510Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-dev/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:36.510Z
Learning: Use `cargo run -p grida-dev -- scene <path-or-url>` command to run local `.grida` files or remote scenes through the dev runtime

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:36.510Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-dev/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:36.510Z
Learning: Use `cargo run -p grida-dev -- figma` command with `--file-key`, `--api-key`, and `--scene-index` parameters to fetch and render Figma designs

Applied to files:

  • .github/workflows/test-crates.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: test
  • GitHub Check: build
  • GitHub Check: cargo test

env:
CARGO_BUILD_JOBS: 2
run: cargo test --workspace
run: cargo test --workspace --exclude grida-canvas-wasm
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Document the emscripten dependency and verify test coverage.

The grida-canvas-wasm crate requires emscripten environment variables (CC=emcc, CXX=em++, AR=emar) and the wasm32-unknown-emscripten target, which this workflow doesn't configure. The exclusion is justified, but should be documented inline to clarify intent for future maintainers.

Add an explanatory comment above the test command indicating why the crate is excluded, and confirm that separate CI coverage for grida-canvas-wasm exists or document plans to establish it.

🤖 Prompt for AI Agents
.github/workflows/test-crates.yml around line 59: the workflow excludes the
grida-canvas-wasm crate from cargo test but does not document why; add a concise
inline comment immediately above the `run: cargo test --workspace --exclude
grida-canvas-wasm` line stating that grida-canvas-wasm requires an emscripten
build environment (CC=emcc, CXX=em++, AR=emar and the wasm32-unknown-emscripten
target) which is not configured in this runner, and note that the crate is
excluded for that reason; also update the workflow or repository docs to confirm
where CI/test coverage for grida-canvas-wasm runs (or add a TODO linking to a
ticket/plan to add separate CI that sets up emscripten and the wasm target).

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between bd9211a and 8290087.

📒 Files selected for processing (2)
  • .github/workflows/test-crates.yml (1 hunks)
  • Cargo.toml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/test-crates.yml
🧰 Additional context used
🧠 Learnings (1)
📓 Common learnings
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to editor/app/(www)/**/*.{ts,tsx} : Landing page and SEO-purpose static pages are located in /editor/app/(www) directory; add new webpages here
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: cargo test
  • GitHub Check: build
  • GitHub Check: test
🔇 Additional comments (1)
Cargo.toml (1)

15-16: LGTM! Good optimization for test performance.

Adding opt-level = 1 to the test profile is a solid practice. It speeds up test execution and reduces binary size (helping with CI memory constraints) while preserving debuggability with debug = 1.

Comment thread Cargo.toml
]

# Reduce debug information for tests to lower memory usage during linking in CI
# opt-level = 1 speeds up compilation while maintaining debuggability
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Clarify the comment about compilation speed.

The comment states "speeds up compilation" but opt-level = 1 actually increases compilation time slightly. What it does is speed up test execution and reduce binary size, which helps with linking memory usage.

🔎 Suggested comment revision
-# opt-level = 1 speeds up compilation while maintaining debuggability
+# opt-level = 1 speeds up test execution and reduces binary size while maintaining debuggability
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# opt-level = 1 speeds up compilation while maintaining debuggability
# opt-level = 1 speeds up test execution and reduces binary size while maintaining debuggability
🤖 Prompt for AI Agents
In Cargo.toml around line 13, the inline comment "opt-level = 1 speeds up
compilation while maintaining debuggability" is inaccurate; update the comment
to state that opt-level = 1 may slightly increase compilation time but improves
runtime (e.g., speeds up test execution), reduces binary size, and lowers linker
memory usage while preserving reasonable debuggability. Replace the existing
sentence with a concise corrected explanation reflecting those effects.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/workflows/test-crates.yml (1)

68-68: Add inline comment documenting the grida-canvas-wasm exclusion.

The exclusion of grida-canvas-wasm from the test run is justified (it requires emscripten environment: CC=emcc, CXX=em++, AR=emar and wasm32-unknown-emscripten target), but lacks inline documentation explaining why. This was flagged in a previous review and remains unaddressed.

🔎 Suggested fix: Add explanatory comment
       - name: Run cargo tests
         env:
           FORCE_SKIA_BINARIES_DOWNLOAD: "1"
+        # grida-canvas-wasm is excluded because it requires emscripten build environment
+        # (CC=emcc, CXX=em++, AR=emar) and wasm32-unknown-emscripten target.
+        # See .github/workflows/build-canvas.yml for dedicated WASM build workflow.
         run: cargo test --workspace --exclude grida-canvas-wasm

Based on learnings, grida-canvas-wasm requires specific emscripten configuration.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8290087 and 9dc08fb.

📒 Files selected for processing (2)
  • .github/workflows/build-canvas.yml (1 hunks)
  • .github/workflows/test-crates.yml (2 hunks)
🧰 Additional context used
🧠 Learnings (13)
📓 Common learnings
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Applies to editor/app/(www)/**/*.{ts,tsx} : Landing page and SEO-purpose static pages are located in /editor/app/(www) directory; add new webpages here
📚 Learning: 2025-12-01T00:22:06.800Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-fonts/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:06.800Z
Learning: Applies to crates/grida-canvas-fonts/**/*.rs : Run all tests with: `cargo test`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/Cargo.toml : Set environment variables `CC=emcc`, `CXX=em++`, and `AR=emar` when building Rust code for WebAssembly targets

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/+(grida-canvas-wasm.js|grida-canvas-wasm.wasm) : Include WASM artifacts (`grida-canvas-wasm.js` and `grida-canvas-wasm.wasm`) in git for faster CI builds

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/Cargo.toml : Use the target `wasm32-unknown-emscripten` when building Rust code for WebAssembly compilation

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-20T08:11:16.201Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas/AGENTS.md:0-0
Timestamp: 2025-12-20T08:11:16.201Z
Learning: Applies to crates/grida-canvas/**/*.rs : Run `cargo clippy --no-deps --all-targets --all-features` for linting to check style, performance, and correctness suggestions

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-20T08:11:16.201Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas/AGENTS.md:0-0
Timestamp: 2025-12-20T08:11:16.201Z
Learning: Applies to crates/grida-canvas/**/*.rs : Run `cargo fmt` to maintain code formatting standards

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/*.{js,ts,jsx,tsx} : Use Web Workers for heavy graphics operations to improve performance and responsiveness

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:19.083Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-wasm/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:19.083Z
Learning: Applies to crates/grida-canvas-wasm/**/main.rs : Update `grida-canvas-wasm.d.ts` TypeScript definitions file when new APIs are introduced via `main.rs`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Run cargo test for Rust crates testing

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Run cargo check for Rust crates checking

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-01T00:22:06.800Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: crates/grida-canvas-fonts/AGENTS.md:0-0
Timestamp: 2025-12-01T00:22:06.800Z
Learning: Applies to crates/grida-canvas-fonts/**/serde_test.rs : Run tests with serde feature using: `cargo test --features serde`

Applied to files:

  • .github/workflows/test-crates.yml
📚 Learning: 2025-12-14T23:30:42.112Z
Learnt from: CR
Repo: gridaco/grida PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-14T23:30:42.112Z
Learning: Run cargo clippy --no-deps for Rust crates linting

Applied to files:

  • .github/workflows/test-crates.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: cargo test
  • GitHub Check: build
  • GitHub Check: test
🔇 Additional comments (4)
.github/workflows/build-canvas.yml (1)

13-15: LGTM! Concurrency control added.

The concurrency block correctly groups runs by workflow and ref, canceling in-progress runs when new commits are pushed. This is a best practice that saves CI resources and provides faster feedback.

.github/workflows/test-crates.yml (3)

12-14: LGTM! Concurrency control added.

The concurrency configuration correctly prevents redundant test runs, saving CI resources and providing faster feedback on the latest changes.


62-63: LGTM! Cache key added for better cache isolation.

The explicit key: test helps differentiate this workflow's cache from other Rust build caches in the repository.


67-67: Verify the necessity of forcing Skia binary downloads.

The new FORCE_SKIA_BINARIES_DOWNLOAD: "1" environment variable suggests a change in how Skia binaries are handled. Confirm whether this was added to resolve a specific CI failure or if it's a preventive measure for reliability.

#!/bin/bash
# Description: Search for Skia-related dependencies and recent changes

# Find Cargo.toml files with skia dependencies
echo "=== Crates with Skia dependencies ==="
fd Cargo.toml crates/ --exec rg -l 'skia'

# Check for FORCE_SKIA_BINARIES_DOWNLOAD usage in codebase
echo -e "\n=== Usage of FORCE_SKIA_BINARIES_DOWNLOAD in code ==="
rg -n 'FORCE_SKIA_BINARIES_DOWNLOAD' --type rust --type toml

# Check recent git history for Skia-related changes
echo -e "\n=== Recent Skia-related commits ==="
git log --oneline --all -20 --grep="skia" --grep="Skia" -i

Comment on lines +8 to +10
paths:
- ".github/workflows/*"
- "crates/*"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find all Rust files outside crates/ directory that might be dependencies

echo "=== Rust source files outside crates/ ==="
fd -e rs -E 'crates/**' -E 'target/**' -E 'node_modules/**' -E '.git/**'

echo ""
echo "=== Checking for workspace members in root Cargo.toml ==="
if [ -f Cargo.toml ]; then
  cat Cargo.toml | head -50
fi

echo ""
echo "=== Directory structure (top level) ==="
ls -la | grep -E '^d'

Repository: gridaco/grida

Length of output: 3542


🏁 Script executed:

#!/bin/bash
# Check if workspace crates reference third_party/usvg

echo "=== Searching for third_party references in workspace crate Cargo.toml files ==="
for crate in crates/grida-canvas crates/grida-canvas-wasm crates/grida-canvas-fonts crates/grida-dev crates/csscascade crates/math2; do
  if [ -f "$crate/Cargo.toml" ]; then
    echo "--- $crate/Cargo.toml ---"
    grep -i "third.party\|usvg" "$crate/Cargo.toml" || echo "No third_party or usvg references found"
  fi
done

echo ""
echo "=== Viewing test-crates.yml content ==="
if [ -f ".github/workflows/test-crates.yml" ]; then
  cat ".github/workflows/test-crates.yml"
fi

Repository: gridaco/grida

Length of output: 2307


Add third_party/usvg/* to path filters.

The path filters exclude third_party/usvg/, which crates/grida-canvas directly depends on. Pull requests that modify only third_party/usvg/ won't trigger this workflow, creating a testing gap for a critical crate dependency.

Update the path filters to:

paths:
  - ".github/workflows/*"
  - "crates/*"
  - "third_party/usvg/*"
🤖 Prompt for AI Agents
.github/workflows/test-crates.yml around lines 8 to 10: the workflow path
filters currently include ".github/workflows/*" and "crates/*" but omit
"third_party/usvg/*", which is a direct dependency of crates/grida-canvas;
update the paths array to add "third_party/usvg/*" so the workflow triggers when
that directory changes, ensuring the YAML paths section contains the three
entries ".github/workflows/*", "crates/*", and "third_party/usvg/*".

@softmarshmallow softmarshmallow merged commit 9264384 into main Dec 21, 2025
12 checks passed
@coderabbitai coderabbitai Bot mentioned this pull request Jan 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant