Skip to content

chore: adopt new features from web dependency upgrades#763

Merged
Aureliolo merged 4 commits intomainfrom
chore/evaluate-web-dep-upgrades
Mar 23, 2026
Merged

chore: adopt new features from web dependency upgrades#763
Aureliolo merged 4 commits intomainfrom
chore/evaluate-web-dep-upgrades

Conversation

@Aureliolo
Copy link
Copy Markdown
Owner

Summary

  • ESLint: Upgrade from flat/essential to flat/recommended (adds block-order, no-required-prop-with-default, attribute formatting, html-self-closing, and many more vue rules). Add 3 new ESLint 10 rules: no-unassigned-vars, no-useless-assignment, preserve-caught-error. Disable require-prop-types and one-component-per-file for test stubs.
  • Vite 8: Enable devtools (requires @vitejs/devtools) and server.forwardConsole for browser console log streaming to terminal.
  • Vitest 4: Add coverage.changed: 'origin/main' for dev workflow (coverage only on changed files). Add --detect-async-leaks to CI dashboard test command.
  • Code fixes found by new rules: Remove dead null assignment in useOptimisticUpdate.ts (no-useless-assignment). Preserve error cause chain in 3 re-throw sites in auth.ts (preserve-caught-error).
  • No action needed: ECharts 6 (charts explicitly style all properties), vue-echarts 8 (smart update is default), jsdom 29 (internal improvements).
  • Evaluated but skipped: vue-tsc strictVModel (PrimeVue's Nullable<T> typing makes it too noisy without real bug-finding value), vue-tsc strictSlotChildren (not a recognized option in vue-tsc 3.x).

Test plan

  • npm --prefix web run lint -- clean
  • npm --prefix web run type-check -- clean
  • npm --prefix web run test -- 773/773 pass
  • npm --prefix web run build -- succeeds
  • Pre-reviewed by 4 agents (docs-consistency, frontend-reviewer, infra-reviewer, issue-resolution-verifier), 2 findings fixed

Closes #391

🤖 Generated with Claude Code

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 23, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7b9339fd-cf85-4931-b83c-f454861e8ed7

📥 Commits

Reviewing files that changed from the base of the PR and between 4b0c44a and a3ec388.

📒 Files selected for processing (1)
  • web/vitest.config.ts
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Dashboard Test
  • GitHub Check: Build Backend
  • GitHub Check: Build Sandbox
  • GitHub Check: Analyze (go)
  • GitHub Check: Analyze (python)
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies: Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, CodeMirror 6 (vue-codemirror), js-yaml, Vitest, fast-check, ESLint, vue-tsc
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, ESLint, vue-tsc)
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Dependabot: daily updates (uv, github-actions, npm, pre-commit, docker, gomod), grouped minor/patch, no auto-merge. Use `/review-dep-pr` before merging.
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/**/*.vue : Use Vue 3 + PrimeVue + Tailwind CSS for the dashboard frontend; components organized by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.)
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to web/** : Web dashboard: Node.js 20+, dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, fast-check, ESLint, vue-tsc).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:20:09.993Z
Learning: Applies to web/src/components/** : Vue components organized by feature (agents/, approvals/, budget/, common/, dashboard/, layout/, messages/, org-chart/, tasks/).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/*.yml : Dependabot: daily updates for uv + github-actions + npm + pre-commit + docker + gomod, grouped minor/patch, no auto-merge. Use `/review-dep-pr` to review Dependabot PRs before merging.
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Dependency review: `dependency-review.yml` enforces license allow-list (permissive + weak-copyleft) with per-package GPL exemptions for dev-only tool deps (golangci-lint); PR comment summaries
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/__tests__/**/*.ts : Use fast-check for property-based testing in Vue: `fc.assert` and `fc.property` with `.fast-check/` outputs gitignored
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to docker/{Dockerfile*,compose.yml} : Docker: Backend uses 3-stage build (builder → setup → distroless runtime), Chainguard Python, non-root (UID 65532), CIS-hardened. Web uses nginxinc/nginx-unprivileged, Vue 3 SPA with PrimeVue + Tailwind CSS, SPA routing, API/WebSocket proxy to backend.
📚 Learning: 2026-03-20T08:28:32.845Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).

Applied to files:

  • web/vitest.config.ts
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/__tests__/**/*.ts : Use fast-check for property-based testing in Vue: `fc.assert` and `fc.property` with `.fast-check/` outputs gitignored

Applied to files:

  • web/vitest.config.ts
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Use `/pre-pr-review quick` for trivial/docs-only changes to skip agents but still run automated checks

Applied to files:

  • web/vitest.config.ts
🔇 Additional comments (1)
web/vitest.config.ts (1)

17-17: Good CI/local coverage split.

Line 17 correctly scopes changed-file coverage to non-CI runs, so CI still reports full project coverage.


Walkthrough

This PR applies tooling/config updates and widespread Vue template formatting. CI: adds --detect-async-leaks to the dashboard test step. Web tooling: adds @vitejs/devtools devDependency; Vite config now uses a mode callback, enables devtools for non-production and server.forwardConsole: true; Vitest coverage sets changed: 'origin/main' when not in CI. ESLint preset moved to flat/recommended and additional error-level rules enabled. Code changes include template reformatting, PrimeVue input-id normalization, optimistic-update rollback handling and error-message augmentation, auth error rethrows with cause, a test update, and a local retry helper.

Suggested labels

autorelease: tagged

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title 'chore: adopt new features from web dependency upgrades' clearly and concisely summarizes the main objective of the PR, which is to adopt new features from web dependency upgrades.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, detailing ESLint upgrades, Vite 8 features, Vitest 4 changes, code fixes, and test results.
Linked Issues check ✅ Passed The PR successfully addresses the primary requirements from issue #391: ESLint upgrade to flat/recommended with new rules, Vite 8 devtools and console forwarding, Vitest 4 coverage.changed and async-leak detection, error cause preservation in auth.ts, and comprehensive testing.
Out of Scope Changes check ✅ Passed All changes are directly aligned with the dependency upgrade objectives. Template formatting adjustments (multi-line attributes) are stylistic consequences of the new ESLint rules and do not introduce out-of-scope functionality.
Docstring Coverage ✅ Passed Docstring coverage is 40.00% which is sufficient. The required threshold is 40.00%.

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


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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 23, 2026

Dependency Review

The following issues were found:

  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ✅ 0 package(s) with unknown licenses.
  • ⚠️ 13 packages with OpenSSF Scorecard issues.

View full job summary

@socket-security
Copy link
Copy Markdown

socket-security bot commented Mar 23, 2026

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Addednpm/​@​vitejs/​devtools@​0.1.5811007699100

View full report

@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on adopting new features from web dependency upgrades, including ESLint, Vite, and Vitest. It incorporates new ESLint rules, enhances debugging capabilities with Vite, and improves test coverage and leak detection with Vitest. Additionally, it addresses code issues identified by the new ESLint rules, ensuring code quality and stability.

