Skip to content

chore: Update dependencies and fix web build issues#65

Closed
yacosta738 wants to merge 4 commits into
mainfrom
chore/dependency-updates-7615328780316186717
Closed

chore: Update dependencies and fix web build issues#65
yacosta738 wants to merge 4 commits into
mainfrom
chore/dependency-updates-7615328780316186717

Conversation

@yacosta738
Copy link
Copy Markdown
Contributor

@yacosta738 yacosta738 commented Feb 21, 2026

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

    • Bumped Node/tooling to Node 24 and updated related build/tool versions.
  • New Features

    • Added inline SVG gear and logo icon components.
    • Introduced a localized 404 page.
  • Documentation

    • Simplified plugin publish guide and removed detailed publish workflow docs.
  • Plugins

    • Removed one plugin entry and its public manifest/artifacts; adjusted public headers and added deployment headers configuration.

- 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>
@google-labs-jules
Copy link
Copy Markdown
Contributor

👋 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 @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@google-labs-jules google-labs-jules Bot mentioned this pull request Feb 21, 2026
32 tasks
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 21, 2026

📝 Walkthrough

Walkthrough

Repository-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

Cohort / File(s) Summary
Publish workflow & docs
.github/workflows/publish-plugins.yml, .github/workflows/README.md, clients/web/apps/docs/src/content/docs/**/guides/plugins.md
Replaced complex dynamic release workflow with a simplified build-and-publish flow: single manual trigger, static manifest/catalog/revocations generation, optional cosign signing, simplified OCI push and artifact upload; removed Cloudflare Pages/catalog-site steps and detailed docs.
Public plugin artifacts & app pages
clients/web/apps/plugins/public/catalog.json, clients/web/apps/plugins/public/artifacts/*/.../plugin-manifest.json, clients/web/apps/plugins/public/_headers, clients/web/apps/plugins/src/pages/index.astro, clients/web/apps/plugins/README.md
Removed plugin manifest/artifact entries, stripped artifact-specific headers and documentation references, and removed immutable artifact endpoints from plugins index.
Vercel headers
clients/web/apps/plugins/vercel.json
Added Vercel route headers for /catalog.json and /revocations.json (content-type, cache-control, nosniff).
Node / TypeScript bumps
clients/web/apps/chat/package.json, clients/web/apps/chat/tsconfig.node.json, clients/web/package.json, dev/sandbox/Dockerfile
Bumped Node engine requirement to >=24.0.0, replaced @tsconfig/node22 with @tsconfig/node24, updated Docker Node setup to v24.
Chat UI icons
clients/web/apps/chat/src/components/icons/IconGear.vue, clients/web/apps/chat/src/components/icons/IconLogo.vue
Added two new Vue icon components (gear and logo) as inline SVG presentational components.
Surreal/Onboarding changes
clients/agent-runtime/src/onboard/wizard.rs
Changed Surreal-graphs bootstrap to run with fallback disabled and gated surreal prompts on original backend choice (avoids overriding config from bootstrap).
Plugin Cargo metadata removal
clients/agent-runtime/plugins/memory-surreal-graphs/Cargo.toml
Removed [package.metadata.corvus] block (plugin metadata fields removed).
Docs frontmatter/content refactor
clients/web/apps/docs/src/content/**/{index.mdx,404.mdx}, clients/web/apps/docs/src/content/**/guides/plugins.md
Lifted hero.tagline/actions to top-level frontmatter; simplified plugin publishing guide wording and structure.
404 page addition
clients/web/apps/docs/src/pages/404.astro
Added localized, styled 404 Astro page with en/es translations and UI layout.
Gradle updates
gradle/libs.versions.toml, gradle/wrapper/gradle-wrapper.properties
Bumped gradle and Kotlin versions and gradle wrapper distribution URL.
Misc lint/ignore
.lycheeignore
Removed GNU Make URL ignore rule.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant User as User (dispatch)
participant GH as GitHub Actions
participant Build as WASM Build
participant Manifest as Manifest Generator
participant Cosign as Cosign (optional)
participant OCI as OCI Registry
participant Upload as Artifact Upload

User->>GH: workflow_dispatch (PLUGIN_ID, PLUGIN_VERSION, OCI_REPOSITORY...)
GH->>Build: build WASM artifact -> outputs wasm
GH->>Manifest: generate plugin-manifest.json, catalog.json, revocations.json
alt signing enabled
GH->>Cosign: sign wasm -> produces wasm.sig / wasm.pem
end
alt OCI push provided
GH->>OCI: push wasm bundle (wasm + manifests [+ signatures])
end
GH->>Upload: upload artifact bundle (wasm, manifests, signatures)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Out of Scope Changes check ❓ Inconclusive The PR includes substantial changes to plugin workflows and documentation beyond typical dependency updates, making it unclear if all modifications align with issue #3's scope. Clarify whether workflow simplifications, plugin manifest removals, and documentation updates are necessary for resolving the dependency dashboard issue #3.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: Update dependencies and fix web build issues' clearly and concisely summarizes the main changes: dependency updates and web build fixes.
Description check ✅ Passed The description covers the main objectives, links issue #3, and explains the key changes made across web and Kotlin stacks.
Linked Issues check ✅ Passed The PR addresses issue #3's requirement to handle deprecated dependencies like @tsconfig/node22→node24 and updates multiple dependency versions (Gradle, Kotlin, Compose, androidx-activity).

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch chore/dependency-updates-7615328780316186717

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.

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Feb 21, 2026

