feat: Terragrunt infra pipeline + NexaMesh rebrand + marketing enhancements#798
Open
JustAGhosT wants to merge 215 commits intomainfrom
Open
feat: Terragrunt infra pipeline + NexaMesh rebrand + marketing enhancements#798JustAGhosT wants to merge 215 commits intomainfrom
JustAGhosT wants to merge 215 commits intomainfrom
Conversation
- Bumped versions of `@eslint/compat` to 2.0.3 and `@types/node` to 25.3.5 across multiple package.json files for better compatibility and stability. - Updated `@easyops-cn/docusaurus-search-local` to 0.55.1 in relevant packages to ensure alignment with the latest features and fixes.
Bumps [hashicorp/setup-terraform](https://github.com/hashicorp/setup-terraform) from 3.1.2 to 4.0.0. - [Release notes](https://github.com/hashicorp/setup-terraform/releases) - [Changelog](https://github.com/hashicorp/setup-terraform/blob/main/CHANGELOG.md) - [Commits](hashicorp/setup-terraform@b9cd54a...5e8dbf3) --- updated-dependencies: - dependency-name: hashicorp/setup-terraform dependency-version: 4.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [uuid](https://github.com/uuid-rs/uuid) from 1.21.0 to 1.22.0. - [Release notes](https://github.com/uuid-rs/uuid/releases) - [Commits](uuid-rs/uuid@v1.21.0...v1.22.0) --- updated-dependencies: - dependency-name: uuid dependency-version: 1.22.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [tauri](https://github.com/tauri-apps/tauri) from 2.10.2 to 2.10.3. - [Release notes](https://github.com/tauri-apps/tauri/releases) - [Commits](tauri-apps/tauri@tauri-v2.10.2...tauri-v2.10.3) --- updated-dependencies: - dependency-name: tauri dependency-version: 2.10.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [azure_core](https://github.com/azure/azure-sdk-for-rust) from 0.32.0 to 0.33.0. - [Release notes](https://github.com/azure/azure-sdk-for-rust/releases) - [Commits](https://github.com/azure/azure-sdk-for-rust/compare/azure_core@0.32.0...azure_core@0.33.0) --- updated-dependencies: - dependency-name: azure_core dependency-version: 0.33.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [@azure/msal-browser](https://github.com/AzureAD/microsoft-authentication-library-for-js) from 5.2.0 to 5.4.0. - [Release notes](https://github.com/AzureAD/microsoft-authentication-library-for-js/releases) - [Commits](AzureAD/microsoft-authentication-library-for-js@msal-common-v5.2.0...msal-browser-v5.4.0) --- updated-dependencies: - dependency-name: "@azure/msal-browser" dependency-version: 5.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [lint-staged](https://github.com/lint-staged/lint-staged) from 16.2.7 to 16.3.2. - [Release notes](https://github.com/lint-staged/lint-staged/releases) - [Changelog](https://github.com/lint-staged/lint-staged/blob/main/CHANGELOG.md) - [Commits](lint-staged/lint-staged@v16.2.7...v16.3.2) --- updated-dependencies: - dependency-name: lint-staged dependency-version: 16.3.2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [jose](https://github.com/panva/jose) from 6.1.3 to 6.2.1. - [Release notes](https://github.com/panva/jose/releases) - [Changelog](https://github.com/panva/jose/blob/main/CHANGELOG.md) - [Commits](panva/jose@v6.1.3...v6.2.1) --- updated-dependencies: - dependency-name: jose dependency-version: 6.2.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
- Updated pnpm from version 9.6.0 to 10.31.0 in CLAUDE.md, package.json, and relevant documentation files to ensure consistency and compatibility. - Adjusted references in launch and build guides to reflect the new package manager version.
…or marketing lint
…n-next Made-with: Cursor
fix(ci): pnpm 10 from packageManager, add @next/eslint-plugin-next for marketing lint
fix(ci): pnpm 10 from packageManager, add @next/eslint-plugin-next for marketing lint
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.2.0 to 6.3.0. - [Release notes](https://github.com/actions/setup-node/releases) - [Commits](actions/setup-node@6044e13...53b8394) --- updated-dependencies: - dependency-name: actions/setup-node dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.6 to 8.5.8. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](postcss/postcss@8.5.6...8.5.8) --- updated-dependencies: - dependency-name: postcss dependency-version: 8.5.8 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Chore cleanup packages
deps(deps): bump tauri from 2.10.2 to 2.10.3
…taged-16.3.2 deps(deps-dev): bump lint-staged from 16.2.7 to 16.3.2
Bumps [libc](https://github.com/rust-lang/libc) from 0.2.182 to 0.2.183. - [Release notes](https://github.com/rust-lang/libc/releases) - [Changelog](https://github.com/rust-lang/libc/blob/0.2.183/CHANGELOG.md) - [Commits](rust-lang/libc@0.2.182...0.2.183) --- updated-dependencies: - dependency-name: libc dependency-version: 0.2.183 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
deps(deps): bump libc from 0.2.182 to 0.2.183
deps(deps): bump uuid from 1.21.0 to 1.22.0
…s-8.5.8 deps(deps-dev): bump postcss from 8.5.6 to 8.5.8
Bumps [turbo](https://github.com/vercel/turborepo) from 2.8.10 to 2.8.14. - [Release notes](https://github.com/vercel/turborepo/releases) - [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md) - [Commits](vercel/turborepo@v2.8.10...v2.8.14) --- updated-dependencies: - dependency-name: turbo dependency-version: 2.8.14 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [globals](https://github.com/sindresorhus/globals) from 17.3.0 to 17.4.0. - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](sindresorhus/globals@v17.3.0...v17.4.0) --- updated-dependencies: - dependency-name: globals dependency-version: 17.4.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
… actions - Updated the GitHub Actions workflow for marketing site deployment to prevent builds triggered by Dependabot and Renovate bots, improving deployment efficiency and reducing unnecessary builds.
…igest chore(deps): update swatinem/rust-cache digest to 779680d
- StickyHeader: render "NexaMesh" (was "Phoenix Rooivalk"), update Signal Amber color fallback - StickyHeader tests: update all getByText/queryByText assertions to NexaMesh - CalendarExport + TimelineSection: export filename phoenix-rooivalk-timeline → nexamesh-timeline - e2e test: page title regex updated to /NexaMesh|Kestrel|Sentinel/i - docs catalog: SkySnare → KestrelMesh, AeroNet → SentinelRing in types, names, object keys - docs tariffs: product names aligned to Kestrel Mesh / Sentinel Ring - packages: file header comments updated to NexaMesh - marketing + typescript rule: CLAUDE.md docs updated (theme name, package scope) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PhaseFilterContext: phase labels → Kestrel Mesh Launch, Sentinel Ring & DoD - export-products.test.ts: valid lines array updated to KestrelMesh/SentinelRing - Slide decks (4 files): SkySnare → Kestrel Mesh, AeroNet → Sentinel Ring - values.ts + calendar.tsx: brand name comments and event descriptions - Agent configs: package scope @nexamesh/types, product line names - known-emails.ts: old Azure hostname intentionally left (live dev endpoint) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…, type fixes Slide decks: - Video captions: "CO₂ pneumatic net launcher" → "edge AI-guided drone capture" - QA appendix: key points lead with edge AI/sub-200ms, safety secondary - QA demo script: AI detects first, pneumatic capture second - Lightning pitch opener: "CO₂ net launchers" → "edge AI detection, autonomous net capture, blockchain evidence" - Lightning pitch products: "point and shoot" → "edge AI detection, one-button neutralise" - Demo pitch tagline: "Pneumatic net launchers for training" → "Edge AI. Autonomous net capture. Blockchain evidence." - Regulatory backup slides: kept as-is (CO₂ = paintball = no permits is accurate legal fact) products.ts market positioning: - Kestrel Mesh: "$3.22B outdoor sports" → "$6.6B consumer counter-drone market" - NetSnare Lite: "DIY enthusiasts / Makers" → "Property owners / Small businesses / First responders" - NetSentry Lite: "DIY/Testing" → "System integrators / Security teams" Docs type fixes: - products/index.ts: skySnareProducts → kestrelMeshProducts, aeroNetProducts → sentinelRingProducts - roadmap.ts: "in-progress" → "in_progress" (type literal mismatch) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brand cleanup: - downloadWhitepaper.ts: Phoenix_Rooivalk → NexaMesh in download filename - AIBenefitsSection.tsx + UkraineChallengeSection.tsx: email subjects updated Positioning fixes: - ROI calculator: "Homeowners & hobbyists" → "Property owners & training facilities" - SkyWatch Nano: "backyard awareness, makers/hobbyists" → edge AI, training sites - Sentinel Ring Events: "concerts, sports, and festivals" → high-profile events/critical gatherings - FAQ: "drone racing leagues" → government agencies, airports, critical infrastructure operators - CapabilitiesSection: "flock of birds / light signals" metaphor → technical mesh autonomy description Case study: - Replace "Kestrel Mesh at the Drone Racing League" with power station deployment scenario (RF-denied, blockchain evidence chain, 90min deploy) Note: UkraineChallengeSection section content intentionally not modified — strategic positioning decision pending. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Color fixes: - InteractiveMesh: rgba(234,124,28) → Signal Amber rgba(199,122,27) - TeamSection.module.css: hardcoded #0066ff→#00ccff gradient → Signal Amber/Burnt Copper brand gradient UX: - FeaturesSection: add closing CTA row (Explore All Products + Preorder Now) using global .btn--primary / .btn--secondary classes Content: - UkraineChallengeSection: remove Ukraine/Russia/active-conflict framing → "The Autonomous Drone Threat Is Accelerating" — same urgency narrative, geopolitically neutral, no ITAR exposure - Problems: false positives, EW vulnerability, no swarm awareness - Solutions: multi-sensor fusion, RF-denied autonomy, deployable today - Quote: adversarial drone cost curve vs defender readiness gap - CTA email: personal → sales@nexamesh.ai - Section id: ukraine-challenge → autonomous-drone-threat Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Extract ProductLine, MarketTier, SystemType, ProductPhase, BaseProduct to packages/types/src/products.ts - Migrate docs catalog line values from PascalCase to kebab-case (SkyWatch→skywatch, KestrelMesh→kestrel, SentinelRing→sentinel-ring, etc.) - Update products.schema.json line enum to kebab-case - Split skywatch-thermal into budget/pro SKUs and skywatch-mesh into node/central SKUs to match docs catalog splits - Rename skysnare→kestrel and aeronet→sentinel-ring product lines - Add @nexamesh/types dependency + path alias to docs package Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add export const metadata to compliance pages (iso-27001, itar, security-clearance) by removing "use client" and using server wrappers - Split login and profile/confirm into server wrapper + client component so metadata can be exported - Fix stale ISO 27001 dates: Q4 2025→Q4 2026, Q2 2025→Q3 2026 - Add type="button" and aria-label to 3 contact page buttons - Add legal/privacy and legal/terms pages (server wrapper + client split) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Move useCountUp hook to packages/ui/src/hooks/ (was marketing-local) - Add safeGet/safeSet/safeRemove/safeClear to packages/utils/src/storage.ts - Add isValidEmail/isValidUrl to packages/utils/src/validators.ts - Delete dead local formatter.ts and downloadWhitepaper.ts from marketing - Update formatter importers to use @nexamesh/utils (2 components + test) - Wire CartContext and ThemeContext to use safeGet/safeSet from package - Wire docs localStorage.ts to use package storage helpers - Update download filename to NexaMesh_Technical_Whitepaper.md - Add @nexamesh/ui dependency to marketing; add moduleNameMapper to docs jest Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add MeshDivider and RadarRings UI components - Revise HeroSection, RevealSection, TimelineSection, CounterDroneMethodsSection - Navigation, FeaturesSection, ContactSection, HeroSection CSS updates - globals.css additions for shared layout tokens - Preorder page enhancements with updated module CSS - Footer, competitors, ROI calculator, products CSS fixes - wasm/manifest.json bump Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Brand alignment — 23 key constants across 12 files. Existing user onboarding state is intentionally cleared (keys don't migrate). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Validates that all docs products have valid ProductLine values, unique SKUs, positive pricing, and positive BOM totals. Documents the intentional split between docs (component specs) and marketing (purchasable bundles). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…o update npm (pnpm overrides): flatted 3.4.1 → 3.4.2 Prototype Pollution in parse() picomatch 2.3.1 → 2.3.2 Method injection + ReDoS via extglob picomatch 4.0.3 → 4.0.4 Method injection + ReDoS via extglob smol-toml 1.6.0 → 1.6.1 DoS via consecutive commented lines svgo 3.3.2 → 4.0.1 Billion Laughs DoS via DOCTYPE entity expansion undici 7.22.0 → 7.24.6 WebSocket overflow, CRLF injection, memory DoS yaml 2.8.2 → 2.8.3 Stack overflow via deeply nested collections Rust (cargo update): aws-lc-rs 1.16.1 → 1.16.2 aws-lc-sys 0.38.0 → 0.39.0 CRL scope check logic + X.509 Name Constraints bypass rustls-webpki 0.103.9 → 0.103.10 CRL Distribution Point matching logic Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- NexaMeshOrb: 8 concentric hexagons with counter-rotating animation groups, SVG feGaussianBlur bloom filter, brand amber neon glow - Hero restructured to left-copy / right-orb split layout (Graphite-style) - Mobile: orb hidden, text recentered - prefers-reduced-motion: all animations disabled Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- AnnouncementBar: dismissable preorder strip with live dot + amber CTA - TechStackSection: "Built on" strip — Rust, Azure, Solana, WASM, Edge AI, Blockchain - SimulatorShowcase: angled CSS-perspective product screenshot section - ThreatSimulatorDemo: dark tactical CSS module with amber accents - Wire all three sections into home.tsx above/below HeroSection - Playwright-captured simulator screenshot at 1440×900 for showcase Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Convert all infra/azure/modules/*.bicep to reusable Terraform modules
under infra/terraform/_modules/, wired together by the nexamesh-core
orchestrator and deployed via live/{dev,stg,prd}/nexamesh-core/.
New modules (each with main.tf / variables.tf / outputs.tf):
- keyvault — Key Vault (RBAC auth, soft delete)
- storage — Storage account + assets container + blob CORS
- appinsights — Log Analytics workspace + Application Insights
- cosmosdb — Cosmos DB account + nexamesh-docs DB + 12 containers
with partition keys, TTLs, and composite indexes
- notificationhub — Notification Hub namespace + hub + auth rules
- functions — Consumption/Premium Linux Function App (Node 20),
all 18 app settings, CORS, KV role assignment
- containerapps-env — Container Apps Environment (Consumption, mTLS)
- staticwebapp — Static Web App (Free/Standard SKU)
Orchestrator: _modules/nexamesh-core/ mirrors main.bicep exactly,
using v3.0 naming (nex-{env}-{product}-{resourcetype}).
Live Terragrunt configs: live/{dev,stg,prd}/nexamesh-core/terragrunt.hcl
Also adds:
- infra/terraform/.gitignore
- infra/terraform/scripts/bootstrap-tfstate.sh
- Fix: cosmosdb enable_free_tier defaults false (was incorrectly
inverted from use_serverless)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Dev: - Cosmos DB free tier (1000 RU/s + 25 GB free; one per subscription) - Notification Hub skipped (not wired yet) - Container Apps Env skipped (no containers deployed yet) Stg: - Cosmos DB serverless (pay-per-RU, scales to zero between runs) - Notification Hub + Container Apps Env skipped Prd: - Cosmos DB serverless (cheapest at current traffic levels) - Static Web Apps Free SKU (was Standard; upgrade when SLA needed) - Notification Hub Free SKU (1M pushes/month included) - Container Apps Env Consumption (scales to zero) Module changes: - nexamesh-core: add create_notification_hub, create_container_apps_env, enable_free_tier_cosmos variables; make hub + CAE conditional via count - cosmosdb: free tier forces use_serverless = false automatically - Outputs return null instead of crashing when optional resources skipped Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Serverless scales to zero between dev sessions — better fit than provisioned free tier when usage is sporadic. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- plan on every PR touching infra/terraform/** paths → posts formatted output as a sticky PR comment (updates in place on re-runs) - apply on push to dev (auto) + workflow_dispatch for manual prd deploys - OIDC auth (ARM_USE_OIDC=true, no long-lived credentials in runner) - bootstrap-tfstate.sh runs idempotently before init - GitHub Environments used for apply jobs (add reviewers to prd env in Settings → Environments to gate production deploys) - Provider cache keyed on module + root hcl hash to save minutes - All github.* context values passed via env: to avoid script injection Required GitHub Secrets: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID (OIDC) AZURE_ENTRA_TENANT_ID, AZURE_ENTRA_CLIENT_ID (TF vars) AZURE_OPENAI_API_KEY, AZURE_OPENAI_ENDPOINT (optional) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaced unverified SHAs with verified commit SHAs fetched from GitHub API. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
find_in_parent_folders() searches for 'terragrunt.hcl' by default. The misnamed root file caused ParentFileNotFoundError on every init. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Terragrunt 0.68 removed overwrite_terraformignore as a valid if_exists value for generate blocks. Use overwrite instead. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ling modules Without //, Terragrunt only copies nexamesh-core into the cache and the relative ../appinsights, ../cosmosdb etc. paths in main.tf resolve to missing directories. The // notation copies the entire _modules directory and uses nexamesh-core as the working subdirectory within it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ted credential The GitHub OIDC subject changes from ref:refs/heads/dev to environment:dev when environment: is set. The registered federated credential expects the ref subject. Re-enable environment: once a matching credential is added. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…osdb module Terraform 1.9+ requires single-line block definitions to have exactly one argument. The composite_index.index blocks had both path and order on one line, causing HCL parse errors during terraform init. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- containerapps-env: remove zone_redundancy_enabled (requires infrastructure_subnet_id) - keyvault: use nonsensitive(keys()) for for_each to allow sensitive map values - staticwebapp: remove repository_url and branch (not valid azurerm_static_web_app attrs) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add swa_location variable (default eastus2) — eastus doesn't support Microsoft.Web/staticSites - Switch staticwebapp module calls to var.swa_location - KV Secrets Officer role assigned out-of-band via az rest Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Azure Sponsorship subscriptions have Dynamic VM quota of 0, blocking Y1 Consumption plan creation. Gate Functions behind create_functions variable (default true) so dev can skip it until quota is raised. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
After terragrunt apply, capture the docs and marketing Static Web App deployment tokens from Terraform outputs and write them to GitHub Secrets (SWA_TOKEN_DOCS_DEV, SWA_TOKEN_MARKETING_DEV) using GITHUB_TOKEN. Also fix stale root.terragrunt.hcl path filter (renamed to terragrunt.hcl). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GITHUB_TOKEN cannot write repository secrets (not a valid permission). After apply, write SwaTokenDocs and SwaTokenMarketing to the provisioned Key Vault using az keyvault secret set. Deployment workflows retrieve them via OIDC + az keyvault secret show. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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.
Summary
infra/terraform/_modules/(Cosmos DB, Key Vault, Storage, App Insights, Static Web Apps, Functions, Container Apps, Notification Hub)SimulatorShowcase,TechStackSection,AnnouncementBarsections; NexaMeshOrb hero visual; layout and content refinementsDev infrastructure (live)
https://agreeable-meadow-08caf4a0f.6.azurestaticapps.nethttps://icy-sea-0e257aa0f.4.azurestaticapps.nethttps://nex-dev-docs-cosmos.documents.azure.com:443/https://nex-dev-shared-kv.vault.azure.net/Test plan
terragrunt initpasses in CIterragrunt applysucceeds for dev environmentnex-dev-shared-rgcreate_functions = true)🤖 Generated with Claude Code