Highlights

  • ESLint: Upgraded ESLint from flat/essential to flat/recommended, adding new rules and disabling some for test stubs.
  • Vite 8: Enabled devtools and server.forwardConsole for enhanced debugging and console log streaming.
  • Vitest 4: Added coverage.changed: 'origin/main' for dev workflow and --detect-async-leaks to CI test command.
  • Code Fixes: Implemented code fixes based on new ESLint rules, including removing a dead null assignment and preserving error cause chains.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@web/src/views/TaskBoardPage.vue`:
- Around line 185-188: The retry handler passed to the ErrorBoundary currently
calls taskStore.fetchTasks(filters) and agentStore.fetchAgents() without
awaiting or handling errors; change the handler to an async function that awaits
both calls (e.g., await Promise.all([...]) or sequential awaits) and wrap them
in try/catch to handle and surface errors (log or rethrow) so unhandled promise
rejections are avoided; update the inline handler for the ErrorBoundary `@retry`
to reference the async function and ensure it returns/propagates any error as
needed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d71b3562-ae56-4dd6-b80c-b00368b0c8f0

📥 Commits

Reviewing files that changed from the base of the PR and between de4e661 and 3da4860.

⛔ Files ignored due to path filters (1)
  • web/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (80)
  • .github/workflows/ci.yml
  • CLAUDE.md
  • web/eslint.config.js
  • web/package.json
  • web/src/components/agents/AgentCard.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/common/AdvancedBanner.vue
  • web/src/components/common/AdvancedWarningDialog.vue
  • web/src/components/common/ChipArrayInput.vue
  • web/src/components/common/ConnectionLostBanner.vue
  • web/src/components/common/EmptyState.vue
  • web/src/components/common/ErrorBoundary.vue
  • web/src/components/common/FloatingSaveButton.vue
  • web/src/components/common/LoadingSkeleton.vue
  • web/src/components/common/NameLocaleSelector.vue
  • web/src/components/common/PageHeader.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/dashboard/SpendingSummary.vue
  • web/src/components/dashboard/SystemStatus.vue
  • web/src/components/layout/AppShell.vue
  • web/src/components/layout/ConnectionStatus.vue
  • web/src/components/layout/Sidebar.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/messages/MessageItem.vue
  • web/src/components/messages/MessageList.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/components/providers/ProviderTestButton.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/settings/SettingGroupRenderer.vue
  • web/src/components/settings/SettingRestartBadge.vue
  • web/src/components/settings/SettingSourceBadge.vue
  • web/src/components/settings/SettingsCodeView.vue
  • web/src/components/settings/SettingsNameLocales.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/setup/SetupComplete.vue
  • web/src/components/setup/SetupNameLocale.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/setup/SetupWelcome.vue
  • web/src/components/tasks/KanbanColumn.vue
  • web/src/components/tasks/TaskCard.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/components/tasks/TaskFilters.vue
  • web/src/components/tasks/TaskListView.vue
  • web/src/composables/useOptimisticUpdate.ts
  • web/src/stores/auth.ts
  • web/src/views/AgentDetailPage.vue
  • web/src/views/AgentProfilesPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/ArtifactBrowserPage.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/views/CompanyPage.vue
  • web/src/views/DashboardPage.vue
  • web/src/views/LoginPage.vue
  • web/src/views/MeetingLogsPage.vue
  • web/src/views/MessageFeedPage.vue
  • web/src/views/OrgChartPage.vue
  • web/src/views/ProvidersPage.vue
  • web/src/views/SettingsPage.vue
  • web/src/views/SetupPage.vue
  • web/src/views/TaskBoardPage.vue
  • web/vite.config.ts
  • web/vitest.config.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Dashboard Build
  • GitHub Check: Build Sandbox
  • GitHub Check: Build Backend
  • GitHub Check: Build Web
  • GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (1)
web/src/components/**/*.vue

📄 CodeRabbit inference engine (CLAUDE.md)

Vue components: organize by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.).

Files:

  • web/src/components/common/AdvancedWarningDialog.vue
  • web/src/components/messages/MessageList.vue
  • web/src/components/common/ChipArrayInput.vue
  • web/src/components/common/FloatingSaveButton.vue
  • web/src/components/settings/SettingsNameLocales.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/common/AdvancedBanner.vue
  • web/src/components/common/ConnectionLostBanner.vue
  • web/src/components/layout/AppShell.vue
  • web/src/components/settings/SettingSourceBadge.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/components/setup/SetupWelcome.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/settings/SettingRestartBadge.vue
  • web/src/components/settings/SettingsCodeView.vue
  • web/src/components/dashboard/SpendingSummary.vue
  • web/src/components/common/ErrorBoundary.vue
  • web/src/components/agents/AgentCard.vue
  • web/src/components/layout/ConnectionStatus.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/components/layout/Sidebar.vue
  • web/src/components/setup/SetupComplete.vue
  • web/src/components/common/EmptyState.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/common/LoadingSkeleton.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/messages/MessageItem.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/tasks/TaskFilters.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/common/PageHeader.vue
  • web/src/components/setup/SetupNameLocale.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/dashboard/SystemStatus.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/components/providers/ProviderTestButton.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/tasks/KanbanColumn.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/common/NameLocaleSelector.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/components/settings/SettingGroupRenderer.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/tasks/TaskCard.vue
  • web/src/components/tasks/TaskListView.vue
🧠 Learnings (19)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, ESLint, vue-tsc)
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to web/** : Web dashboard: Node.js 20+, dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, fast-check, ESLint, vue-tsc).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:20:09.993Z
Learning: Applies to web/src/components/** : Vue components organized by feature (agents/, approvals/, budget/, common/, dashboard/, layout/, messages/, org-chart/, tasks/).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/*.yml : Dependabot: daily updates for uv + github-actions + npm + pre-commit + docker + gomod, grouped minor/patch, no auto-merge. Use `/review-dep-pr` to review Dependabot PRs before merging.
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to .github/workflows/**/*.yml : Path filtering: dorny/paths-filter detects Python/dashboard/docker changes; jobs only run when their domain is affected. CLI has its own workflow (cli.yml).

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/cli.yml : CLI workflow: Go lint (golangci-lint + go vet) + test (-race -coverprofile) + build (cross-compile: linux/darwin/windows × amd64/arm64) + govulncheck + fuzz testing (main-only, 30s/target, continue-on-error, matrix over 4 packages). cli-pass gate includes fuzz as informational. GoReleaser release on v* tags. Cosign keyless signing of checksums.txt. SLSA L3 provenance attestations. Sigstore bundle (.sigstore.json) attached. Post-release appends checksums/verification/provenance to draft release notes.

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/*.yml : Dependabot: daily updates for uv + github-actions + npm + pre-commit + docker + gomod, grouped minor/patch, no auto-merge. Use `/review-dep-pr` to review Dependabot PRs before merging.

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-14T15:43:05.601Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, ESLint, vue-tsc)

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
  • web/package.json
  • web/src/views/LoginPage.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/eslint.config.js
  • web/src/views/DashboardPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/vite.config.ts
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to web/** : Web dashboard: Node.js 20+, dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, fast-check, ESLint, vue-tsc).

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
  • web/package.json
  • web/src/views/LoginPage.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/eslint.config.js
  • web/src/views/DashboardPage.vue
  • web/vite.config.ts
📚 Learning: 2026-03-20T08:28:32.845Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).

Applied to files:

  • .github/workflows/ci.yml
  • web/vitest.config.ts
  • web/eslint.config.js
  • web/vite.config.ts
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/docker.yml : Docker workflow: builds backend + web + sandbox images, pushes to GHCR, signs with cosign. SLSA L3 provenance attestations via actions/attest-build-provenance. Scans: Trivy (CRITICAL = hard fail, HIGH = warn) + Grype (critical cutoff) + CIS Docker Benchmark v1.6.0 compliance (informational). CVE triage via .github/.trivyignore.yaml and .github/.grype.yaml. Images only pushed after scans pass. Triggers on push to main and version tags (v*).

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to docker/{Dockerfile*,compose.yml} : Docker: Backend uses 3-stage build (builder → setup → distroless runtime), Chainguard Python, non-root (UID 65532), CIS-hardened. Web uses nginxinc/nginx-unprivileged, Vue 3 SPA with PrimeVue + Tailwind CSS, SPA routing, API/WebSocket proxy to backend.

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to pyproject.toml : Dependencies: all versions use == in pyproject.toml. Groups: test (pytest + plugins, hypothesis), dev (includes test + ruff, mypy, pre-commit, commitizen, pip-audit). Required: mem0ai (Mem0 memory backend — the default and currently only backend). Install: uv sync installs everything (dev group is default).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to go.mod : Maintain Go 1.26+ requirement. Dependencies: Cobra (CLI framework), charmbracelet/huh and charmbracelet/lipgloss (UI), sigstore-go (code signing), go-containerregistry (container image verification), go-tuf (TUF client for Sigstore).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to cli/** : CLI: Go 1.26+, dependencies in cli/go.mod (Cobra, charmbracelet/huh).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/go.mod : Go CLI dependencies: Go 1.26+, Cobra (commands), charmbracelet/huh (interactive CLI), charmbracelet/lipgloss (styled output).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:33:01.580Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:33:01.580Z
Learning: Applies to docker/Dockerfile.web : `nginxinc/nginx-unprivileged` base with non-root user (UID 101), Vue 3 SPA (PrimeVue + Tailwind CSS), SPA routing, API/WebSocket proxy to backend

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T21:20:09.993Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:20:09.993Z
Learning: Applies to web/src/components/** : Vue components organized by feature (agents/, approvals/, budget/, common/, dashboard/, layout/, messages/, org-chart/, tasks/).

Applied to files:

  • web/src/views/AgentDetailPage.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/agents/AgentCard.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/views/ArtifactBrowserPage.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/eslint.config.js
  • web/src/views/AgentProfilesPage.vue
  • web/src/views/TaskBoardPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/views/CompanyPage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/views/OrgChartPage.vue
  • web/src/views/DashboardPage.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/tasks/TaskListView.vue
📚 Learning: 2026-03-22T19:37:56.694Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-22T19:37:56.694Z
Learning: Applies to web/src/components/**/*.vue : Vue components: organize by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.).

Applied to files:

  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/eslint.config.js
  • web/src/views/AgentProfilesPage.vue
  • web/src/views/TaskBoardPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/CompanyPage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/views/OrgChartPage.vue
  • web/src/components/setup/SetupAdmin.vue
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to src/synthorg/**/*.py : Package structure: src/synthorg/ organized as: api/ (REST+WebSocket, Litestar), auth/ (auth subpackage), backup/ (scheduled/manual backups), budget/ (cost tracking, CFO), cli/ (superseded by Go CLI), communication/ (message bus, meetings), config/ (YAML loading), core/ (domain models, resilience config), engine/ (orchestration, task state, coordination, approval gates, stagnation detection, context budget, compaction), hr/ (hiring, performance, promotion), memory/ (pluggable backend, Mem0, retrieval, consolidation), persistence/ (operational data, SQLite, settings), observability/ (logging, correlation, sinks), providers/ (LLM abstraction, LiteLLM, auth types, presets, runtime CRUD), settings/ (runtime-editable, typed definitions, encryption, config bridge), security/ (SecOps, rule engine, output scanning, progressive trust, autonomy levels), templates/ (company templates, personalities), tools/ (registry, built-in tools, git, sandbox, code_runner, MCP...

Applied to files:

  • web/src/components/setup/SetupWelcome.vue
📚 Learning: 2026-03-19T11:33:01.580Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:33:01.580Z
Learning: Applies to web/**/*.vue : Never use real vendor names (Anthropic, OpenAI, Claude, GPT, etc.) in dashboard code — use generic names: `example-provider`, `example-large-001`, etc.

Applied to files:

  • web/src/components/providers/ProviderCard.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/views/ProvidersPage.vue
📚 Learning: 2026-03-20T08:28:32.845Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to src/synthorg/providers/**/*.py : Providers: LLM provider abstraction (LiteLLM adapter), auth types (api_key/oauth/custom_header/none), presets (PROVIDER_PRESETS), runtime CRUD (ProviderManagementService with asyncio.Lock serialization), hot-reload via AppState swap.

Applied to files:

  • web/src/components/setup/SetupProvider.vue
🧬 Code graph analysis (1)
web/src/stores/auth.ts (1)
web/src/utils/errors.ts (1)
  • getErrorMessage (17-69)
🔇 Additional comments (77)
web/src/components/common/FloatingSaveButton.vue (1)

23-26: Formatting-only template change looks good.

This multiline attribute layout preserves behavior and improves readability with no functional impact.

web/src/components/layout/ConnectionStatus.vue (1)

38-42: Formatting-only change looks good.

Line 38–42 preserves semantics and accessibility (role="status", aria-live="polite") while aligning template attribute formatting.

web/src/components/common/EmptyState.vue (1)

16-28: Template-only reformat is clean and behavior-preserving.

No functional change detected here; conditionals, bindings, and slot rendering remain intact.

web/src/components/setup/SetupCompany.vue (1)

91-93: Formatting-only changes look good.

These updates are purely template layout/readability refactors and do not alter behavior.

As per coding guidelines, Vue components should be organized by feature directories, and this file remains correctly placed under web/src/components/setup/.

Also applies to: 142-145, 147-150, 160-163, 178-184, 196-201, 217-222

web/src/components/layout/Topbar.vue (1)

69-73: Template reformat looks safe and consistent.

Menu bindings are unchanged (ref, model, popup), so this is a non-functional formatting update.

web/src/components/common/NameLocaleSelector.vue (1)

118-125: LGTM! Formatting changes align with new ESLint rules.

The multi-line attribute formatting and the <input> closing tag style change (from self-closing /> to explicit >) are consistent with the adopted vue/html-self-closing and attribute formatting rules mentioned in the PR objectives. No functional changes.

Also applies to: 155-158, 195-195

web/src/components/settings/SettingsNameLocales.vue (1)

71-73: LGTM!

Whitespace-only reformatting of the heading element for consistency with the new ESLint attribute formatting rules. No functional impact.

web/src/components/common/ConnectionLostBanner.vue (1)

18-21: LGTM! Formatting change aligns with Vue ESLint attribute formatting rules.

The multi-line formatting of the icon element is consistent with the Vue ESLint attribute formatting rules adopted in this PR and matches the formatting style used elsewhere in the template (e.g., the Button component). The change preserves all attributes and functionality while improving consistency across the codebase.

web/src/components/tasks/TaskFilters.vue (1)

45-51: LGTM! Formatting improves consistency.

The multi-line attribute layout for the Reset button now matches the Dropdown components above, creating visual consistency within the template. All props and the event handler are preserved correctly.

web/src/components/company/CompanyGeneralForm.vue (2)

30-32: LGTM: Formatting improvement.

The multi-line <p> formatting improves readability and aligns with the ESLint vue/attribute formatting rules adopted in this PR.


34-37: LGTM: Consistent multi-line formatting.

The multi-line attribute layout improves readability and aligns with the ESLint vue/attribute formatting rules adopted across components in this PR.

web/src/composables/useOptimisticUpdate.ts (1)

31-33: Good cleanup of rollback typing and initialization.

This keeps the control flow precise and removes the unnecessary nullable/default assignment without changing behavior.

web/src/components/budget/AgentSpendingTable.vue (1)

47-84: LGTM! Template formatting improved.

The multi-line attribute layout enhances readability and aligns with Vue style guide recommendations. The reformatting makes each prop clearly visible and improves git diff clarity without changing any functional behavior.

web/src/components/setup/SetupWelcome.vue (1)

17-19: LGTM!

Clean multi-line formatting for the heading element, consistent with the PR's ESLint/Vue formatting rule adoption.

web/src/components/setup/SetupNameLocale.vue (1)

58-60: LGTM!

Formatting change consistent with the PR's template line-wrapping updates across setup components.

web/src/components/setup/SetupComplete.vue (1)

21-23: LGTM!

Consistent heading formatting with other setup components in this PR.

web/src/components/agents/AgentCard.vue (1)

26-31: LGTM!

Template formatting updated for agent name and role elements, consistent with the PR's vue attribute formatting rule adoption.

web/src/views/LoginPage.vue (1)

58-75: LGTM!

Template formatting updates including multi-line attribute layouts and normalizing PrimeVue Password prop to kebab-case (input-id). Vue automatically converts kebab-case to camelCase for props, so this is a style consistency improvement aligned with Vue style guide recommendations.

Also applies to: 86-92, 104-109

web/src/components/setup/SetupProvider.vue (1)

236-238: LGTM!

Extensive template formatting updates throughout this complex component, including multi-line heading, labels, form attributes, and the loading indicator block. The inputIdinput-id normalization for the Password component is consistent with other files in this PR. All provider setup logic (preset selection, URL probing, model discovery) remains unchanged.

Also applies to: 253-255, 315-317, 336-344, 354-357, 365-374, 388-394

web/src/components/setup/SetupReviewOrg.vue (1)

218-220: LGTM!

Template formatting updates for the heading, agent list container, empty state, and add-agent form section. All agent review/editing logic (name editing, model selection, randomization) remains intact.

Also applies to: 236-239, 290-293, 300-306

web/src/components/setup/SetupAdmin.vue (1)

61-63: LGTM!

Template formatting updates throughout the admin setup component, including both the completed-state and form-state headings, form attributes, labels, and Password component props. The inputIdinput-id normalization is applied consistently to both password fields, matching the pattern across all setup and auth components in this PR.

Also applies to: 96-112, 124-127, 130-130, 143-151

web/src/components/common/ChipArrayInput.vue (3)

51-54: LGTM! Formatting improves readability.

The multi-line attribute layout improves code readability while maintaining the same conditional rendering logic and styling.


69-72: LGTM! Accessibility properly maintained.

The formatting change maintains the correct accessibility pattern: the icon is hidden from screen readers while the parent button element at lines 62-68 has the appropriate aria-label.


78-81: LGTM! Consistent formatting pattern.

The multi-line attribute layout matches the formatting pattern applied throughout this component and aligns with the ESLint rule adoption mentioned in the PR objectives.

web/src/components/settings/SettingSourceBadge.vue (1)

25-28: LGTM: Formatting improvement

The multi-line attribute layout improves readability. No functional changes to the Tag component bindings or behavior.

web/src/components/settings/SettingRestartBadge.vue (1)

6-9: LGTM: Formatting improvement

Multi-line prop layout improves consistency. No functional changes.

web/src/components/common/ErrorBoundary.vue (1)

20-31: LGTM: Formatting improvement

The multi-line template structure improves readability while preserving all conditional logic, accessibility attributes, and event handling.

web/src/components/dashboard/MetricCard.vue (1)

15-37: LGTM: Formatting improvement

Multi-line formatting enhances readability. All bindings, conditional rendering (v-if="subtitle"), and class expressions are preserved correctly.

web/src/components/budget/SpendingChart.vue (1)

65-68: LGTM: Formatting improvement

Multi-line formatting for the empty state improves consistency. No changes to the v-else logic or chart behavior.

web/src/components/tasks/TaskCard.vue (1)

25-31: LGTM: Formatting improvement

Multi-line prop layout improves readability. All bindings and the StatusBadge component configuration remain unchanged.

web/src/components/tasks/KanbanColumn.vue (1)

44-47: LGTM: Formatting improvement

Multi-line component invocation improves readability. The TaskCard props and click handler are preserved correctly within the VueDraggable slot.

web/src/components/common/AdvancedBanner.vue (1)

14-17: LGTM: Formatting improvement

Multi-line formatting improves consistency. The PrimeIcons class and accessibility attribute are preserved correctly.

web/src/components/approvals/ApprovalCard.vue (1)

25-27: Formatting-only update looks good.

These changes preserve behavior and only improve template readability; no functional concerns in this segment.

Also applies to: 29-32, 36-38

web/src/components/tasks/TaskDetailPanel.vue (1)

84-89: Template reflow is safe and consistent.

All touched lines are presentational formatting changes; bindings, conditions, events, and emit payloads remain intact.

Also applies to: 94-97, 100-105, 116-119, 121-155, 158-170, 177-205, 208-253, 259-261, 285-314

web/src/components/common/LoadingSkeleton.vue (1)

11-16: LGTM — no behavioral change in this update.

The Skeleton loop and props are unchanged; this is a clean readability-only reformat.

web/src/components/providers/ProviderTestButton.vue (1)

71-76: Good template-only cleanup.

The success/failure status rendering semantics remain unchanged, and the reflow is safe.

Also applies to: 79-85

web/src/views/SetupPage.vue (1)

180-183: Looks good — formatting-only changes.

Touched segments keep the same conditions, keys, and rendered content.

Also applies to: 185-187, 200-203, 205-207, 232-235

web/src/components/tasks/TaskListView.vue (1)

34-45: Safe DataTable template reformat.

No API/configuration changes in the touched Column definitions; behavior remains the same.

Also applies to: 50-55, 57-60, 63-67, 72-77, 78-83

web/src/components/company/CompanyDepartmentCard.vue (1)

21-35: LGTM — no functional delta in changed blocks.

The conditional content and Tag binding behavior are preserved exactly.

Also applies to: 70-74

web/src/components/common/PageHeader.vue (1)

10-12: Clean readability update; behavior unchanged.

Props/slot conditions are preserved and this segment is safe to merge.

Also applies to: 13-18, 19-22

web/src/views/ArtifactBrowserPage.vue (1)

9-12: Formatting-only change is clean and behavior-preserving.

PageHeader reflow keeps identical props and output, with no logic changes.

web/src/views/MessageFeedPage.vue (1)

46-49: Template reflow is consistent and safe.

The multiline formatting preserves the same conditions, bindings, and retry behavior.

Also applies to: 59-66, 73-76

web/src/components/providers/ProviderCard.vue (1)

48-50: Looks good — formatting-only update with preserved behavior.

Tag rendering and base URL conditional display remain unchanged functionally.

Also applies to: 52-61, 67-71

web/src/components/budget/BudgetConfigDisplay.vue (1)

11-14: Clean template normalization with no logic impact.

All displayed budget fields and bindings are preserved exactly.

Also applies to: 16-21, 24-29, 32-37, 40-45, 48-53

web/src/views/BudgetPanelPage.vue (1)

39-42: No concerns — style-only refactor is consistent.

The updated markup keeps the same loading/error flow and section rendering.

Also applies to: 44-51, 57-59, 64-66

web/src/components/company/CompanyAgentCard.vue (1)

34-39: Formatting update is safe and readable.

Agent labels and tag severities remain functionally identical.

Also applies to: 64-76

web/src/components/dashboard/SystemStatus.vue (1)

13-15: LGTM — purely presentational reformatting.

System status conditions and displayed health values are unchanged.

Also applies to: 92-95, 101-104

web/src/components/agents/AgentMetrics.vue (1)

15-20: Good cleanup — behavior remains intact.

Template restructuring keeps the same bindings, conditionals, and rendered tool list behavior.

Also applies to: 23-28, 31-36, 39-44, 47-52, 55-60, 66-68, 71-76, 79-84, 87-92, 95-100, 107-119

web/src/components/settings/SettingField.vue (1)

155-159: Formatting-only update preserves behavior.

The multi-line template reflow keeps the same conditions, bindings, roles, and classes; no functional concerns in these changed segments.

Also applies to: 163-175, 271-275

web/src/components/settings/SettingsCodeView.vue (1)

133-137: LGTM — template reformat only.

The changed blocks retain identical rendering logic and accessibility attributes.

Also applies to: 149-152

web/src/components/providers/ProviderFormDialog.vue (1)

215-218: No functional delta in reformatted form controls/footer.

All prop names, models, and click handlers are preserved after reflow.

Also applies to: 231-240, 245-254, 259-262, 275-284, 289-303, 309-318, 321-329, 332-343, 346-355, 362-371, 374-385, 392-402

web/src/components/approvals/ApprovalDetail.vue (1)

14-19: Looks good — presentation-only reformatting.

The updated template keeps the same conditional rendering and displayed data.

Also applies to: 24-26, 30-36, 39-44, 47-52, 55-60, 63-68, 71-76, 79-84, 88-97, 100-111

web/src/components/dashboard/RecentApprovals.vue (1)

15-21: LGTM.

Changed segments are formatting-only and preserve existing list/render behavior.

Also applies to: 25-34, 41-46, 49-52

web/src/components/dashboard/ActiveTasksSummary.vue (1)

15-21: No issues in changed ranges.

Template formatting updates retain the same conditions, bindings, and output.

Also applies to: 25-34, 41-46

web/src/views/CompanyPage.vue (1)

280-425: Template restructuring is behavior-preserving.

The updated view keeps identical control flow and component wiring in the changed block.

web/src/components/company/CompanyDepartmentFormDialog.vue (1)

140-143: Approved — clean formatting-only changes.

All bindings and validation/error rendering behavior are preserved.

Also applies to: 155-158, 171-174, 186-189, 209-213, 222-226, 235-239, 245-249

web/src/components/company/CompanyAgentFormDialog.vue (1)

145-278: Template-only refactor is behavior-preserving.

The multiline label/editor/select formatting keeps the same bindings, conditions, and accessibility hooks; no functional regression found.

web/src/components/settings/SettingGroupRenderer.vue (1)

83-130: Markup reflow looks safe.

Reformatted blocks keep the same v-if/v-else, v-for, and key usage, with no behavior changes.

web/src/components/tasks/TaskCreateDialog.vue (1)

101-240: Form/template formatting update is clean.

All control bindings, submit wiring, and disabled-state logic remain intact after multiline formatting.

web/src/views/SettingsPage.vue (1)

193-399: Settings page template reflow is safe.

The refactor preserves all conditions, event handlers, and tab/rendering behavior while improving readability.

web/src/views/MeetingLogsPage.vue (1)

116-368: No functional concerns in this template cleanup.

Column/body templates, sidebar conditions, and dialog actions remain equivalent after the multiline formatting updates.

.github/workflows/ci.yml (1)

258-258: Good CI hardening change.

Adding async-leak detection to dashboard tests is a useful reliability guard with minimal workflow surface impact.

CLAUDE.md (1)

254-254: Documentation update is aligned with the tooling change.

The dependency list now reflects the devtools adoption accurately.

web/src/views/AgentDetailPage.vue (1)

61-73: Template formatting change is safe.

Error/loading/content branches and retry behavior are preserved exactly.

web/src/views/ApprovalQueuePage.vue (1)

102-214: LGTM!

The template reformatting to multi-line attribute layouts is consistent and improves readability. This aligns with the PR's adoption of Vue ESLint rules (vue/block-order, vue/html-self-closing, attribute formatting). No functional changes were made.

web/src/views/DashboardPage.vue (1)

78-86: LGTM!

Consistent multi-line attribute formatting applied to PageHeader, LoadingSkeleton, and SystemStatus. No functional changes—formatting only.

Also applies to: 126-129

web/src/stores/auth.ts (2)

105-108: LGTM!

Preserving the original error via { cause: fetchErr } maintains the error chain for debugging while providing user-friendly messages. This correctly implements the ESLint 10 preserve-caught-error rule guidance.


167-169: LGTM!

The error re-throw in changePassword now preserves the original error as cause, enabling proper error chain debugging while surfacing a user-friendly message via getErrorMessage(err).

web/src/views/OrgChartPage.vue (1)

152-164: LGTM!

Consistent multi-line attribute formatting applied to PageHeader, ErrorBoundary, LoadingSkeleton, and the VueFlow container wrapper. No functional changes—formatting only.

Also applies to: 180-183

web/src/views/AgentProfilesPage.vue (1)

37-49: LGTM!

Consistent multi-line attribute formatting applied to PageHeader, ErrorBoundary, LoadingSkeleton, and the grid wrapper. No functional changes—formatting only.

Also applies to: 56-59

web/vite.config.ts (2)

16-16: server.forwardConsole: true is a valid Vite 8 server option.

This setting forwards browser runtime events (unhandled errors and console output) to the Vite terminal during development. The default is auto, but explicitly setting it to true ensures the behavior is enabled. When you need finer control, you can also use an object form with unhandledErrors and logLevels properties.


8-8: Fix devtools configuration syntax for Vite 8.

The devtools: true syntax is incorrect. For Vite 8, use devtools: { enabled: true } and ensure the @vitejs/devtools package is installed (pnpm add -D @vitejs/devtools``). Note that DevTools currently only works in build mode, not development mode.

web/vitest.config.ts (1)

17-17: The coverage.changed option syntax is correct for Vitest 4.

The configuration changed: 'origin/main' under test.coverage is valid. This option limits coverage collection to files changed since the specified git ref, and accepts both boolean values (for staged/unstaged changes) and strings for specific commit/branch references. The syntax and placement are correct.

web/package.json (1)

41-41: The @vitejs/devtools package at version ^0.1.5 is current (latest as of March 2026) and explicitly requires Vite 8 or higher, making it fully compatible with the project's Vite setup.

web/eslint.config.js (1)

9-10: Solid ESLint upgrade configuration.

The preset migration, ESLint 10 rule adoption, and test-scoped Vue rule overrides are clean and well-targeted for this PR’s goals.

Also applies to: 27-30, 45-52

web/src/views/TaskBoardPage.vue (1)

142-145: Template formatting changes look good.

These edits are purely structural/readability improvements with no behavior drift.

Also applies to: 154-158

web/src/views/ProvidersPage.vue (1)

253-335: LGTM — formatting-only cleanup is safe.

The template restructuring keeps the same render conditions, bindings, and handlers while improving readability.

Based on learnings: Never use real vendor names in dashboard Vue files; generic provider wording remains compliant.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request upgrades several web dependencies, including ESLint, Vite, and Vitest. It adopts new features from these upgrades, such as stricter linting rules, which resulted in widespread formatting changes and code quality fixes. Configuration for Vite and Vitest has been updated to enable new development and testing features. The changes align with the pull request's description and no issues were found during the review.

Aureliolo and others added 3 commits March 23, 2026 07:17
Evaluate and adopt DX improvements from major npm dependency upgrades
(PR #389): ECharts 6, vue-echarts 8, Vite 8, Vitest 4, ESLint 10,
eslint-plugin-vue 10, vue-tsc 3, jsdom 29.

Config changes:
- ESLint: upgrade from flat/essential to flat/recommended (adds
  block-order, no-required-prop-with-default, attribute formatting,
  html-self-closing, and many more vue rules). Add 3 new ESLint 10
  rules: no-unassigned-vars, no-useless-assignment, preserve-caught-error.
  Disable require-prop-types and one-component-per-file for test stubs.
- vue-tsc: enable strictSlotChildren in vueCompilerOptions. Skip
  strictVModel (PrimeVue's Nullable<T> typing makes it too noisy).
- Vite: enable devtools (requires @vitejs/devtools) and
  server.forwardConsole for browser console log streaming.
- Vitest: add coverage.changed targeting origin/main for dev workflow.
- CI: add --detect-async-leaks to dashboard test command.

Code fixes found by new rules:
- useOptimisticUpdate: remove dead null assignment to rollback variable
- auth store: preserve error cause chain in 3 re-throw sites

No action needed for ECharts 6 (charts explicitly style all properties),
vue-echarts 8 (smart update is default), jsdom 29 (internal improvements).

Closes #391

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Pre-reviewed by 4 agents, 2 findings addressed:
- Remove vueCompilerOptions.strictSlotChildren from tsconfig.json
  (not a recognized vue-tsc 3.x option -- dead config with no effect)
- Add @vitejs/devtools to CLAUDE.md web dashboard dependency list

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix unhandled promise rejections in TaskBoardPage retry handler
- Mode-guard devtools in vite.config.ts (disabled in production builds)
- Upgrade vue/no-v-html from warn to error (zero current usages)
- Add session-expiry warning log in auth.ts fetchUser 401 path
- Surface rollback failure context in useOptimisticUpdate error message
- Update CLAUDE.md deps list (add vue-echarts, vue-router, eslint-plugin-security, @vitest/coverage-v8)
- Update CLAUDE.md CI section (mention --detect-async-leaks)
- Update CLAUDE.md commands (document devtools, console forwarding, coverage.changed)
- Update docs/architecture/tech-stack.md Web UI row (add Pinia, VueFlow, ECharts, Axios, devtools)
- Update detect-object-injection comment (40+ warnings, ~87% false positive rate)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Aureliolo Aureliolo force-pushed the chore/evaluate-web-dep-upgrades branch from 3da4860 to 4b0c44a Compare March 23, 2026 06:37
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 23, 2026 06:38 — with GitHub Actions Inactive
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@web/package.json`:
- Line 41: Update the invalid dependency entry "@vitejs/devtools": "^0.1.5" in
package.json: either remove the "@vitejs/devtools" line entirely or replace it
with a published version (e.g. "0.0.0-alpha.22") that exists on npm, then run
your package manager to update lockfiles (npm install / yarn install) so the
lockfile reflects the change; if you choose to keep the dependency, ensure Vite
compatibility (Vite 8+) before committing the updated dependency string.

