ci: Add Makefile commands for web apps and fix documentation links#120
Conversation
…links - Add build, dev, check, clean, and format Makefile targets for chat, dashboard, and marketing apps - Add vite.config.js for chat and dashboard apps - Rename architecture.md to overview.md in en/es guides - Fix broken links in agent-runtime docs pointing to non-existent architecture.md - Add placeholder structure.md to resolve local file references - Update .lycheeignore to exclude local .md file references resolved at Astro build time - Fix broken doc links in hardware-peripherals-design.md (en/es)
Use canonicalPath instead of absolutePath to resolve /var -> /private/var symlink differences on macOS when comparing working directory paths.
|
Warning Rate limit exceeded
⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughRestructures Makefile and Gradle doc tasks toward a unified web apps workflow, adds Vite configs and deps for chat and dashboard apps, tightens a dashboard input component's prop typing, updates docs metadata/links and placeholders, adjusts a JVM test to use canonical paths, and adds a root dev dependency. Changes
Sequence Diagram(s)(Skipped) Estimated code review effort🎯 3 (Moderate) | ⏱️ ~35 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 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 |
✅ Contributor ReportUser: @yacosta738
Contributor Report evaluates based on public GitHub activity. Analysis period: 2025-03-02 to 2026-03-02 |
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (2)
clients/web/apps/docs/src/content/docs/guides/structure.md (1)
1-3: Consider adding front matter for consistency with other docs pages.This placeholder page will integrate more cleanly with docs tooling if it includes a
titlefront matter block.Suggested refactor
+--- +title: "Structure" +--- + # Structure > This is a placeholder for the `structure.md` file. Content will be added as needed.🤖 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/guides/structure.md` around lines 1 - 3, The page is missing YAML front matter which other docs pages include; add a front matter block at the top of structure.md containing at least a title (e.g. --- title: "Structure" ---) so the document integrates with the docs tooling; ensure the front matter is the first lines of the file and keep the existing placeholder content unchanged below it..lycheeignore (1)
47-49: Tightenfile://ignore scope to avoid hiding broken links.Line [48] currently ignores any
file://...md|mdxstring, which can mask malformed local-file references and reduce docs-link validation value.Suggested refinement
-^file://.*\.md(x)?$ +^file://[^?#\s]+\.mdx?(#[^\s]+)?$🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.lycheeignore around lines 47 - 49, The current .lycheeignore entry "^file://.*\.md(x)?$" is too permissive and can hide malformed file:// references; replace it with a stricter regex that only ignores well-formed absolute file URLs pointing to markdown files (e.g. use a pattern like "^file:///.*\.(md|mdx)(?:[?#].*)?$") so it only matches proper file:///<path>/*.md or .mdx with optional query/fragment; update the line containing "^file://.*\.md(x)?$" in .lycheeignore 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 `@clients/web/apps/dashboard/src/components/ui/input/Input.vue`:
- Around line 4-31: The Input component's InputType union includes
non-string-value types (e.g., "checkbox", "radio", "file") while defineProps
declares modelValue?: string, causing a type mismatch; update the InputType
union to only include input types that map to string values (or alternatively
add per-type handling and adjust modelValue to accept the appropriate types) by
editing the InputType definition and/or the defineProps signature so InputType
and modelValue are consistent (refer to the InputType union and defineProps
usage in this file and adjust the types or add conditional prop types/handlers
for "checkbox"/"radio"/"file" cases).
In `@clients/web/apps/docs/src/content/docs/en/clients/agent-runtime/index.mdx`:
- Line 11: The "Architecture" Markdown link currently points to a broken
relative target '../guides/structure.md'; update the link target for the
"Architecture" entry in clients/agent-runtime/index.mdx (replace the
'../guides/structure.md' string) so it points to the shared structure.md using
the correct relative path from this file (adjust the ../ segments or switch to
the canonical site-relative path for the shared guide).
In
`@clients/web/apps/docs/src/content/docs/en/guides/hardware-peripherals-design.md`:
- Around line 320-323: The document contains a duplicated related-doc link
"[Project Structure](./structure.md)" (appearing twice); remove the redundant
entry or replace the second occurrence with the intended link (e.g., the correct
related page title and path) so the related-links list only contains unique
entries; update the line where the second "[Project Structure](./structure.md)"
appears.
In `@clients/web/apps/docs/src/content/docs/es/clients/agent-runtime/index.mdx`:
- Line 11: Update the broken "Arquitectura" link by replacing the current target
"../guides/structure.md" (the link labeled "[Arquitectura]") with the shared
guide path (e.g., "/docs/guides/structure.md") so the link points to the central
guide location instead of a localized/non-existent relative path.
In
`@clients/web/apps/docs/src/content/docs/es/guides/hardware-peripherals-design.md`:
- Around line 319-321: The "Documentos Relacionados" list contains a duplicated
link to ./structure.md; remove one of the entries so only one
"[Estructura](./structure.md)" remains and keep the two distinct links "[Flujo
de Desarrollo](./development.md)" and "[Estructura del
Proyecto](./structure.md)" consolidated (rename or remove the redundant
"[Estructura]" or "[Estructura del Proyecto]" entry so there is a single link to
./structure.md) to avoid duplication in the related-docs list.
In `@clients/web/build.gradle.kts`:
- Around line 210-215: The docStarlight task currently runs the generic root
"build" via commandLine(pnpmShim, "run", "build"); instead, have docStarlight
delegate to the existing docsBuild task: remove or stop calling the root build
command and make docStarlight depend on or finalizedBy the already-defined
docsBuild task (use tasks.named("docsBuild")/dependsOn/docsBuild) so it reuses
the generated docs task graph; keep references to docStarlight, pnpmShim,
webRootDir and docsBuild when updating the task configuration.
---
Nitpick comments:
In @.lycheeignore:
- Around line 47-49: The current .lycheeignore entry "^file://.*\.md(x)?$" is
too permissive and can hide malformed file:// references; replace it with a
stricter regex that only ignores well-formed absolute file URLs pointing to
markdown files (e.g. use a pattern like "^file:///.*\.(md|mdx)(?:[?#].*)?$") so
it only matches proper file:///<path>/*.md or .mdx with optional query/fragment;
update the line containing "^file://.*\.md(x)?$" in .lycheeignore accordingly.
In `@clients/web/apps/docs/src/content/docs/guides/structure.md`:
- Around line 1-3: The page is missing YAML front matter which other docs pages
include; add a front matter block at the top of structure.md containing at least
a title (e.g. --- title: "Structure" ---) so the document integrates with the
docs tooling; ensure the front matter is the first lines of the file and keep
the existing placeholder content unchanged below it.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (2)
clients/web/pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml,!**/pnpm-lock.yamlpnpm-lock.yamlis excluded by!**/pnpm-lock.yaml,!**/pnpm-lock.yaml
📒 Files selected for processing (20)
.lycheeignoreMakefileclients/web/apps/chat/package.jsonclients/web/apps/chat/vite.config.jsclients/web/apps/dashboard/src/components/ui/input/Input.vueclients/web/apps/dashboard/vite.config.jsclients/web/apps/docs/src/content/docs/en/clients/agent-runtime/ci-map.mdclients/web/apps/docs/src/content/docs/en/clients/agent-runtime/index.mdxclients/web/apps/docs/src/content/docs/en/clients/agent-runtime/pr-workflow.mdclients/web/apps/docs/src/content/docs/en/guides/hardware-peripherals-design.mdclients/web/apps/docs/src/content/docs/en/guides/overview.mdclients/web/apps/docs/src/content/docs/es/clients/agent-runtime/ci-map.mdclients/web/apps/docs/src/content/docs/es/clients/agent-runtime/index.mdxclients/web/apps/docs/src/content/docs/es/clients/agent-runtime/pr-workflow.mdclients/web/apps/docs/src/content/docs/es/guides/hardware-peripherals-design.mdclients/web/apps/docs/src/content/docs/es/guides/overview.mdclients/web/apps/docs/src/content/docs/guides/structure.mdclients/web/build.gradle.ktsmodules/agent-core-kmp/src/jvmTest/kotlin/com/profiletailors/agent/core/RustCliBridgeTest.ktpackage.json
- Remove incompatible InputType values (checkbox, radio, file, hidden, submit, reset, button, image) from Input.vue that conflict with modelValue?: string - Fix broken relative links in agent-runtime/index.mdx (en + es): ../guides/structure.md -> ../../../guides/structure.md - Remove duplicate Related Documents entries in hardware-peripherals-design.md (en + es) - Refactor docStarlight Gradle task to delegate to docsBuild instead of running pnpm directly, properly wiring task graph - Ignore GitHub commits page URLs in lychee to prevent intermittent 502 Bad Gateway CI failures Refs: #120
Deploying corvus with
|
| Latest commit: |
53b5a6d
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://6ab7e3f5.corvus-42x.pages.dev |
| Branch Preview URL: | https://feature-web-apps-makefile.corvus-42x.pages.dev |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
clients/web/build.gradle.kts (1)
49-55: Both branches produce identical results.The conditional checks for
pnpm-lock.yamlexistence but both branches returnlistOf("install", "--no-frozen-lockfile"). If the intent was to enforce lockfile integrity when it exists, theifbranch should use--frozen-lockfile.♻️ Suggested fix
val installArgs = if (webRootDir.resolve("pnpm-lock.yaml").exists()) { - listOf("install", "--no-frozen-lockfile") + listOf("install", "--frozen-lockfile") } else { logger.lifecycle("⚠️ clients/web/pnpm-lock.yaml missing, using --no-frozen-lockfile") listOf("install", "--no-frozen-lockfile") }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@clients/web/build.gradle.kts` around lines 49 - 55, The conditional that sets installArgs currently returns identical lists; update it so when the lockfile exists (check using webRootDir.resolve("pnpm-lock.yaml").exists()) installArgs uses listOf("install", "--frozen-lockfile") to enforce lockfile integrity, and when it does not exist log the warning (logger.lifecycle(...)) and set installArgs to listOf("install", "--no-frozen-lockfile"); touch the installArgs declaration to reference the existing webRootDir and pnpm-lock.yaml check and keep the warning behavior in the else branch.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@clients/web/build.gradle.kts`:
- Around line 49-55: The conditional that sets installArgs currently returns
identical lists; update it so when the lockfile exists (check using
webRootDir.resolve("pnpm-lock.yaml").exists()) installArgs uses
listOf("install", "--frozen-lockfile") to enforce lockfile integrity, and when
it does not exist log the warning (logger.lifecycle(...)) and set installArgs to
listOf("install", "--no-frozen-lockfile"); touch the installArgs declaration to
reference the existing webRootDir and pnpm-lock.yaml check and keep the warning
behavior in the else branch.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (7)
.lycheeignoreclients/web/apps/dashboard/src/components/ui/input/Input.vueclients/web/apps/docs/src/content/docs/en/clients/agent-runtime/index.mdxclients/web/apps/docs/src/content/docs/en/guides/hardware-peripherals-design.mdclients/web/apps/docs/src/content/docs/es/clients/agent-runtime/index.mdxclients/web/apps/docs/src/content/docs/es/guides/hardware-peripherals-design.mdclients/web/build.gradle.kts
💤 Files with no reviewable changes (1)
- clients/web/apps/docs/src/content/docs/es/guides/hardware-peripherals-design.md
🚧 Files skipped from review as they are similar to previous changes (2)
- clients/web/apps/dashboard/src/components/ui/input/Input.vue
- .lycheeignore
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/build.gradle.kts (1)
49-55:⚠️ Potential issue | 🟠 MajorFail fast when
pnpm-lock.yamlis missing to preserve lockfile integrity.Line 53 currently allows
--no-frozen-lockfile, which reintroduces nondeterministic dependency resolution. If lockfile integrity is the goal, this should error instead of silently downgrading guarantees.🔧 Proposed fix
+import org.gradle.api.GradleException + val installArgs = if (webRootDir.resolve("pnpm-lock.yaml").exists()) { listOf("install", "--frozen-lockfile") } else { - logger.lifecycle("⚠️ clients/web/pnpm-lock.yaml missing, using --no-frozen-lockfile") - listOf("install", "--no-frozen-lockfile") + throw GradleException( + "clients/web/pnpm-lock.yaml is required for deterministic installs. " + + "Run pnpm install locally and commit the lockfile." + ) }As per coding guidelines, "Security: Check for vulnerabilities in encryption, crypto code, and configuration handling."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@clients/web/build.gradle.kts` around lines 49 - 55, The current installArgs fallback silently uses "--no-frozen-lockfile" when webRootDir.resolve("pnpm-lock.yaml").exists() is false; change the else branch to fail fast instead of downgrading guarantees by throwing a Gradle exception (e.g., throw GradleException or call error(...)) with a clear message that pnpm-lock.yaml is missing and that the build requires the lockfile to ensure deterministic installs; remove the logger.lifecycle and the "--no-frozen-lockfile" path so installArgs only contains the frozen-lockfile variant when the lockfile exists.
🤖 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/build.gradle.kts`:
- Around line 49-55: The current installArgs fallback silently uses
"--no-frozen-lockfile" when webRootDir.resolve("pnpm-lock.yaml").exists() is
false; change the else branch to fail fast instead of downgrading guarantees by
throwing a Gradle exception (e.g., throw GradleException or call error(...))
with a clear message that pnpm-lock.yaml is missing and that the build requires
the lockfile to ensure deterministic installs; remove the logger.lifecycle and
the "--no-frozen-lockfile" path so installArgs only contains the frozen-lockfile
variant when the lockfile exists.
ℹ️ Review info
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (1)
clients/web/build.gradle.kts
|


