chore: Update dependencies and fix web build issues#65
Conversation
- Update @tsconfig/node22 to @tsconfig/node24 in web chat app. - Add missing dependencies (class-variance-authority, clsx, tailwind-merge) and icons to fix web chat build. - Update Gradle to 9.5.0-milestone-2. - Update Kotlin to 2.3.10, Compose Multiplatform to 1.10.1, and androidx-activity to 1.12.4. Note: Some Gradle version reporting in the console appeared stuck on old versions due to sandbox environment/daemon caching, but files have been updated. Co-authored-by: yacosta738 <33158051+yacosta738@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
📝 WalkthroughWalkthroughRepository-wide updates: simplified plugin publish workflow and removed related plugin artifacts/headers/docs; bumped Node target to 24 in chat and root packages and Dockerfile; added two chat icon components; removed plugin metadata from a Cargo.toml; adjusted onboarding Surreal-graphs flow; added localized 404 page and Vercel headers; Gradle version bumps. Changes
Sequence Diagram(s)mermaid User->>GH: workflow_dispatch (PLUGIN_ID, PLUGIN_VERSION, OCI_REPOSITORY...) Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
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. Comment |
Deploying corvus with
|
| Latest commit: |
db98423
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://79fa282e.corvus-42x.pages.dev |
| Branch Preview URL: | https://chore-dependency-updates-761.corvus-42x.pages.dev |
Deploying corvus-plugins with
|
| Latest commit: |
db98423
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://f3ff14ad.corvus-plugins.pages.dev |
| Branch Preview URL: | https://chore-dependency-updates-761.corvus-plugins.pages.dev |
✅ Contributor ReportUser: @yacosta738
Contributor Report evaluates based on public GitHub activity. Analysis period: 2025-02-21 to 2026-02-21 |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
clients/web/apps/chat/package.json (1)
8-8:⚠️ Potential issue | 🟡 Minor
engines.nodeis inconsistent with@tsconfig/node24and@types/node@24.x
@tsconfig/node24configures the compiler with"target": "es2024"and the correspondinges2024lib entries, which means the TypeScript environment assumes Node 24 capabilities. Combined with@types/node@24.10.13exposing Node 24 APIs, the dev and build tooling (e.g.,vite.config.ts) could reference Node 24-specific APIs that aren't available in Node 22, yetengines.nodestill declares>=22.0.0.Update the minimum required version to align with the rest of the configuration:
🔧 Proposed fix
- "node": ">=22.0.0" + "node": ">=24.0.0"Also applies to: 26-27
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@clients/web/apps/chat/package.json` at line 8, The engines.node entry in package.json is set to ">=22.0.0" but the project uses `@tsconfig/node24` and `@types/node`@24.x which target Node 24 features; update the minimum Node engine to match Node 24 (e.g., ">=24.0.0") so runtime requirements align with the TypeScript config and type definitions, and search for any other occurrences of the old engine constraint (same package.json, CI configs, or tool configs like vite.config.ts) and update them consistently.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@clients/web/apps/chat/package.json`:
- Line 8: The engines.node entry in package.json is set to ">=22.0.0" but the
project uses `@tsconfig/node24` and `@types/node`@24.x which target Node 24
features; update the minimum Node engine to match Node 24 (e.g., ">=24.0.0") so
runtime requirements align with the TypeScript config and type definitions, and
search for any other occurrences of the old engine constraint (same
package.json, CI configs, or tool configs like vite.config.ts) and update them
consistently.
- Update @tsconfig/node22 to @tsconfig/node24 in web chat app. - Add missing dependencies (class-variance-authority, clsx, tailwind-merge) and icons to fix web chat build. - Update pnpm-lock.yaml in web monorepo. - Update Gradle to 9.5.0-milestone-2. - Update Kotlin to 2.3.10, Compose Multiplatform to 1.10.1, and androidx-activity to 1.12.4. Co-authored-by: yacosta738 <33158051+yacosta738@users.noreply.github.com>
- Update @tsconfig/node22 to @tsconfig/node24 in web chat app. - Update engines.node to >=24.0.0 in clients/web/package.json and clients/web/apps/chat/package.json. - Update dev sandbox Dockerfile to use Node 24. - Add missing dependencies (class-variance-authority, clsx, tailwind-merge) and icons to fix web chat build. - Update Gradle to 9.5.0-milestone-2. - Update Kotlin to 2.3.10, Compose Multiplatform to 1.10.1, and androidx-activity to 1.12.4. - Sync pnpm-lock.yaml. Co-authored-by: yacosta738 <33158051+yacosta738@users.noreply.github.com>
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
clients/agent-runtime/src/onboard/wizard.rs (1)
2766-2773:⚠️ Potential issue | 🟠 MajorHard-fail on plugin install aborts the entire wizard with no recovery path, and the fallback policy is inconsistent with the second install
Two related concerns with this change:
1. No-recovery wizard abort (major UX regression)
install_and_handle_surreal_graphs(&mut bootstrap, false)willbail!on any install failure (network error, missing binary, auth issue, etc.). The?propagates this throughsetup_memory()→run_wizard()at step 7 of 9, discarding all inputs from the previous 6 steps. There is no loop insetup_memory()that catches the error and re-prompts the user to select a different backend. This is a hard abort with a "select another memory backend" message but no way to act on it without restarting from scratch.A minimal fix is to handle the error inline and fall back to re-prompting:
🛡️ Proposed fix — recover within setup_memory instead of aborting
if backend == "surreal-graphs" { println!( " {} `surreal-graphs` requires a runtime plugin and will be installed now.", style("ℹ").cyan() ); let mut bootstrap = plugin_bootstrap_config(backend)?; - install_and_handle_surreal_graphs(&mut bootstrap, false)?; + if let Err(err) = install_and_handle_surreal_graphs(&mut bootstrap, false) { + println!( + " {} Surreal Graphs plugin install failed: {}", + style("⚠").yellow().bold(), + style(err.to_string()).yellow() + ); + println!( + " {} Falling back to SQLite memory backend.", + style("→").dim() + ); + let mut fallback = memory_config_defaults_for_backend("sqlite"); + fallback.auto_save = auto_save; + return Ok(fallback); + } }2. Inconsistent fallback policy between the preflight and the actual install
The bootstrap here (on a throwaway
Config) now hard-fails, but the real install inrun_wizard()(line 147) andrun_quick_setup()(line 380) still usesfallback_to_markdown: true. If the bootstrap passes (guaranteeing the plugin is installable), but the second install at line 147 unexpectedly fails,config.memoryis silently overwritten with markdown defaults — discarding all surreal credentials collected bysetup_surreal_memory_options()(line 2776) and resettingauto_saveto the markdown profile default. Consider aligning the second install to also usefalse, or removing the preflight bootstrap install entirely and letting the single install inrun_wizard()/run_quick_setup()act as the sole gate.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@clients/agent-runtime/src/onboard/wizard.rs` around lines 2766 - 2773, setup_memory currently calls install_and_handle_surreal_graphs(&mut bootstrap, false)? which bails out and propagates errors that abort the entire wizard; change this to catch the Result from install_and_handle_surreal_graphs so failures are handled inline (don't use the ?), log or display the error, and loop back to re-prompt the user to pick another backend (or retry) rather than returning from setup_memory; additionally, align the fallback policy with run_wizard/run_quick_setup by either removing this preliminary bootstrap install (plugin_bootstrap_config + install_and_handle_surreal_graphs) entirely or ensuring both installs use the same fallback_to_markdown behavior (e.g., pass false consistently) so that surreal credentials collected in setup_surreal_memory_options are not silently discarded on the second install.
🧹 Nitpick comments (3)
clients/web/apps/docs/src/pages/404.astro (1)
136-165: Deprecatedclipproperty — preferclip-path.
clip: rect()is deprecated in CSS and replaced byclip-path: inset(). While browser support is still wide, new code should use the modern property.♻️ Example migration for the glitch keyframes
`@keyframes` glitch-anim { - 0% { clip: rect(31px, 9999px, 94px, 0); } - 20% { clip: rect(62px, 9999px, 42px, 0); } - 40% { clip: rect(16px, 9999px, 78px, 0); } - 60% { clip: rect(58px, 9999px, 13px, 0); } - 80% { clip: rect(23px, 9999px, 98px, 0); } - 100% { clip: rect(44px, 9999px, 32px, 0); } + 0% { clip-path: inset(31px 0 calc(100% - 94px) 0); } + 20% { clip-path: inset(62px 0 calc(100% - 42px) 0); } + 40% { clip-path: inset(16px 0 calc(100% - 78px) 0); } + 60% { clip-path: inset(58px 0 calc(100% - 13px) 0); } + 80% { clip-path: inset(23px 0 calc(100% - 98px) 0); } + 100% { clip-path: inset(44px 0 calc(100% - 32px) 0); } }Apply the same pattern to
@keyframes glitch-anim2.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@clients/web/apps/docs/src/pages/404.astro` around lines 136 - 165, The CSS uses the deprecated clip: rect(...) in .glitch::before, .glitch::after and inside `@keyframes` glitch-anim and glitch-anim2; replace each clip: rect(top, right, bottom, left) with the modern clip-path: inset(top right bottom left) values (preserving px units and the same numeric order) for both the static pseudo-element rules and every keyframe, and ensure you update both glitch-anim and glitch-anim2 definitions so the animation behavior remains identical..github/workflows/publish-plugins.yml (2)
178-181: Minor: passing OCI password via CLI flag.Line 180 passes the password via
-pon the command line, which can appear in/proc/*/cmdlineon the runner. On GitHub-hosted runners the risk is minimal, but--password-stdinis the safer pattern.Suggested fix
- ./oras login "$registry" -u "$OCI_USERNAME" -p "$OCI_PASSWORD" + echo "$OCI_PASSWORD" | ./oras login "$registry" -u "$OCI_USERNAME" --password-stdin🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/publish-plugins.yml around lines 178 - 181, Replace passing the OCI password via the -p flag to ./oras login with the safer --password-stdin pattern: instead of supplying OCI_PASSWORD on the command line, pipe the OCI_PASSWORD value into the ./oras login command and invoke login with --password-stdin and -u OCI_USERNAME for the same registry variable (registry="${OCI_REPOSITORY%%/*}"); update the invocation that currently calls ./oras login "$registry" -u "$OCI_USERNAME" -p "$OCI_PASSWORD" to use stdin for the password so the secret does not appear in the process command line.
47-120: Hardcoded WASM binary name on line 51 will silently break if the crate is renamed.The filename
memory_surreal_graphs_plugin.wasmis the Cargo-derived binary name (crate name with hyphens → underscores). If the crate name inCargo.tomlchanges, this step will fail silently (thecpwill error, but only at runtime). Consider deriving it from the crate metadata or at least adding a comment documenting the coupling.Also, the plugin metadata JSON is duplicated verbatim between
plugin-manifest.json(lines 57–82) andcatalog.json(lines 84–113). If any field changes (e.g.,min_agent_version,capabilities), both blocks must be updated in sync.Suggested refactor: generate manifest once and embed into catalog
- cat > "$DIST_DIR/plugin-manifest.json" <<JSON - { - "id": "$PLUGIN_ID", - ... - } - JSON - - cat > "$DIST_DIR/catalog.json" <<JSON - { - "plugins": [ - { - "id": "$PLUGIN_ID", - ... - } - ] - } - JSON + # Generate manifest once + cat > "$DIST_DIR/plugin-manifest.json" <<JSON + { + "id": "$PLUGIN_ID", + "version": "$PLUGIN_VERSION", + "digest": "$digest", + "publisher": "corvus-official", + "runtime_api": "corvus-plugin/v1", + "min_agent_version": "0.1.4", + "capabilities": ["memory"], + "entrypoints": { + "memory": "memory_v1", + "health": "health_v1", + "tools": [] + }, + "limits": { + "memory_mb": 256, + "fuel": 1000000, + "timeout_ms": 10000, + "max_output_bytes": 262144 + }, + "artifact": { + "url": "$PLUGIN_ID.wasm", + "digest": "$digest" + } + } + JSON + + # Derive catalog from manifest + jq '{ plugins: [.] }' "$DIST_DIR/plugin-manifest.json" > "$DIST_DIR/catalog.json"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/publish-plugins.yml around lines 47 - 120, The workflow hardcodes the WASM filename and duplicates the plugin JSON; change the wasm_source computation to derive the artifact name from the crate/plugin id (e.g., set wasm_file="${PLUGIN_ID//-/_}.wasm" and use wasm_source="$PLUGIN_DIR/target/wasm32-wasip1/release/$wasm_file") so renaming the crate won't break, and generate the plugin JSON once into a variable or file (e.g., write "$DIST_DIR/plugin-manifest.json" to a temp var MANIFEST_JSON or temporary file) then reuse that manifest when writing catalog.json (embed the manifest object into the catalog's "plugins" array) to avoid duplicate updates; update references to PLUGIN_ID, PLUGIN_VERSION, DIST_DIR, PLUGIN_DIR, and the manifest/catalog creation blocks accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.github/workflows/publish-plugins.yml:
- Around line 122-123: Replace the direct use of secrets in the step-level if
conditional: define a job-level environment variable HAS_COSIGN_KEY with the
expression ${{ secrets.COSIGN_PRIVATE_KEY != '' }}, then change the step named
"🔐 Optional sign plugin bundle with cosign key" to use if: env.HAS_COSIGN_KEY
(instead of if: ${{ secrets.COSIGN_PRIVATE_KEY != '' }}); this moves the secret
check to the job env and ensures the step conditional references the env
variable.
In `@clients/web/apps/chat/src/components/icons/IconGear.vue`:
- Line 1: The IconGear.vue template only renders a center circle and is missing
the outer cog path; update the <template> in IconGear.vue so the <svg> contains
the complete gear geometry (add the outer toothed path element that matches your
design system) or replace the inline SVG with an import from your icon library
(e.g., use the gear icon from Lucide/Heroicons) and ensure the svg viewBox,
stroke, and stroke-width attributes remain consistent with other icons; locate
the existing <svg> in IconGear.vue and either add the missing <path d="..."> for
the cog teeth or swap the whole SVG for the canonical library component to
restore the full gear appearance.
In `@clients/web/apps/chat/src/components/icons/IconLogo.vue`:
- Line 1: The SVG in IconLogo.vue has no accessibility attributes; update the
<svg> element used in the template: if the icon is decorative (used with visible
text) add aria-hidden="true" and focusable="false" to the <svg>; if the icon is
standalone/meaningful add role="img", focusable="false" and either
aria-label="Logo" or include a <title> child with "Logo" to provide a readable
name for screen readers (choose the appropriate variant for the usage).
In `@clients/web/apps/docs/src/content/docs/en/404.mdx`:
- Around line 9-11: The frontmatter uses an absolute link (link: /) which
ignores the configured base and breaks sub-path deployments; update the
frontmatter in docs/en/404.mdx (and the es counterpart) to use a base-aware
URL—either replace the absolute path with a relative one (e.g., link: ../) or
switch to your site's base-aware helper/variable for links so the configured
base is prepended at runtime; locate the frontmatter key named "link" under the
"actions" entry and adjust it accordingly.
In `@clients/web/apps/docs/src/content/docs/es/guides/plugins.md`:
- Around line 127-134: The closing admonition token for the :::important block
is indented and may not be recognized; fix the :::important block by placing the
closing `:::` token at the same left-aligned indentation as the opening
`:::important` (no leading spaces) so the Markdown directive parser (used by
Astro/Starlight/remark) correctly closes the admonition and prevents it from
swallowing following content; locate the `:::important` block in the docs (the
block containing "Este workflow..." and the indented `:::`) and un-indent the
final `:::` to match the opening token.
In `@clients/web/apps/docs/src/pages/404.astro`:
- Around line 140-165: The glitch keyframe animations (glitch-anim and
glitch-anim2) and their use on .glitch and .glitch::after cause continuous
motion; add a prefers-reduced-motion guard to disable these animations for users
who prefer reduced motion by adding an `@media` (prefers-reduced-motion: reduce)
rule that targets .glitch and .glitch::after and sets animation: none !important
(or animation-duration: 0s) and removes any rapid transforms or text-shadow
flicker, so the glitch effect is suppressed when the user prefers reduced
motion.
- Line 39: Update the glitch CSS by replacing deprecated clip: rect(...) usages
in the glitch keyframes with clip-path equivalents (use inset(...) values) in
the `@keyframes` named for the glitch (e.g., glitch-anim) and the pseudo-elements
.glitch::before and .glitch::after; also wrap the glitch pseudo-element
animations in a prefers-reduced-motion media query to disable or stop the
animations for users who request reduced motion (e.g., set animation: none or
reduce duration inside `@media` (prefers-reduced-motion: reduce) for
.glitch::before, .glitch::after). Ensure all references to clip in the
stylesheet are converted to clip-path and that the keyframe percentage steps
mirror the original timing but use clip-path syntax.
In `@gradle/wrapper/gradle-wrapper.properties`:
- Line 3: Summary: The gradle distribution URL points to a pre-release milestone
(gradle-9.5.0-milestone-2-bin.zip); update it to the GA distribution when
available. Replace the distributionUrl value that currently references
"gradle-9.5.0-milestone-2-bin.zip" with "gradle-9.5.0-bin.zip" (or pin to the GA
release identifier) and ensure whoever merges this change tracks GA availability
so the milestone URL is not left long-term in distributionUrl.
---
Outside diff comments:
In `@clients/agent-runtime/src/onboard/wizard.rs`:
- Around line 2766-2773: setup_memory currently calls
install_and_handle_surreal_graphs(&mut bootstrap, false)? which bails out and
propagates errors that abort the entire wizard; change this to catch the Result
from install_and_handle_surreal_graphs so failures are handled inline (don't use
the ?), log or display the error, and loop back to re-prompt the user to pick
another backend (or retry) rather than returning from setup_memory;
additionally, align the fallback policy with run_wizard/run_quick_setup by
either removing this preliminary bootstrap install (plugin_bootstrap_config +
install_and_handle_surreal_graphs) entirely or ensuring both installs use the
same fallback_to_markdown behavior (e.g., pass false consistently) so that
surreal credentials collected in setup_surreal_memory_options are not silently
discarded on the second install.
---
Duplicate comments:
In `@clients/web/apps/chat/src/components/icons/IconGear.vue`:
- Line 1: The SVG in IconGear.vue is missing accessibility attributes; update
the <svg> element to follow the IconLogo.vue pattern by either marking it as
decorative (add aria-hidden="true" and focusable="false") or as meaningful (add
role="img", include a <title>Settings</title> and aria-label="Settings"); ensure
the <svg> in IconGear.vue is updated accordingly so screen readers handle the
icon correctly.
In `@clients/web/apps/docs/src/content/docs/es/404.mdx`:
- Around line 9-11: The "Volver al Inicio" nav entry in
clients/web/apps/docs/src/content/docs/es/404.mdx currently uses a hardcoded
link: / which breaks when the site is deployed under a sub-path; update the
entry that contains text: "Volver al Inicio" and link: / to use the project’s
base-aware home URL (i.e., replace the bare '/' with the site/base URL helper
used elsewhere — the same pattern as the English 404 page fix) so the link
respects the configured base path at runtime.
---
Nitpick comments:
In @.github/workflows/publish-plugins.yml:
- Around line 178-181: Replace passing the OCI password via the -p flag to
./oras login with the safer --password-stdin pattern: instead of supplying
OCI_PASSWORD on the command line, pipe the OCI_PASSWORD value into the ./oras
login command and invoke login with --password-stdin and -u OCI_USERNAME for the
same registry variable (registry="${OCI_REPOSITORY%%/*}"); update the invocation
that currently calls ./oras login "$registry" -u "$OCI_USERNAME" -p
"$OCI_PASSWORD" to use stdin for the password so the secret does not appear in
the process command line.
- Around line 47-120: The workflow hardcodes the WASM filename and duplicates
the plugin JSON; change the wasm_source computation to derive the artifact name
from the crate/plugin id (e.g., set wasm_file="${PLUGIN_ID//-/_}.wasm" and use
wasm_source="$PLUGIN_DIR/target/wasm32-wasip1/release/$wasm_file") so renaming
the crate won't break, and generate the plugin JSON once into a variable or file
(e.g., write "$DIST_DIR/plugin-manifest.json" to a temp var MANIFEST_JSON or
temporary file) then reuse that manifest when writing catalog.json (embed the
manifest object into the catalog's "plugins" array) to avoid duplicate updates;
update references to PLUGIN_ID, PLUGIN_VERSION, DIST_DIR, PLUGIN_DIR, and the
manifest/catalog creation blocks accordingly.
In `@clients/web/apps/docs/src/pages/404.astro`:
- Around line 136-165: The CSS uses the deprecated clip: rect(...) in
.glitch::before, .glitch::after and inside `@keyframes` glitch-anim and
glitch-anim2; replace each clip: rect(top, right, bottom, left) with the modern
clip-path: inset(top right bottom left) values (preserving px units and the same
numeric order) for both the static pseudo-element rules and every keyframe, and
ensure you update both glitch-anim and glitch-anim2 definitions so the animation
behavior remains identical.
| - name: 🔐 Optional sign plugin bundle with cosign key | ||
| if: ${{ secrets.COSIGN_PRIVATE_KEY != '' }} |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
GitHub Actions secrets in if conditional step official documentation
💡 Result:
GitHub’s official docs state that secrets cannot be directly referenced in if: conditionals. Instead, set the secret as a job-level environment variable and use env in the if:. [1]
jobs:
build:
runs-on: ubuntu-latest
env:
MY_SECRET: ${{ secrets.MY_SECRET }}
steps:
- name: Only run if secret is set
if: ${{ env.MY_SECRET != '' }}
run: echo "Secret is set"The secrets context is documented separately in the Contexts reference. [2]
Sources: GitHub Docs — Using secrets in GitHub Actions [1]; Contexts reference (secrets context) [2].
Using secrets directly in if: conditionals violates GitHub Actions documentation.
GitHub's official documentation explicitly states that secrets cannot be directly referenced in step if: conditions. Use a job-level environment variable instead.
Set an env var at job level:
env:
HAS_COSIGN_KEY: ${{ secrets.COSIGN_PRIVATE_KEY != '' }}Then reference it in the step condition:
- if: ${{ secrets.COSIGN_PRIVATE_KEY != '' }}
+ if: ${{ env.HAS_COSIGN_KEY == 'true' }}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/publish-plugins.yml around lines 122 - 123, Replace the
direct use of secrets in the step-level if conditional: define a job-level
environment variable HAS_COSIGN_KEY with the expression ${{
secrets.COSIGN_PRIVATE_KEY != '' }}, then change the step named "🔐 Optional
sign plugin bundle with cosign key" to use if: env.HAS_COSIGN_KEY (instead of
if: ${{ secrets.COSIGN_PRIVATE_KEY != '' }}); this moves the secret check to the
job env and ensures the step conditional references the env variable.
| @@ -0,0 +1 @@ | |||
| <template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3" /></svg></template> | |||
There was a problem hiding this comment.
Incomplete gear icon — outer cog/teeth path is missing.
The component only renders the small center hub circle (r="3"). A gear icon requires the outer path describing the cog teeth. As-is, IconGear displays a tiny 6 px circle on a 24 px canvas — visually indistinguishable from a dot.
Below is a representative complete gear path (Heroicons-style, MIT-licensed geometry — adjust to match your design system):
🐛 Proposed fix — complete gear SVG
-<template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3" /></svg></template>
+<template>
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
+ stroke-linecap="round" stroke-linejoin="round"
+ aria-hidden="true" focusable="false">
+ <circle cx="12" cy="12" r="3" />
+ <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33
+ 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33
+ l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4
+ h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06
+ A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51
+ a1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9
+ a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" />
+ </svg>
+</template>If you're already using a design-system icon set (Lucide, Heroicons, etc.), prefer importing the gear icon from there instead of hand-rolling the path.
📝 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.
| <template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3" /></svg></template> | |
| <template> | |
| <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" | |
| stroke-linecap="round" stroke-linejoin="round" | |
| aria-hidden="true" focusable="false"> | |
| <circle cx="12" cy="12" r="3" /> | |
| <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 | |
| 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33 | |
| l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4 | |
| h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06 | |
| A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 | |
| a1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9 | |
| a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" /> | |
| </svg> | |
| </template> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/chat/src/components/icons/IconGear.vue` at line 1, The
IconGear.vue template only renders a center circle and is missing the outer cog
path; update the <template> in IconGear.vue so the <svg> contains the complete
gear geometry (add the outer toothed path element that matches your design
system) or replace the inline SVG with an import from your icon library (e.g.,
use the gear icon from Lucide/Heroicons) and ensure the svg viewBox, stroke, and
stroke-width attributes remain consistent with other icons; locate the existing
<svg> in IconGear.vue and either add the missing <path d="..."> for the cog
teeth or swap the whole SVG for the canonical library component to restore the
full gear appearance.
| @@ -0,0 +1 @@ | |||
| <template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template> | |||
There was a problem hiding this comment.
Add accessibility attributes to the SVG.
The SVG element carries no accessible metadata. Without it, screen readers will encounter a meaningless unnamed element.
- If the icon is decorative (always accompanied by visible text): add
aria-hidden="true". - If the icon is standalone/meaningful: add
role="img"andaria-label="Logo"(or a<title>child element).
♿ Proposed fix (decorative usage)
-<template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template>
+<template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true" focusable="false"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template>For standalone/meaningful usage instead:
-<template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template>
+<template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" role="img" aria-label="Logo" focusable="false"><title>Logo</title><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template>Note: focusable="false" is needed to prevent IE/Edge from making inline SVGs keyboard-focusable.
📝 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.
| <template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template> | |
| <template><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" role="img" aria-label="Logo" focusable="false"><title>Logo</title><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5" /></svg></template> |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/chat/src/components/icons/IconLogo.vue` at line 1, The SVG
in IconLogo.vue has no accessibility attributes; update the <svg> element used
in the template: if the icon is decorative (used with visible text) add
aria-hidden="true" and focusable="false" to the <svg>; if the icon is
standalone/meaningful add role="img", focusable="false" and either
aria-label="Logo" or include a <title> child with "Logo" to provide a readable
name for screen readers (choose the appropriate variant for the usage).
| - text: Back to Home | ||
| link: / | ||
| icon: right-arrow |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find and examine astro.config files in the docs app
find clients/web/apps/docs -name "astro.config.*" -type fRepository: dallay/corvus
Length of output: 95
🏁 Script executed:
#!/bin/bash
# Read the 404.mdx file to see the full context
cat -n clients/web/apps/docs/src/content/docs/en/404.mdxRepository: dallay/corvus
Length of output: 769
🏁 Script executed:
#!/bin/bash
# Check if there's a starlight config
find clients/web/apps/docs -type f \( -name "*.config.*" -o -name "*.ts" -o -name "*.js" \) | grep -E "(starlight|config)" | head -20Repository: dallay/corvus
Length of output: 139
🏁 Script executed:
#!/bin/bash
# Read the astro config to see base URL setting
cat -n clients/web/apps/docs/astro.config.mjsRepository: dallay/corvus
Length of output: 4557
🏁 Script executed:
#!/bin/bash
# Search for Starlight configuration and how it handles actions/links
find . -type f \( -name "*.ts" -o -name "*.js" \) | xargs grep -l "actions" | grep -i starlight | head -10Repository: dallay/corvus
Length of output: 39
🏁 Script executed:
#!/bin/bash
# Look for any custom Astro components or layouts that might handle the 404 page
find clients/web/apps/docs -type f \( -name "*.astro" -o -name "*.ts" \) | head -20Repository: dallay/corvus
Length of output: 186
🏁 Script executed:
#!/antml/bash
# Search for how links are processed in the codebase - check for any getBaseUrl or link processing
rg "getBaseUrl|import.*base|normalizedBaseUrl" clients/web/apps/docs --type ts --type js -A 3 -B 1 | head -50Repository: dallay/corvus
Length of output: 39
🏁 Script executed:
#!/bin/bash
# Read the 404.astro page to see how links are handled
cat -n clients/web/apps/docs/src/pages/404.astroRepository: dallay/corvus
Length of output: 9069
🏁 Script executed:
#!/bin/bash
# Look at the page structure to understand how Starlight renders the MDX content
find clients/web/apps/docs/src -type f -name "*.astro" -o -name "*.ts" | xargs grep -l "base\|getBase\|import.*Astro" | head -20Repository: dallay/corvus
Length of output: 142
🌐 Web query:
Starlight Astro frontmatter actions link base URL handling
💡 Result:
In Starlight, the hero.actions[].link (and other authored links you provide in frontmatter) is used as-is. If your Astro site is deployed under a subpath via base (e.g. /docs/), a frontmatter link like:
hero:
actions:
- text: Get started
link: /getting-started/will still point to /getting-started/ at the domain root, not /<base>/getting-started/. Starlight/Astro only auto-prefix assets and links they generate/manage (sidebar, search results, etc.), not links you authored. [1][2]
Base-aware fix: prefix your links with import.meta.env.BASE_URL (optionally via a helper), then use that value when generating the link:
// src/utils/links.ts
const base = import.meta.env.BASE_URL.replace(/\/$/, '');
export const withBase = (href: string) => base + href;and then:
<a href={withBase('/getting-started/')}>Get started</a>(Use the same idea anywhere you need base-aware URLs.) [2]
Sources:
[1] Starlight Frontmatter Reference (Hero actions link field) https://starlight.astro.build/hi/reference/frontmatter/
[2] Starlight discussion explaining base handling + import.meta.env.BASE_URL helper withastro/starlight#966
🏁 Script executed:
#!/bin/bash
# Check if there are any other pages in the docs using action links
rg "actions:" clients/web/apps/docs/src/content/docs -A 3 | head -50Repository: dallay/corvus
Length of output: 1154
link: / won't respect base URL for sub-path deployments.
Starlight does not prepend the configured base to absolute paths in frontmatter actions. With base: '/corvus/' configured, a link of / will navigate to the server root instead of /corvus/. Both en and es versions of this file have the same issue. Use a relative path like ../ or apply base-aware URL handling instead.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/docs/src/content/docs/en/404.mdx` around lines 9 - 11, The
frontmatter uses an absolute link (link: /) which ignores the configured base
and breaks sub-path deployments; update the frontmatter in docs/en/404.mdx (and
the es counterpart) to use a base-aware URL—either replace the absolute path
with a relative one (e.g., link: ../) or switch to your site's base-aware
helper/variable for links so the configured base is prepended at runtime; locate
the frontmatter key named "link" under the "actions" entry and adjust it
accordingly.
| :::important | ||
| Para integrar un nuevo plugin al release automático: | ||
| Este workflow está actualmente configurado para `memory.surreal.graphs` en los defaults de env del | ||
| job. Para un nuevo plugin, ya sea: | ||
|
|
||
| 1. Créalo en `clients/agent-runtime/plugins/<carpeta-plugin>/`. | ||
| 2. Agrega `package.metadata.corvus.plugin_id` en su `Cargo.toml`. | ||
| 3. Define límites/capacidades en `package.metadata.corvus`. | ||
| 4. Crea un tag de release: `plugin/<plugin-id>/v<version>`. | ||
|
|
||
| Con metadata correcta, no hace falta cambiar el workflow para plugins nuevos. | ||
| ::: | ||
|
|
||
| Ejemplo de release: | ||
|
|
||
| ```bash | ||
| git tag plugin/memory.surreal.graphs/v0.1.0 | ||
| git push origin plugin/memory.surreal.graphs/v0.1.0 | ||
| ``` | ||
|
|
||
| Configuración de Cloudflare esperada por el workflow: | ||
|
|
||
| - Secret: `CLOUDFLARE_API_TOKEN` | ||
| - Secret: `CLOUDFLARE_ACCOUNT_ID` | ||
| - Variable de repositorio: `CLOUDFLARE_PAGES_PROJECT_NAME` | ||
| 1. Adaptar los valores de env para el nuevo plugin, o | ||
| 2. Generalizar los inputs/matrix del workflow para que plugin ID/folder/nombre de artefacto sean | ||
| parámetros. | ||
| ::: |
There was a problem hiding this comment.
The ::: directive closing tag may not render correctly due to indentation.
Line 134: the ::: closing tag is indented (aligned under the list item), which in many Markdown directive parsers (including remark-based ones used by Astro/Starlight) means it won't be recognized as closing the :::important block. This could cause the admonition to swallow all subsequent content.
Proposed fix
2. Generalizar los inputs/matrix del workflow para que plugin ID/folder/nombre de artefacto sean
parámetros.
- :::
+:::📝 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.
| :::important | |
| Para integrar un nuevo plugin al release automático: | |
| Este workflow está actualmente configurado para `memory.surreal.graphs` en los defaults de env del | |
| job. Para un nuevo plugin, ya sea: | |
| 1. Créalo en `clients/agent-runtime/plugins/<carpeta-plugin>/`. | |
| 2. Agrega `package.metadata.corvus.plugin_id` en su `Cargo.toml`. | |
| 3. Define límites/capacidades en `package.metadata.corvus`. | |
| 4. Crea un tag de release: `plugin/<plugin-id>/v<version>`. | |
| Con metadata correcta, no hace falta cambiar el workflow para plugins nuevos. | |
| ::: | |
| Ejemplo de release: | |
| ```bash | |
| git tag plugin/memory.surreal.graphs/v0.1.0 | |
| git push origin plugin/memory.surreal.graphs/v0.1.0 | |
| ``` | |
| Configuración de Cloudflare esperada por el workflow: | |
| - Secret: `CLOUDFLARE_API_TOKEN` | |
| - Secret: `CLOUDFLARE_ACCOUNT_ID` | |
| - Variable de repositorio: `CLOUDFLARE_PAGES_PROJECT_NAME` | |
| 1. Adaptar los valores de env para el nuevo plugin, o | |
| 2. Generalizar los inputs/matrix del workflow para que plugin ID/folder/nombre de artefacto sean | |
| parámetros. | |
| ::: | |
| :::important | |
| Este workflow está actualmente configurado para `memory.surreal.graphs` en los defaults de env del | |
| job. Para un nuevo plugin, ya sea: | |
| 1. Adaptar los valores de env para el nuevo plugin, o | |
| 2. Generalizar los inputs/matrix del workflow para que plugin ID/folder/nombre de artefacto sean | |
| parámetros. | |
| ::: |
🧰 Tools
🪛 LanguageTool
[grammar] ~127-~127: Cambia la palabra o signo.
Context: ... de artefactos del bundle. :::important Este workflow está actualmente configura...
(QB_NEW_ES_OTHER_ERROR_IDS_REPLACEMENT_SPACE)
[grammar] ~128-~128: Elimina la palabra o signo.
Context: ...rreal.graphs` en los defaults de env del job. Para un nuevo plugin, ya sea: 1. A...
(QB_NEW_ES_OTHER_ERROR_IDS_UNNECESSARY_SPACE)
[grammar] ~129-~129: Elimina la puntuación
Context: ...e env del job. Para un nuevo plugin, ya sea: 1. Adaptar los valores de env para el nuevo...
(QB_NEW_ES_OTHER_ERROR_IDS_UNNECESSARY_PUNCTUATION)
[grammar] ~131-~131: Elimina la palabra o signo.
Context: ...s valores de env para el nuevo plugin, o 2. Generalizar los inputs/matrix del workflow para que...
(QB_NEW_ES_OTHER_ERROR_IDS_UNNECESSARY_SPACE)
[grammar] ~132-~132: Elimina la palabra o signo.
Context: ...lugin ID/folder/nombre de artefacto sean parámetros. ::: ## 6. Comandos de Op...
(QB_NEW_ES_OTHER_ERROR_IDS_UNNECESSARY_SPACE)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/docs/src/content/docs/es/guides/plugins.md` around lines 127
- 134, The closing admonition token for the :::important block is indented and
may not be recognized; fix the :::important block by placing the closing `:::`
token at the same left-aligned indentation as the opening `:::important` (no
leading spaces) so the Markdown directive parser (used by
Astro/Starlight/remark) correctly closes the admonition and prevents it from
swallowing following content; locate the `:::important` block in the docs (the
block containing "Este workflow..." and the indented `:::`) and un-indent the
final `:::` to match the opening token.
| const labels = t[locale] | ||
| --- | ||
|
|
||
| <StarlightPage frontmatter={{ title: labels.title, template: 'splash', editUrl: false }}> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# First, let's explore the repository structure
find . -name "404.astro" -o -name "*StarlightPage*" | head -20Repository: dallay/corvus
Length of output: 100
🏁 Script executed:
#!/bin/bash
# Look for Starlight package and StarlightPage component
fd "StarlightPage" --type f 2>/dev/null | head -10
fd "astro.config" --type f 2>/dev/nullRepository: dallay/corvus
Length of output: 181
🏁 Script executed:
#!/bin/bash
# Search for the actual 404.astro file and inspect it
find . -path "*/docs/src/pages/404.astro" -type fRepository: dallay/corvus
Length of output: 100
🏁 Script executed:
#!/bin/bash
# Check Starlight configuration and component definitions
rg "editUrl" -t astro -t ts -t js --max-count 20 2>/dev/null | head -30Repository: dallay/corvus
Length of output: 39
🏁 Script executed:
cat -n ./clients/web/apps/docs/src/pages/404.astroRepository: dallay/corvus
Length of output: 9069
🏁 Script executed:
# Check for CSS files where custom variables might be defined
fd "\.css" clients/web/apps/docs/src --type fRepository: dallay/corvus
Length of output: 100
🏁 Script executed:
# Check the astro.config for Starlight setup
cat -n ./clients/web/apps/docs/astro.config.mjsRepository: dallay/corvus
Length of output: 4557
🏁 Script executed:
cat -n ./clients/web/apps/docs/src/styles/custom.cssRepository: dallay/corvus
Length of output: 15874
🏁 Script executed:
# Search for clip-path usage or clip property info in docs
rg "clip-path|prefers-reduced-motion" --type css clients/web/apps/docsRepository: dallay/corvus
Length of output: 149
🏁 Script executed:
# Check StarlightPage component documentation or usage in other files
fd "\.astro" clients/web/apps/docs/src --type f -x grep -l "StarlightPage" {} \;Repository: dallay/corvus
Length of output: 98
Replace deprecated clip: rect() with clip-path and add prefers-reduced-motion for glitch animations.
The custom CSS variables and editUrl: false are correctly implemented. However, the glitch effect (lines 136-165) uses the deprecated clip property in keyframes and lacks motion-sensitivity. Wrap the glitch animations in @media (prefers-reduced-motion: reduce) to disable or slow them, and replace clip: rect(...) with equivalent clip-path syntax:
Example replacement:
`@media` (prefers-reduced-motion: reduce) {
.glitch::before,
.glitch::after {
animation: none;
}
}
`@keyframes` glitch-anim {
0% { clip-path: inset(31px 0 94px 9999px); }
20% { clip-path: inset(62px 0 42px 9999px); }
/* ... continue pattern ... */
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/docs/src/pages/404.astro` at line 39, Update the glitch CSS
by replacing deprecated clip: rect(...) usages in the glitch keyframes with
clip-path equivalents (use inset(...) values) in the `@keyframes` named for the
glitch (e.g., glitch-anim) and the pseudo-elements .glitch::before and
.glitch::after; also wrap the glitch pseudo-element animations in a
prefers-reduced-motion media query to disable or stop the animations for users
who request reduced motion (e.g., set animation: none or reduce duration inside
`@media` (prefers-reduced-motion: reduce) for .glitch::before, .glitch::after).
Ensure all references to clip in the stylesheet are converted to clip-path and
that the keyframe percentage steps mirror the original timing but use clip-path
syntax.
| animation: glitch-anim 5s infinite linear alternate-reverse; | ||
| } | ||
|
|
||
| .glitch::after { | ||
| left: -2px; | ||
| text-shadow: -2px 0 #ff00c1, 2px 2px var(--sl-color-accent); | ||
| animation: glitch-anim2 1s infinite linear alternate-reverse; | ||
| } | ||
|
|
||
| @keyframes glitch-anim { | ||
| 0% { clip: rect(31px, 9999px, 94px, 0); } | ||
| 20% { clip: rect(62px, 9999px, 42px, 0); } | ||
| 40% { clip: rect(16px, 9999px, 78px, 0); } | ||
| 60% { clip: rect(58px, 9999px, 13px, 0); } | ||
| 80% { clip: rect(23px, 9999px, 98px, 0); } | ||
| 100% { clip: rect(44px, 9999px, 32px, 0); } | ||
| } | ||
|
|
||
| @keyframes glitch-anim2 { | ||
| 0% { clip: rect(65px, 9999px, 100px, 0); } | ||
| 20% { clip: rect(12px, 9999px, 56px, 0); } | ||
| 40% { clip: rect(54px, 9999px, 21px, 0); } | ||
| 60% { clip: rect(98px, 9999px, 87px, 0); } | ||
| 80% { clip: rect(31px, 9999px, 44px, 0); } | ||
| 100% { clip: rect(2px, 9999px, 12px, 0); } | ||
| } |
There was a problem hiding this comment.
Missing prefers-reduced-motion guard on glitch animations.
glitch-anim2 runs at a 1-second interval continuously. For users with vestibular disorders this level of rapid, looping animation can cause physical discomfort. WCAG 2.1 SC 2.3.3 (AAA) recommends allowing users to pause or stop such animations.
♿ Proposed fix — respect motion preferences
+ `@media` (prefers-reduced-motion: reduce) {
+ .glitch::before,
+ .glitch::after {
+ animation: none;
+ }
+ }Add this block at the end of the <style> section.
📝 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.
| animation: glitch-anim 5s infinite linear alternate-reverse; | |
| } | |
| .glitch::after { | |
| left: -2px; | |
| text-shadow: -2px 0 #ff00c1, 2px 2px var(--sl-color-accent); | |
| animation: glitch-anim2 1s infinite linear alternate-reverse; | |
| } | |
| @keyframes glitch-anim { | |
| 0% { clip: rect(31px, 9999px, 94px, 0); } | |
| 20% { clip: rect(62px, 9999px, 42px, 0); } | |
| 40% { clip: rect(16px, 9999px, 78px, 0); } | |
| 60% { clip: rect(58px, 9999px, 13px, 0); } | |
| 80% { clip: rect(23px, 9999px, 98px, 0); } | |
| 100% { clip: rect(44px, 9999px, 32px, 0); } | |
| } | |
| @keyframes glitch-anim2 { | |
| 0% { clip: rect(65px, 9999px, 100px, 0); } | |
| 20% { clip: rect(12px, 9999px, 56px, 0); } | |
| 40% { clip: rect(54px, 9999px, 21px, 0); } | |
| 60% { clip: rect(98px, 9999px, 87px, 0); } | |
| 80% { clip: rect(31px, 9999px, 44px, 0); } | |
| 100% { clip: rect(2px, 9999px, 12px, 0); } | |
| } | |
| animation: glitch-anim 5s infinite linear alternate-reverse; | |
| } | |
| .glitch::after { | |
| left: -2px; | |
| text-shadow: -2px 0 `#ff00c1`, 2px 2px var(--sl-color-accent); | |
| animation: glitch-anim2 1s infinite linear alternate-reverse; | |
| } | |
| `@keyframes` glitch-anim { | |
| 0% { clip: rect(31px, 9999px, 94px, 0); } | |
| 20% { clip: rect(62px, 9999px, 42px, 0); } | |
| 40% { clip: rect(16px, 9999px, 78px, 0); } | |
| 60% { clip: rect(58px, 9999px, 13px, 0); } | |
| 80% { clip: rect(23px, 9999px, 98px, 0); } | |
| 100% { clip: rect(44px, 9999px, 32px, 0); } | |
| } | |
| `@keyframes` glitch-anim2 { | |
| 0% { clip: rect(65px, 9999px, 100px, 0); } | |
| 20% { clip: rect(12px, 9999px, 56px, 0); } | |
| 40% { clip: rect(54px, 9999px, 21px, 0); } | |
| 60% { clip: rect(98px, 9999px, 87px, 0); } | |
| 80% { clip: rect(31px, 9999px, 44px, 0); } | |
| 100% { clip: rect(2px, 9999px, 12px, 0); } | |
| } | |
| `@media` (prefers-reduced-motion: reduce) { | |
| .glitch::before, | |
| .glitch::after { | |
| animation: none; | |
| } | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@clients/web/apps/docs/src/pages/404.astro` around lines 140 - 165, The glitch
keyframe animations (glitch-anim and glitch-anim2) and their use on .glitch and
.glitch::after cause continuous motion; add a prefers-reduced-motion guard to
disable these animations for users who prefer reduced motion by adding an `@media`
(prefers-reduced-motion: reduce) rule that targets .glitch and .glitch::after
and sets animation: none !important (or animation-duration: 0s) and removes any
rapid transforms or text-shadow flicker, so the glitch effect is suppressed when
the user prefers reduced motion.
| distributionBase=GRADLE_USER_HOME | ||
| distributionPath=wrapper/dists | ||
| distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-milestone-1-bin.zip | ||
| distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-milestone-2-bin.zip |
There was a problem hiding this comment.
Pre-release milestone: track GA availability.
gradle-9.5.0-milestone-2-bin.zip is a pre-release build. Milestone distributions carry no stability guarantee and can introduce unexpected Gradle API changes. Given the PR explicitly targets milestone-2 as part of the dependency dashboard work this is intentional, but make sure to pin to the GA gradle-9.5.0-bin.zip once it's released rather than leaving the milestone version in place long-term.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@gradle/wrapper/gradle-wrapper.properties` at line 3, Summary: The gradle
distribution URL points to a pre-release milestone
(gradle-9.5.0-milestone-2-bin.zip); update it to the GA distribution when
available. Replace the distributionUrl value that currently references
"gradle-9.5.0-milestone-2-bin.zip" with "gradle-9.5.0-bin.zip" (or pin to the GA
release identifier) and ensure whoever merges this change tracks GA availability
so the milestone URL is not left long-term in distributionUrl.
Updated various dependencies across the web and Kotlin stacks. Fixed pre-existing build errors in the web chat application by adding missing icons and utility dependencies. Updated Gradle wrapper and version catalog for milestone 2 and latest Kotlin/Compose versions.
Fixes #3
PR created automatically by Jules for task 7615328780316186717 started by @yacosta738
Summary by CodeRabbit
Chores
New Features
Documentation
Plugins