In `@web/vitest.config.ts`:
- Around line 15-20: The Vitest config currently sets coverage.changed:
'origin/main' which limits coverage to modified files; update
web/vitest.config.ts to apply this only in non-CI runs by detecting the CI
environment (e.g., process.env.CI or a custom env var) and conditionally setting
the changed property: when CI is true, omit or set changed to undefined (so full
coverage is collected), otherwise keep 'origin/main' for local runs; modify the
exported coverage object where coverage.changed is defined to compute the value
based on that environment check.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: d3daff6c-76f8-461d-9450-0f4dd1c5ac2e

📥 Commits

Reviewing files that changed from the base of the PR and between 3da4860 and 4b0c44a.

⛔ Files ignored due to path filters (1)
  • web/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (82)
  • .github/workflows/ci.yml
  • CLAUDE.md
  • docs/architecture/tech-stack.md
  • web/eslint.config.js
  • web/package.json
  • web/src/__tests__/composables/useOptimisticUpdate.test.ts
  • web/src/components/agents/AgentCard.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/common/AdvancedBanner.vue
  • web/src/components/common/AdvancedWarningDialog.vue
  • web/src/components/common/ChipArrayInput.vue
  • web/src/components/common/ConnectionLostBanner.vue
  • web/src/components/common/EmptyState.vue
  • web/src/components/common/ErrorBoundary.vue
  • web/src/components/common/FloatingSaveButton.vue
  • web/src/components/common/LoadingSkeleton.vue
  • web/src/components/common/NameLocaleSelector.vue
  • web/src/components/common/PageHeader.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/dashboard/SpendingSummary.vue
  • web/src/components/dashboard/SystemStatus.vue
  • web/src/components/layout/AppShell.vue
  • web/src/components/layout/ConnectionStatus.vue
  • web/src/components/layout/Sidebar.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/messages/MessageItem.vue
  • web/src/components/messages/MessageList.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/components/providers/ProviderTestButton.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/settings/SettingGroupRenderer.vue
  • web/src/components/settings/SettingRestartBadge.vue
  • web/src/components/settings/SettingSourceBadge.vue
  • web/src/components/settings/SettingsCodeView.vue
  • web/src/components/settings/SettingsNameLocales.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/setup/SetupComplete.vue
  • web/src/components/setup/SetupNameLocale.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/setup/SetupWelcome.vue
  • web/src/components/tasks/KanbanColumn.vue
  • web/src/components/tasks/TaskCard.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/components/tasks/TaskFilters.vue
  • web/src/components/tasks/TaskListView.vue
  • web/src/composables/useOptimisticUpdate.ts
  • web/src/stores/auth.ts
  • web/src/views/AgentDetailPage.vue
  • web/src/views/AgentProfilesPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/ArtifactBrowserPage.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/views/CompanyPage.vue
  • web/src/views/DashboardPage.vue
  • web/src/views/LoginPage.vue
  • web/src/views/MeetingLogsPage.vue
  • web/src/views/MessageFeedPage.vue
  • web/src/views/OrgChartPage.vue
  • web/src/views/ProvidersPage.vue
  • web/src/views/SettingsPage.vue
  • web/src/views/SetupPage.vue
  • web/src/views/TaskBoardPage.vue
  • web/vite.config.ts
  • web/vitest.config.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Build Web
  • GitHub Check: Build Backend
  • GitHub Check: Build Sandbox
  • GitHub Check: Analyze (python)
