feat(calm-suite): add CALM Guard and CALM Studio projects#2329
Merged
rocketstack-matt merged 10 commits intofinos:mainfrom Apr 11, 2026
Merged
feat(calm-suite): add CALM Guard and CALM Studio projects#2329rocketstack-matt merged 10 commits intofinos:mainfrom
rocketstack-matt merged 10 commits intofinos:mainfrom
Conversation
Add calm-suite directory containing CALMGuard (from finos-labs) and CALMStudio (from opsflo) as proposed in finos#2320. Rename existing CLAUDE.md files to AGENTS.md per project standards and add new CLAUDE.md files pointing to them. Update README.md projects table and CODEOWNERS with @opsflowanoop, @gjs-opsflo, and @eddie-knight as maintainers.
Migrate CI workflows to monorepo root: - build-calm-guard.yml (lint, test, build) - build-calm-studio.yml (build, lint, test, e2e) - build-calm-studio-desktop.yml (Tauri cross-platform build) - automated-release-calm-studio.yml (multi-package semantic release) Remove files superseded by monorepo root: - .github/ directories (CI, templates, CODEOWNERS, CoC) - .husky/ directories (root husky handles hooks) - Legal/governance duplicates (LICENSE, NOTICE, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT, MAINTAINERS, CHANGELOG) - pnpm-lock.yaml, .npmrc, .gitignore, commitlint.config.cjs - .reuse/, LICENSES/ (calm-studio REUSE metadata) - .planning/ directories Remove hackathon artifacts and screenshots: - calm-guard: PDF presentation, PNGs, submission docs - calm-studio: 8 AWS diagram PNGs Update root .gitignore with patterns for new tech stacks: - Next.js (next-env.d.ts, .next/) - SvelteKit (.svelte-kit/) - Tauri/Rust (src-tauri/target/, src-tauri/gen/) - Playwright (playwright-report/, test-results/)
Remove explicit type annotation on Tooltip formatter callback that was incompatible with the recharts ValueType union. Let TypeScript infer the parameter type from the generic instead.
Add patterns for pnpm lockfiles (until npm workspace migration), SvelteKit build output, Docusaurus sub-project artifacts, and TypeDoc generated API docs.
Add @rocketstack-matt, @markscott-ms, and @jpgough-ms as code owners for the calm-suite directory alongside the Opsflow maintainers.
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Adds CALM Suite projects (CALMGuard + CALM Studio) into the monorepo and wires them into repo standards (CI, ownership, docs). The included CALMGuard changes add a Next.js dashboard app with agent-driven architecture/compliance analysis, streamed events UI, and supporting API routes + tests.
Changes:
- Adds CALMGuard app (UI, agents, API routes, graph visualization) and CALM Studio integration.
- Introduces monorepo CI workflows for CALMGuard/CALM Studio and updates CODEOWNERS/README project listings.
- Adds skill guides, agent YAML configs, and expands Vitest coverage for CALM parsing + learning utilities.
Reviewed changes
Copilot reviewed 138 out of 536 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| calm-suite/calm-guard/src/lib/agents/architecture-analyzer.ts | New agent: architecture analysis w/ SSE events + retries |
| calm-suite/calm-guard/src/components/ui/tooltip.tsx | New shadcn tooltip wrapper |
| calm-suite/calm-guard/src/components/ui/tabs.tsx | New shadcn tabs wrapper |
| calm-suite/calm-guard/src/components/ui/sonner.tsx | New toaster wrapper (theme-aware) |
| calm-suite/calm-guard/src/components/ui/skeleton.tsx | New skeleton component |
| calm-suite/calm-guard/src/components/ui/separator.tsx | New separator component |
| calm-suite/calm-guard/src/components/ui/select.tsx | New select component |
| calm-suite/calm-guard/src/components/ui/scroll-area.tsx | New scroll-area component |
| calm-suite/calm-guard/src/components/ui/odometer-score.tsx | New animated compliance score UI |
| calm-suite/calm-guard/src/components/ui/label.tsx | New label component |
| calm-suite/calm-guard/src/components/ui/input.tsx | New input component |
| calm-suite/calm-guard/src/components/ui/dialog.tsx | New dialog component |
| calm-suite/calm-guard/src/components/ui/checkbox.tsx | New checkbox component |
| calm-suite/calm-guard/src/components/ui/card.tsx | New card components |
| calm-suite/calm-guard/src/components/ui/button.tsx | New button + variants |
| calm-suite/calm-guard/src/components/ui/badge.tsx | New badge + variants |
| calm-suite/calm-guard/src/components/layout/dashboard-layout.tsx | New dashboard layout (sidebar/header/feed) |
| calm-suite/calm-guard/src/components/graph/utils/layout.ts | Dagre layout + trust-boundary parent sizing |
| calm-suite/calm-guard/src/components/graph/utils/calm-to-flow.ts | CALM → React Flow nodes/edges mapping |
| calm-suite/calm-guard/src/components/graph/nodes/webclient-node.tsx | New React Flow node renderer |
| calm-suite/calm-guard/src/components/graph/nodes/trust-boundary-node.tsx | New trust boundary group node renderer |
| calm-suite/calm-guard/src/components/graph/nodes/system-node.tsx | New React Flow node renderer |
| calm-suite/calm-guard/src/components/graph/nodes/service-node.tsx | New React Flow node renderer + compliance colors |
| calm-suite/calm-guard/src/components/graph/nodes/default-node.tsx | New fallback React Flow node renderer |
| calm-suite/calm-guard/src/components/graph/nodes/database-node.tsx | New React Flow node renderer |
| calm-suite/calm-guard/src/components/graph/nodes/actor-node.tsx | New React Flow node renderer |
| calm-suite/calm-guard/src/components/graph/edges/protocol-edge.tsx | New edge renderer w/ protocol label |
| calm-suite/calm-guard/src/components/dashboard/sidebar.tsx | Dashboard navigation + agent squad status |
| calm-suite/calm-guard/src/components/dashboard/pipeline-preview-skeleton.tsx | Loading skeleton UI |
| calm-suite/calm-guard/src/components/dashboard/header.tsx | Demo selector + analyze CTA + parse badges |
| calm-suite/calm-guard/src/components/dashboard/export-report-modal.tsx | Modal for report preview + markdown download |
| calm-suite/calm-guard/src/components/dashboard/compliance-card-skeleton.tsx | Loading skeleton UI |
| calm-suite/calm-guard/src/components/dashboard/architecture-graph-skeleton.tsx | Loading skeleton UI |
| calm-suite/calm-guard/src/components/dashboard/analyze-button.tsx | Analyze button component |
| calm-suite/calm-guard/src/components/dashboard/agent-feed.tsx | Agent event feed panel |
| calm-suite/calm-guard/src/components/dashboard/agent-feed-skeleton.tsx | Loading skeleton UI |
| calm-suite/calm-guard/src/components/dashboard/agent-feed-event.tsx | Agent event row renderer |
| calm-suite/calm-guard/src/components/calm/parse-error-display.tsx | UI for CALM parse/validation error display |
| calm-suite/calm-guard/src/components/calm/github-input.tsx | Fetch CALM from GitHub UI + validation |
| calm-suite/calm-guard/src/app/page.tsx | Landing page + demo runner |
| calm-suite/calm-guard/src/app/layout.tsx | Root layout + theme provider + toaster |
| calm-suite/calm-guard/src/app/globals.css | Tailwind theme vars + animations |
| calm-suite/calm-guard/src/app/dashboard/pipeline/page.tsx | Pipeline page |
| calm-suite/calm-guard/src/app/dashboard/layout.tsx | Dashboard app layout wrapper |
| calm-suite/calm-guard/src/app/dashboard/findings/page.tsx | Findings page |
| calm-suite/calm-guard/src/app/dashboard/compliance/page.tsx | Compliance page |
| calm-suite/calm-guard/src/app/dashboard/architecture/page.tsx | Architecture graph page |
| calm-suite/calm-guard/src/app/api/pipeline/route.ts | Returns last pipeline result |
| calm-suite/calm-guard/src/app/api/github/status/route.ts | GitHub integration status endpoint |
| calm-suite/calm-guard/src/app/api/github/fetch-calm/route.ts | Fetch + parse CALM file from GitHub repo |
| calm-suite/calm-guard/src/app/api/calm/validate/route.ts | CALM CLI validation endpoint (node runtime) |
| calm-suite/calm-guard/src/app/api/calm/parse/route.ts | CALM parse-only endpoint |
| calm-suite/calm-guard/src/app/api/analyze/route.ts | SSE analyze endpoint + stores last results |
| calm-suite/calm-guard/src/tests/learning/pre-check.test.ts | Tests for deterministic learning pre-checks |
| calm-suite/calm-guard/src/tests/learning/fingerprint.test.ts | Tests for fingerprint generation |
| calm-suite/calm-guard/src/tests/learning/extractor.test.ts | Tests for pattern extraction |
| calm-suite/calm-guard/src/tests/calm/parser.test.ts | Tests for CALM parsing (multi-version) |
| calm-suite/calm-guard/src/tests/calm/extractor.test.ts | Tests for analysis input extraction |
| calm-suite/calm-guard/src/tests/api/parse.test.ts | Contract tests for parse API route |
| calm-suite/calm-guard/src/tests/agents/schemas.test.ts | Tests for Zod schemas |
| calm-suite/calm-guard/skills/PROTOCOL-SECURITY.md | Skill guide for grounded protocol upgrades |
| calm-suite/calm-guard/skills/DEVSECOPS-PIPELINE.md | Skill guide for pipeline generation |
| calm-suite/calm-guard/skills/CLOUD-INFRASTRUCTURE.md | Skill guide for AWS Terraform generation |
| calm-suite/calm-guard/postcss.config.mjs | Tailwind PostCSS config |
| calm-suite/calm-guard/package.json | App deps/scripts and pnpm manager pin |
| calm-suite/calm-guard/next.config.ts | Next config (serverExternalPackages) |
| calm-suite/calm-guard/examples/index.ts | Demo architectures registry |
| calm-suite/calm-guard/examples/api-gateway.calm.v10.json | New demo CALM v1.0 fixture |
| calm-suite/calm-guard/eslint.config.mjs | ESLint flat config |
| calm-suite/calm-guard/docs/tsconfig.json | Docusaurus TS config |
| calm-suite/calm-guard/docs/src/css/custom.css | Docusaurus theme CSS |
| calm-suite/calm-guard/docs/sidebars.ts | Docusaurus sidebar config |
| calm-suite/calm-guard/docs/package.json | Docusaurus package manifest |
| calm-suite/calm-guard/docs/docusaurus.config.ts | Docusaurus site config |
| calm-suite/calm-guard/docs/docs/uploading-architectures.md | User docs: CALM + uploading |
| calm-suite/calm-guard/docs/docs/security.md | Security documentation |
| calm-suite/calm-guard/docs/docs/reading-reports.md | User docs: interpreting dashboard |
| calm-suite/calm-guard/docs/docs/intro.md | Docs home/overview |
| calm-suite/calm-guard/docs/docs/getting-started.md | Local setup instructions |
| calm-suite/calm-guard/docs/docs/contributing.md | Contribution guide |
| calm-suite/calm-guard/docs/docs/compliance/frameworks.md | Framework descriptions + mapping methodology |
| calm-suite/calm-guard/docs/README.md | Docusaurus template readme |
| calm-suite/calm-guard/docs/.gitignore | Docs ignore rules |
| calm-suite/calm-guard/components.json | shadcn/ui config |
| calm-suite/calm-guard/agents/risk-scorer.yaml | Agent definition |
| calm-suite/calm-guard/agents/pipeline-generator.yaml | Agent definition + skill |
| calm-suite/calm-guard/agents/orchestrator.yaml | Agent definition |
| calm-suite/calm-guard/agents/compliance-mapper.yaml | Agent definition + skills |
| calm-suite/calm-guard/agents/cloud-infra-generator.yaml | Agent definition + skill |
| calm-suite/calm-guard/agents/calm-remediator.yaml | Agent definition + protocol skill |
| calm-suite/calm-guard/agents/architecture-analyzer.yaml | Agent definition |
| calm-suite/calm-guard/CLAUDE.md | Points to AGENTS.md |
| calm-suite/calm-guard/AGENTS.md | Project agent/developer instructions |
| README.md | Adds CALM Guard + CALM Studio to projects table |
| .github/workflows/build-calm-studio.yml | CI workflow for calm-studio build/lint/test |
| .github/workflows/build-calm-studio-desktop.yml | Desktop build + release workflow |
| .github/workflows/build-calm-guard.yml | CI workflow for calm-guard |
| .github/workflows/automated-release-calm-studio.yml | Automated calm-studio release |
| .github/CODEOWNERS | Adds owners for /calm-suite/ |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Re-add pnpm-lock.yaml files needed for --frozen-lockfile in CI - Point pnpm/action-setup to calm-guard's package.json for version detection (root package.json uses npm, not pnpm) - Remove gitignore pattern that was preventing lockfile tracking
The docs-site uses Docusaurus 3.9 which has a webpack ProgressPlugin compatibility issue. Exclude it from the build and lint steps until the upstream fix is available.
The calm-studio coverage thresholds are a pre-existing issue from the source repo. Use plain test runs until the maintainers address the coverage gaps.
This was referenced Apr 11, 2026
- Update docs footer from MIT to Apache-2.0 to match package.json - Update docs README from yarn to pnpm commands - Update GitHub link to point to monorepo location
jpgough-ms
approved these changes
Apr 11, 2026
This was referenced Apr 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds the CALM Suite projects (CALMGuard and CALMStudio) into the monorepo under
calm-suite/as proposed in #2320.build-calm-guard.yml,build-calm-studio.yml,build-calm-studio-desktop.yml,automated-release-calm-studio.yml)calm-suitetocommitlint.config.jsscope-enum and.github/CODEOWNERSREADME.mdprojects table with @opsflowanoop, @gjs-opsflo, and @eddie-knight as maintainersCLAUDE.mdtoAGENTS.mdper project standards, adds newCLAUDE.mdfiles pointing to them.gitignorewith patterns for Next.js, SvelteKit, Tauri/Rust, Playwright, and Docusaurus sub-projectsBoth projects currently use pnpm internally. The CI workflows install pnpm and use
working-directoryscoping as a pragmatic first step.Follow-up issues
Type of Change
Affected Components
Commit Message Format ✅
All commits use
feat(calm-suite):,chore(calm-suite):,fix(calm-suite):, orfix(ci):scopes following conventional commit format.Testing
Monorepo (npm workspaces):
npm run build— all existing workspaces passnpm run lint— pass (warnings only, no errors)npm test— all existing workspaces passcalm-guard (pnpm):
pnpm lint— passpnpm typecheck— passpnpm test:run— 111 tests passpnpm build— passcalm-studio (pnpm):
calm-core,mcp-server,studio,web-componentall passcalm-core(43),extensions(44),mcp-server(57),studio(419) = 563 total passdocs-sitebuild has a pre-existing Docusaurus webpack ProgressPlugin issue (tracked in Migrate calm-studio docs-site into main documentation site #2331)Checklist
Closes #2320