This pull request introduces significant improvements to the web apps build system, documentation structure, and dependency management. The Makefile now provides unified commands for building, checking, formatting, and serving all web apps (chat, dashboard, docs, marketing) using Gradle, replacing legacy naming and workflows. Documentation files have been reorganized for clarity and consistency, including updates to architecture references and the addition of new placeholder and workflow reference files. Dependency management is streamlined, and new packages are added for better frontend development.
Build System and Web Apps (Makefile, Gradle):
:web:tasks, replacing legacydocsnaming and direct pnpm calls. [1] [2] [3]Documentation Structure and Content:
overview.md, updated links to use newstructure.mdplaceholder, and clarified architecture diagram references in both English and Spanish docs. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12].lycheeignoreto support relative links to local markdown files and file protocol links for documentation checks.Dependency Management:
deps-updateMakefile target to list all declared dependency versions from the version catalog, improving clarity over just checking for updates.Frontend Improvements:
clsxandtailwind-mergedependencies toclients/web/apps/chat/package.jsonand updatedpnpm-lock.yamlaccordingly for better styling and class management. [1] [2] [3] [4]vite.config.jsfor both chat and dashboard apps to support Vue, path aliasing, and Vitest configuration.Component Type Safety:
InputTypeunion.Summary by CodeRabbit
New Features
Documentation
Chores