🧰 Additional context used
📓 Path-based instructions (4)
web/src/**/*.vue

📄 CodeRabbit inference engine (CLAUDE.md)

Use Vue 3 + PrimeVue + Tailwind CSS for the dashboard frontend; components organized by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.)

Files:

  • web/src/views/ArtifactBrowserPage.vue
  • web/src/components/messages/MessageItem.vue
  • web/src/components/setup/SetupComplete.vue
  • web/src/components/settings/SettingRestartBadge.vue
  • web/src/components/settings/SettingSourceBadge.vue
  • web/src/components/settings/SettingsCodeView.vue
  • web/src/components/providers/ProviderTestButton.vue
  • web/src/components/tasks/TaskCard.vue
  • web/src/components/tasks/TaskFilters.vue
  • web/src/components/settings/SettingsNameLocales.vue
  • web/src/components/common/AdvancedBanner.vue
  • web/src/components/setup/SetupWelcome.vue
  • web/src/components/messages/MessageList.vue
  • web/src/components/common/AdvancedWarningDialog.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/tasks/KanbanColumn.vue
  • web/src/components/layout/Sidebar.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/tasks/TaskListView.vue
  • web/src/components/common/ConnectionLostBanner.vue
  • web/src/components/common/FloatingSaveButton.vue
  • web/src/components/setup/SetupNameLocale.vue
  • web/src/views/DashboardPage.vue
  • web/src/views/AgentDetailPage.vue
  • web/src/components/settings/SettingGroupRenderer.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/common/PageHeader.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/dashboard/SystemStatus.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/agents/AgentCard.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/views/LoginPage.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/components/common/ChipArrayInput.vue
  • web/src/views/SetupPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/dashboard/SpendingSummary.vue
  • web/src/components/layout/ConnectionStatus.vue
  • web/src/components/layout/AppShell.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/views/MessageFeedPage.vue
  • web/src/components/common/EmptyState.vue
  • web/src/views/CompanyPage.vue
  • web/src/views/TaskBoardPage.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/views/AgentProfilesPage.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/views/ProvidersPage.vue
  • web/src/components/common/ErrorBoundary.vue
  • web/src/views/SettingsPage.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/views/MeetingLogsPage.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/views/OrgChartPage.vue
  • web/src/components/common/LoadingSkeleton.vue
  • web/src/components/common/NameLocaleSelector.vue