Deploying corvus with  Cloudflare Pages  Cloudflare Pages

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

View logs

@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages Bot commented Feb 21, 2026

Deploying corvus-plugins with  Cloudflare Pages  Cloudflare Pages

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

View logs

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Feb 21, 2026

✅ Contributor Report

User: @yacosta738
Status: Passed (12/13 metrics passed)

Metric Description Value Threshold Status
PR Merge Rate PRs merged vs closed 89% >= 30%
Repo Quality Repos with ≥100 stars 0 >= 0
Positive Reactions Positive reactions received 9 >= 1
Negative Reactions Negative reactions received 0 <= 5
Account Age GitHub account age 3039 days >= 30 days
Activity Consistency Regular activity over time 108% >= 0%
Issue Engagement Issues with community engagement 0 >= 0
Code Reviews Code reviews given to others 363 >= 0
Merger Diversity Unique maintainers who merged PRs 3 >= 0
Repo History Merge Rate Merge rate in this repo 88% >= 0%
Repo History Min PRs Previous PRs in this repo 46 >= 0
Profile Completeness Profile richness (bio, followers) 90 >= 0
Suspicious Patterns Spam-like activity detection 1 N/A

Contributor Report evaluates based on public GitHub activity. Analysis period: 2025-02-21 to 2026-02-21

@yacosta738 yacosta738 changed the title Update dependencies and fix web build issues chore: Update dependencies and fix web build issues Feb 21, 2026
@yacosta738 yacosta738 marked this pull request as ready for review February 21, 2026 20:51
Copy link
Copy Markdown
Contributor

@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.

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.node is inconsistent with @tsconfig/node24 and @types/node@24.x

@tsconfig/node24 configures the compiler with "target": "es2024" and the corresponding es2024 lib entries, which means the TypeScript environment assumes Node 24 capabilities. Combined with @types/node@24.10.13 exposing 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, yet engines.node still 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.

google-labs-jules Bot and others added 2 commits February 21, 2026 20:59
- 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>
@yacosta738 yacosta738 closed this Feb 21, 2026
Copy link
Copy Markdown
Contributor

@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: 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 | 🟠 Major

Hard-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) will bail! on any install failure (network error, missing binary, auth issue, etc.). The ? propagates this through setup_memory()run_wizard() at step 7 of 9, discarding all inputs from the previous 6 steps. There is no loop in setup_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 in run_wizard() (line 147) and run_quick_setup() (line 380) still uses fallback_to_markdown: true. If the bootstrap passes (guaranteeing the plugin is installable), but the second install at line 147 unexpectedly fails, config.memory is silently overwritten with markdown defaults — discarding all surreal credentials collected by setup_surreal_memory_options() (line 2776) and resetting auto_save to the markdown profile default. Consider aligning the second install to also use false, or removing the preflight bootstrap install entirely and letting the single install in run_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: Deprecated clip property — prefer clip-path.

clip: rect() is deprecated in CSS and replaced by clip-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 -p on the command line, which can appear in /proc/*/cmdline on the runner. On GitHub-hosted runners the risk is minimal, but --password-stdin is 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.wasm is the Cargo-derived binary name (crate name with hyphens → underscores). If the crate name in Cargo.toml changes, this step will fail silently (the cp will 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) and catalog.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.

Comment on lines +122 to +123
- name: 🔐 Optional sign plugin bundle with cosign key
if: ${{ secrets.COSIGN_PRIVATE_KEY != '' }}
Copy link
Copy Markdown
Contributor

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

🌐 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>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

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.

Suggested change
<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>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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" and aria-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.

Suggested change
<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).

Comment on lines +9 to +11
- text: Back to Home
link: /
icon: right-arrow
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 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 f

Repository: 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.mdx

Repository: 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 -20

Repository: 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.mjs

Repository: 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 -10

Repository: 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 -20

Repository: 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 -50

Repository: 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.astro

Repository: 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 -20

Repository: 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 -50

Repository: 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.

Comment on lines 127 to +134
:::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.
:::
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
:::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 }}>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, let's explore the repository structure
find . -name "404.astro" -o -name "*StarlightPage*" | head -20

Repository: 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/null

Repository: 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 f

Repository: 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 -30

Repository: dallay/corvus

Length of output: 39


🏁 Script executed:

cat -n ./clients/web/apps/docs/src/pages/404.astro

Repository: 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 f

Repository: dallay/corvus

Length of output: 100


🏁 Script executed:

# Check the astro.config for Starlight setup
cat -n ./clients/web/apps/docs/astro.config.mjs

Repository: dallay/corvus

Length of output: 4557


🏁 Script executed:

cat -n ./clients/web/apps/docs/src/styles/custom.css

Repository: 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/docs

Repository: 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.

Comment on lines +140 to +165
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); }
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

Suggested change
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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

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.

@yacosta738 yacosta738 deleted the chore/dependency-updates-7615328780316186717 branch February 25, 2026 08:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dependency Dashboard

1 participant