web/package.json

📄 CodeRabbit inference engine (CLAUDE.md)

Web dashboard Node.js 20+; dependencies: Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, CodeMirror 6 (vue-codemirror), js-yaml, Vitest, fast-check, ESLint, vue-tsc

Files:

  • web/package.json
web/src/__tests__/**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

Use fast-check for property-based testing in Vue: fc.assert and fc.property with .fast-check/ outputs gitignored

Files:

  • web/src/__tests__/composables/useOptimisticUpdate.test.ts
web/src/stores/**/*.ts

📄 CodeRabbit inference engine (CLAUDE.md)

Use Pinia stores for state management in Vue dashboard (auth, agents, tasks, budget, messages, approvals, settings, company, providers, websocket, etc.)

Files:

  • web/src/stores/auth.ts
🧠 Learnings (39)
📓 Common learnings
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies: Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, CodeMirror 6 (vue-codemirror), js-yaml, Vitest, fast-check, ESLint, vue-tsc
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, ESLint, vue-tsc)
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Dependabot: daily updates (uv, github-actions, npm, pre-commit, docker, gomod), grouped minor/patch, no auto-merge. Use `/review-dep-pr` before merging.
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to web/** : Web dashboard: Node.js 20+, dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, fast-check, ESLint, vue-tsc).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/**/*.vue : Use Vue 3 + PrimeVue + Tailwind CSS for the dashboard frontend; components organized by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.)
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/*.yml : Dependabot: daily updates for uv + github-actions + npm + pre-commit + docker + gomod, grouped minor/patch, no auto-merge. Use `/review-dep-pr` to review Dependabot PRs before merging.
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:20:09.993Z
Learning: Applies to web/src/components/** : Vue components organized by feature (agents/, approvals/, budget/, common/, dashboard/, layout/, messages/, org-chart/, tasks/).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Dependency review: `dependency-review.yml` enforces license allow-list (permissive + weak-copyleft) with per-package GPL exemptions for dev-only tool deps (golangci-lint); PR comment summaries
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/__tests__/**/*.ts : Use fast-check for property-based testing in Vue: `fc.assert` and `fc.property` with `.fast-check/` outputs gitignored
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to docker/{Dockerfile*,compose.yml} : Docker: Backend uses 3-stage build (builder → setup → distroless runtime), Chainguard Python, non-root (UID 65532), CIS-hardened. Web uses nginxinc/nginx-unprivileged, Vue 3 SPA with PrimeVue + Tailwind CSS, SPA routing, API/WebSocket proxy to backend.
📚 Learning: 2026-03-15T21:20:09.993Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:20:09.993Z
Learning: Applies to web/src/components/** : Vue components organized by feature (agents/, approvals/, budget/, common/, dashboard/, layout/, messages/, org-chart/, tasks/).

Applied to files:

  • web/src/views/ArtifactBrowserPage.vue
  • docs/architecture/tech-stack.md
  • web/src/views/DashboardPage.vue
  • web/src/views/AgentDetailPage.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/agents/AgentCard.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/views/CompanyPage.vue
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/eslint.config.js
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/views/AgentProfilesPage.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/views/SettingsPage.vue
  • web/src/components/org-chart/OrgNode.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/views/MeetingLogsPage.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/views/OrgChartPage.vue
  • web/src/components/common/NameLocaleSelector.vue
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/**/*.vue : Use Vue 3 + PrimeVue + Tailwind CSS for the dashboard frontend; components organized by feature (agents/, approvals/, budget/, company/, setup/, settings/, providers/, etc.)

Applied to files:

  • web/src/views/ArtifactBrowserPage.vue
  • docs/architecture/tech-stack.md
  • web/src/components/tasks/TaskFilters.vue
  • web/src/components/layout/Topbar.vue
  • web/src/components/company/CompanyGeneralForm.vue
  • web/src/components/tasks/TaskListView.vue
  • web/src/views/DashboardPage.vue
  • web/src/views/AgentDetailPage.vue
  • web/src/components/approvals/ApprovalActions.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/components/dashboard/ActiveTasksSummary.vue
  • web/src/components/settings/SettingField.vue
  • web/src/components/company/CompanyAgentFormDialog.vue
  • web/src/views/LoginPage.vue
  • web/src/views/BudgetPanelPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/budget/BudgetConfigDisplay.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/agents/AgentMetrics.vue
  • web/src/components/setup/SetupCompany.vue
  • web/src/components/setup/SetupReviewOrg.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/dashboard/SpendingSummary.vue
  • web/src/components/company/CompanyAgentCard.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • web/src/components/tasks/TaskCreateDialog.vue
  • web/src/components/approvals/ApprovalDetail.vue
  • web/src/views/CompanyPage.vue
  • CLAUDE.md
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/eslint.config.js
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/views/AgentProfilesPage.vue
  • web/src/components/tasks/TaskDetailPanel.vue
  • web/src/views/ProvidersPage.vue
  • web/src/views/SettingsPage.vue
  • web/src/components/approvals/ApprovalCard.vue
  • web/src/views/MeetingLogsPage.vue
  • web/src/components/budget/AgentSpendingTable.vue
  • web/src/views/OrgChartPage.vue
📚 Learning: 2026-03-14T15:43:05.601Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-14T15:43:05.601Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, ESLint, vue-tsc)

Applied to files:

  • web/package.json
  • docs/architecture/tech-stack.md
  • .github/workflows/ci.yml
  • web/src/views/DashboardPage.vue
  • web/src/components/setup/SetupProvider.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/vite.config.ts
  • CLAUDE.md
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/eslint.config.js
  • web/src/components/company/CompanyDepartmentFormDialog.vue
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/package.json : Web dashboard Node.js 20+; dependencies: Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, CodeMirror 6 (vue-codemirror), js-yaml, Vitest, fast-check, ESLint, vue-tsc

Applied to files:

  • web/package.json
  • docs/architecture/tech-stack.md
  • .github/workflows/ci.yml
  • web/src/components/tasks/TaskListView.vue
  • web/src/views/DashboardPage.vue
  • web/vitest.config.ts
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/budget/SpendingChart.vue
  • web/src/views/LoginPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/views/SetupPage.vue
  • web/src/components/setup/SetupAdmin.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/vite.config.ts
  • web/src/components/dashboard/RecentApprovals.vue
  • CLAUDE.md
  • web/src/components/company/CompanyDepartmentCard.vue
  • web/eslint.config.js
  • web/src/components/company/CompanyDepartmentFormDialog.vue
  • web/src/views/SettingsPage.vue
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to web/** : Web dashboard: Node.js 20+, dependencies in web/package.json (Vue 3, PrimeVue, Tailwind CSS, Pinia, VueFlow, ECharts, Axios, vue-draggable-plus, Vitest, fast-check, ESLint, vue-tsc).

Applied to files:

  • web/package.json
  • docs/architecture/tech-stack.md
  • .github/workflows/ci.yml
  • web/src/views/DashboardPage.vue
  • web/src/views/ApprovalQueuePage.vue
  • web/src/components/dashboard/RecentApprovals.vue
  • CLAUDE.md
  • web/eslint.config.js
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/__tests__/**/*.ts : Use fast-check for property-based testing in Vue: `fc.assert` and `fc.property` with `.fast-check/` outputs gitignored

Applied to files:

  • web/package.json
  • web/vitest.config.ts
  • web/eslint.config.js
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to web/src/stores/**/*.ts : Use Pinia stores for state management in Vue dashboard (auth, agents, tasks, budget, messages, approvals, settings, company, providers, websocket, etc.)

Applied to files:

  • docs/architecture/tech-stack.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to docker/{Dockerfile*,compose.yml} : Docker: Backend uses 3-stage build (builder → setup → distroless runtime), Chainguard Python, non-root (UID 65532), CIS-hardened. Web uses nginxinc/nginx-unprivileged, Vue 3 SPA with PrimeVue + Tailwind CSS, SPA routing, API/WebSocket proxy to backend.

Applied to files:

  • docs/architecture/tech-stack.md
  • .github/workflows/ci.yml
  • CLAUDE.md
📚 Learning: 2026-03-19T11:33:01.580Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:33:01.580Z
Learning: Applies to web/**/*.vue : Never use real vendor names (Anthropic, OpenAI, Claude, GPT, etc.) in dashboard code — use generic names: `example-provider`, `example-large-001`, etc.

Applied to files:

  • docs/architecture/tech-stack.md
  • web/src/components/setup/SetupProvider.vue
  • web/src/components/dashboard/MetricCard.vue
  • web/src/components/providers/ProviderCard.vue
  • web/src/components/providers/ProviderFormDialog.vue
  • web/src/views/ProvidersPage.vue
📚 Learning: 2026-03-17T22:08:13.456Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-17T22:08:13.456Z
Learning: Engine: Agent orchestration, execution loops, parallel execution, task decomposition, routing, task assignment, centralized single-writer task state engine (TaskEngine), task lifecycle, recovery, shutdown, workspace isolation, coordination (multi-agent pipeline: TopologyDispatcher protocol, 4 dispatchers — SAS/centralized/decentralized/context-dependent, wave execution, workspace lifecycle integration, CoordinationSectionConfig company config bridge, build_coordinator factory), coordination error classification, prompt policy validation, checkpoint recovery (checkpoint/, per-turn persistence, heartbeat detection, CheckpointRecoveryStrategy), approval gate (escalation detection, context parking/resume, EscalationInfo/ResumePayload models), stagnation detection (stagnation/, StagnationDetector protocol, ToolRepetitionDetector, dual-signal analysis, corrective prompt injection), agent runtime state (AgentRuntimeState, lightweight per-agent execution status for dashboard queries and recove...

Applied to files:

  • docs/architecture/tech-stack.md
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to src/synthorg/**/*.py : Package structure: src/synthorg/ organized as: api/ (REST+WebSocket, Litestar), auth/ (auth subpackage), backup/ (scheduled/manual backups), budget/ (cost tracking, CFO), cli/ (superseded by Go CLI), communication/ (message bus, meetings), config/ (YAML loading), core/ (domain models, resilience config), engine/ (orchestration, task state, coordination, approval gates, stagnation detection, context budget, compaction), hr/ (hiring, performance, promotion), memory/ (pluggable backend, Mem0, retrieval, consolidation), persistence/ (operational data, SQLite, settings), observability/ (logging, correlation, sinks), providers/ (LLM abstraction, LiteLLM, auth types, presets, runtime CRUD), settings/ (runtime-editable, typed definitions, encryption, config bridge), security/ (SecOps, rule engine, output scanning, progressive trust, autonomy levels), templates/ (company templates, personalities), tools/ (registry, built-in tools, git, sandbox, code_runner, MCP...

Applied to files:

  • docs/architecture/tech-stack.md
  • web/src/components/setup/SetupWelcome.vue
📚 Learning: 2026-03-17T22:08:13.456Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-17T22:08:13.456Z
Learning: Documentation source in `docs/` (Markdown, built with Zensical). Design spec in `docs/design/` (7 pages: index, agents, organization, communication, engine, memory, operations). Architecture in `docs/architecture/` (overview, tech-stack, decision log). Roadmap in `docs/roadmap/`. Security in `docs/security.md`. Licensing in `docs/licensing.md`. Reference in `docs/reference/`. REST API reference in `docs/rest-api.md`. Library reference in `docs/api/` (auto-generated from docstrings). Custom templates in `docs/overrides/`. Config in `mkdocs.yml`.

Applied to files:

  • docs/architecture/tech-stack.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to docker/Dockerfile* : Docker images: backend (Chainguard distroless, non-root), web (nginx-unprivileged, SPA + API proxy), sandbox (Python + Node.js, non-root)

Applied to files:

  • docs/architecture/tech-stack.md
📚 Learning: 2026-03-19T07:12:14.508Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T07:12:14.508Z
Learning: Applies to src/synthorg/engine/**/*.py : Engine package (engine/): agent orchestration, parallel execution, task decomposition, routing, TaskEngine (centralized single-writer), task lifecycle/recovery/shutdown, workspace isolation, coordination (4 dispatchers: SAS/centralized/decentralized/context-dependent, wave execution), approval gates (escalation detection, context parking/resume), stagnation detection (ToolRepetitionDetector, corrective prompt injection), AgentRuntimeState (execution status), context budget management, conversation compaction (oldest-turns summarizer)

Applied to files:

  • docs/architecture/tech-stack.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to .github/workflows/**/*.yml : Path filtering: dorny/paths-filter detects Python/dashboard/docker changes; jobs only run when their domain is affected. CLI has its own workflow (cli.yml).

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Parallel CI jobs: lint (ruff) + type-check (mypy) + test (pytest + coverage) + python-audit (pip-audit) + dockerfile-lint (hadolint) + dashboard lint/type-check/test/build/audit; gated by `ci-pass`

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/*.yml : Dependabot: daily updates for uv + github-actions + npm + pre-commit + docker + gomod, grouped minor/patch, no auto-merge. Use `/review-dep-pr` to review Dependabot PRs before merging.

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Dependabot: daily updates (uv, github-actions, npm, pre-commit, docker, gomod), grouped minor/patch, no auto-merge. Use `/review-dep-pr` before merging.

Applied to files:

  • .github/workflows/ci.yml
📚 Learning: 2026-03-20T08:28:32.845Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to web/src/__tests__/**/*.{ts,js} : Dashboard testing: Vitest unit tests organized by feature under `web/src/__tests__/`. Use fast-check for property-based testing (`fc.assert` + `fc.property`).

Applied to files:

  • .github/workflows/ci.yml
  • web/vitest.config.ts
  • web/eslint.config.js
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/docker.yml : Docker workflow: builds backend + web + sandbox images, pushes to GHCR, signs with cosign. SLSA L3 provenance attestations via actions/attest-build-provenance. Scans: Trivy (CRITICAL = hard fail, HIGH = warn) + Grype (critical cutoff) + CIS Docker Benchmark v1.6.0 compliance (informational). CVE triage via .github/.trivyignore.yaml and .github/.grype.yaml. Images only pushed after scans pass. Triggers on push to main and version tags (v*).

Applied to files:

  • .github/workflows/ci.yml
  • CLAUDE.md
📚 Learning: 2026-03-20T08:28:32.845Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-20T08:28:32.845Z
Learning: Applies to src/synthorg/providers/**/*.py : Providers: LLM provider abstraction (LiteLLM adapter), auth types (api_key/oauth/custom_header/none), presets (PROVIDER_PRESETS), runtime CRUD (ProviderManagementService with asyncio.Lock serialization), hot-reload via AppState swap.

Applied to files:

  • web/src/components/setup/SetupProvider.vue
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: CLI CI: Go lint/test/build (cross-compile) + govulncheck + fuzz via `cli.yml`; GoReleaser release on `v*` tags with cosign signing + SLSA provenance

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-16T19:52:03.656Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-16T19:52:03.656Z
Learning: Applies to cli/**/*.go : Lint CLI Go code with golangci-lint and go vet; test with go test -race; check vulnerabilities with govulncheck

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:30:29.217Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:30:29.217Z
Learning: Applies to cli/**/*.go : Run Go lint via `golangci-lint run`, vet via `go vet`, tests via `go test ./...`, and fuzz via `go test -fuzz=FuzzTarget -fuzztime=30s`

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: CLI workflow (`.github/workflows/cli.yml`) runs Go lint (golangci-lint + go vet) + test (race, coverage) + build (cross-compile matrix) + vulnerability check (govulncheck) + fuzz testing. Cross-compiles for linux/darwin/windows × amd64/arm64. GoReleaser release on v* tags with cosign keyless signing and SLSA L3 attestations.

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to cli/**/*.go : Lint Go code with `golangci-lint` and `go vet`. Run tests with `-race` flag to detect race conditions.

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/**/*.go : Go CLI (Go 1.26+) uses Cobra for commands, charmbracelet/huh for interactive CLI, charmbracelet/lipgloss for styled output. Cross-platform builds (linux/darwin/windows × amd64/arm64). GoReleaser for releases with cosign keyless signing of checksums.txt. SLSA L3 provenance attestations via actions/attest-build-provenance.

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: CI uses `dorny/paths-filter` for path filtering; jobs only run when their domain is affected. CLI has its own workflow (`cli.yml`).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Docker CI: build + Trivy/Grype scan + push to GHCR + cosign sign + SLSA L3 provenance; CVE triage in `.github/.trivyignore.yaml`, `.github/.grype.yaml`

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to .github/workflows/cli.yml : CLI workflow: Go lint (golangci-lint + go vet) + test (-race -coverprofile) + build (cross-compile: linux/darwin/windows × amd64/arm64) + govulncheck + fuzz testing (main-only, 30s/target, continue-on-error, matrix over 4 packages). cli-pass gate includes fuzz as informational. GoReleaser release on v* tags. Cosign keyless signing of checksums.txt. SLSA L3 provenance attestations. Sigstore bundle (.sigstore.json) attached. Post-release appends checksums/verification/provenance to draft release notes.

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T12:00:18.113Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T12:00:18.113Z
Learning: Applies to .github/workflows/docker.yml : CI Docker: build → scan → push to GHCR + cosign sign + SLSA L3 provenance via attest-build-provenance (images only pushed after Trivy/Grype scans pass).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Pages CI job: extract version from `pyproject.toml`, export OpenAPI schema, build Astro + Zensical docs with version banner, deploy to GitHub Pages on push to main

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to pyproject.toml : Dependencies: all versions use == in pyproject.toml. Groups: test (pytest + plugins, hypothesis), dev (includes test + ruff, mypy, pre-commit, commitizen, pip-audit). Required: mem0ai (Mem0 memory backend — the default and currently only backend). Install: uv sync installs everything (dev group is default).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Applies to pyproject.toml : Core dependencies required in `pyproject.toml`: `mem0ai` (Mem0 memory backend — default and currently only backend), `cryptography` (Fernet encryption for sensitive settings at rest), `faker` (multi-locale agent name generation)

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-23T06:17:39.326Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-23T06:17:39.326Z
Learning: Install all Python dependencies with `uv sync` (installs dev group by default); use `uv sync --group docs` for docs toolchain

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-19T11:19:40.044Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-19T11:19:40.044Z
Learning: Applies to go.mod : Maintain Go 1.26+ requirement. Dependencies: Cobra (CLI framework), charmbracelet/huh and charmbracelet/lipgloss (UI), sigstore-go (code signing), go-containerregistry (container image verification), go-tuf (TUF client for Sigstore).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T18:17:43.675Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T18:17:43.675Z
Learning: Applies to cli/** : CLI: Go 1.26+, dependencies in cli/go.mod (Cobra, charmbracelet/huh).

Applied to files:

  • CLAUDE.md
📚 Learning: 2026-03-15T21:32:02.880Z
Learnt from: CR
Repo: Aureliolo/synthorg PR: 0
File: CLAUDE.md:0-0
Timestamp: 2026-03-15T21:32:02.880Z
Learning: Applies to cli/go.mod : Go CLI dependencies: Go 1.26+, Cobra (commands), charmbracelet/huh (interactive CLI), charmbracelet/lipgloss (styled output).

Applied to files:

  • CLAUDE.md
🧬 Code graph analysis (2)
web/src/composables/useOptimisticUpdate.ts (1)
web/src/utils/errors.ts (1)
  • getErrorMessage (17-69)
web/src/stores/auth.ts (1)
web/src/utils/errors.ts (1)
  • getErrorMessage (17-69)

"@types/js-yaml": "^4.0.9",
"@types/node": "^25.5.0",
"@typescript-eslint/parser": "^8.57.1",
"@vitejs/devtools": "^0.1.5",
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Is @vitejs/devtools version 0.1.5 compatible with Vite 8 and Node.js 20+? Please include official Vite documentation or package release notes.

💡 Result:

No—because @vitejs/devtools doesn’t appear to have a 0.1.5 release at all (public package metadata pages for the package show 0.0.0-alpha.*, e.g. 0.0.0-alpha.22, not 0.1.5).[3] So there aren’t any official release notes to confirm compatibility for “0.1.5”.

What is officially documented today:

  • Vite DevTools requires Vite 8+ (current limitation in the official Vite DevTools docs).[2]
  • Vite 8 requires Node.js 20.19+ or 22.12+ (official Vite 8 announcement).[1]

So, Vite 8 + Node.js 20+ is compatible only if your Node 20 is >= 20.19, and the officially documented requirement for Vite DevTools is Vite 8+—but you’ll need to use an actually published @vitejs/devtools version (not 0.1.5).[1][2]

Sources:
[1] Vite 8 announcement (Node.js requirements) (vite.dev)
[2] Vite DevTools “Getting Started” (Vite 8+ requirement) (devtools.vite.dev)
[3] jsDelivr package page for @vitejs/devtools (shows 0.0.0-alpha.* versions, not 0.1.5) (jsdelivr.com)

Citations:


Remove or correct the @vitejs/devtools dependency—version 0.1.5 does not exist.

The specified version is not published in npm. Only pre-release versions exist (0.0.0-alpha.22, etc.), and they are unsuitable for production. This dependency will fail to install.

Either remove the dependency, use an actual alpha version, or wait for an official release. Note that when stable versions are available, Vite DevTools requires Vite 8+, which aligns with your setup.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@web/package.json` at line 41, Update the invalid dependency entry
"@vitejs/devtools": "^0.1.5" in package.json: either remove the
"@vitejs/devtools" line entirely or replace it with a published version (e.g.
"0.0.0-alpha.22") that exists on npm, then run your package manager to update
lockfiles (npm install / yarn install) so the lockfile reflects the change; if
you choose to keep the dependency, ensure Vite compatibility (Vite 8+) before
committing the updated dependency string.

CI needs full coverage for Codecov reporting; the changed-files
optimization is only useful during local development.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 23, 2026 06:45 — with GitHub Actions Inactive
@Aureliolo Aureliolo merged commit 1bb6336 into main Mar 23, 2026
32 checks passed
@Aureliolo Aureliolo deleted the chore/evaluate-web-dep-upgrades branch March 23, 2026 06:48
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview March 23, 2026 06:48 — with GitHub Actions Inactive
Aureliolo added a commit that referenced this pull request Mar 23, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.4.9](v0.4.8...v0.4.9)
(2026-03-23)


### Features

* add consultancy and data team template archetypes
([#764](#764))
([81dc75f](81dc75f))
* add personality presets for new template archetypes
([#758](#758))
([de4e661](de4e661))
* improve wipe command UX with interactive prompts
([#759](#759))
([bbd4d2d](bbd4d2d))


### Bug Fixes

* stable channel detects update for dev builds
([#753](#753))
([f53da9f](f53da9f))


### Documentation

* add version banner to docs header
([#761](#761))
([8f8c1f8](8f8c1f8))


### Maintenance

* adopt new features from web dependency upgrades
([#763](#763))
([1bb6336](1bb6336))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
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.

chore: evaluate new features from major web dependency upgrades (PR #389)

1 participant