Skip to content

Conversation

@yilmaztayfun
Copy link
Contributor

@yilmaztayfun yilmaztayfun commented Dec 3, 2025

Summary by Sourcery

Add configurable domain/component paths, introduce build and setup tooling, and enhance validation and schema alignment for the vNext template package.

New Features:

  • Introduce configurable component paths via vnext.config.json and expose them through new path-related APIs.
  • Add build tooling to generate reference and runtime domain packages with CLI options and npm scripts.
  • Add interactive/setup automation to initialize a domain and rewrite template placeholders.
  • Provide schema-aware JSON validation using @burgan-tech/vnext-schema with detailed, colorized reporting and statistics.

Enhancements:

  • Refactor core loaders and validation logic to respect configurable directory names and ignore metadata folders.
  • Improve validation and build output formatting for better readability in CI and local runs.
  • Align README and links with the example package usage, and streamline documentation toward configuration, validation, and build flows.
  • Adjust C# workflow rules to perform case-insensitive error code/category checks and minor mapping cleanup.

Build:

  • Replace external vNext CLI usage in CI with local npm-based build and validate commands, including new reference/runtime build scripts and flags.
  • Add build.js and sync-schema-version.js to drive packaging, validation integration, and schema dependency syncing.

CI:

  • Update GitHub workflow to rely on npm scripts for validation and building reference/runtime artifacts instead of the global vNext CLI.

Documentation:

  • Rewrite README to focus on architecture, configuration, validation, and build workflows, and update all links to the vnext-example package.

Tests:

  • Update tests to reflect configurable, capitalized component directory names when asserting available types.

Chores:

  • Add Mockoon helper artifacts and cursor configuration, and remove obsolete diagram JSONs and editor rule files from the repo.

Summary by CodeRabbit

  • New Features

    • Configuration-driven domain paths with customizable component directories
    • Enhanced validation with JSON schema support and detailed error reporting
    • Improved build workflow using npm scripts
  • Documentation

    • Comprehensive README overhaul with configuration examples, validation guidance, and build instructions
  • Chores

    • Updated runtime and schema versions (0.0.22 and 0.0.27 respectively)
    • Infrastructure updates for local development and testing

✏️ Tip: You can customize this high-level summary in your review settings.

middt and others added 10 commits December 2, 2025 13:17
ignore diagramfiles validation
remove create release branch
Added .cursor/rules/cursorrules.mdc and .cursorignore for improved Cursor AI rules and ignore patterns. Removed legacy .cursorrules. Updated README.md with new architecture, build, and validation instructions. Added build.js for domain packaging. Updated and added supporting scripts and configuration files. Various updates to core schemas, tasks, workflows, and mocks for vNext domain structure and testing.
Replaces global vNext CLI commands with local npm scripts for validation and build steps in the GitHub Actions workflow. Removes global installation of vNext CLI and updates commands to use 'npm run validate' and 'npm run build' with appropriate arguments.
Bump @burgan-tech/vnext-schema dependency from version 0.0.26 to 0.0.27 in package-lock.json for both dependencies and devDependencies.
Update @burgan-tech/vnext-schema to v0.0.27
Introduced a 'tags' array to the get-data-from-workflow.json for better categorization and filtering of the account opening workflow.
Add tags to account opening workflow config
@gitguardian
Copy link

gitguardian bot commented Dec 3, 2025

⚠️ GitGuardian has uncovered 1 secret following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secret in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
23099936 Triggered Generic High Entropy Secret c0b4930 mockoon/migration-api.json View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secret safely. Learn here the best practices.
  3. Revoke and rotate this secret.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@sourcery-ai
Copy link

sourcery-ai bot commented Dec 3, 2025

Reviewer's Guide

Introduces a configurable vNext domain template with build and setup tooling, schema-based validation, and improved CI integration while aligning the package with the example domain and updating docs/tests accordingly.

Sequence diagram for JSON schema validation in validate.js

sequenceDiagram
    actor Dev
    participant NPM as npm_script_validate
    participant Validate as validate_js
    participant Index as index_js_module
    participant Schema as vnext_schema_pkg
    participant AJV as Ajv_validator
    participant FS as file_system

    Dev->>NPM: run npm run validate
    NPM->>Validate: node validate_js

    Note over Validate: Syntax validation (existing)

    Validate->>Index: require index_js_module
    Index-->>Validate: getDomainName() and getPathsConfig()

    Validate->>Schema: require @burgan_tech_vnext_schema
    Schema-->>Validate: getAvailableTypes() and getSchema(type)

    Validate->>AJV: new Ajv(allErrors true, strict false, verbose true)
    Validate->>AJV: addFormats(ajv)

    loop for_each_schema_directory
        Validate->>FS: read JSON files under domain
        FS-->>Validate: file_contents
        Validate->>AJV: validator(json_data)
        alt valid
            Validate->>Validate: record_passed_file
        else invalid
            AJV-->>Validate: errors_list
            Validate->>Validate: formatErrorMessage(errors, include_line_numbers)
            Validate->>Validate: record_failed_file
        end
    end

    Validate->>Validate: print_schema_stats
    alt any_failed
        Validate->>NPM: exit with non_zero_code
    else all_passed
        Validate->>NPM: exit 0
    end

    NPM-->>Dev: show validation summary
Loading

Updated class diagram for the vNext template module and config

classDiagram
    class VnextTemplateModule {
      +getDomainConfig() Object
      +getPathsConfig() Object
      +getSchemas() Object
      +getWorkflows() Object
      +getTasks() Object
      +getViews() Object
      +getFunctions() Object
      +getExtensions() Object
      +getAvailableTypes() Array
      +getDomainName() string
      +getComponentPath(componentType string) string
    }

    class ConfigLoader {
      +loadConfig() Object
      +getPathsConfig() Object
    }

    class PathsConfig {
      +componentsRoot string
      +schemas string
      +workflows string
      +tasks string
      +views string
      +functions string
      +extensions string
    }

    class BuildTool {
      +parseArgs() Object
      +build() void
      +getPathsConfig() Object
      +findJsonFiles(dirPath string) Array
      +getAllFiles(dirPath string) Array
      +copyFile(src string, dest string) void
      +writeJsonFile(path string, data Object) void
    }

    class SetupTool {
      +isAlreadySetup() bool
      +getPathsConfig() Object
      +getDomainName() string
      +replaceInFile(filePath string, domainName string) bool
      +replaceInDirectory(dirPath string, domainName string) void
      +renameDomainDirectory(domainName string) bool
      +setup() void
    }

    class SchemaSyncTool {
      +syncSchemaVersion() void
    }

    VnextTemplateModule ..> ConfigLoader : uses
    VnextTemplateModule ..> PathsConfig : returns
    BuildTool ..> PathsConfig : uses
    SetupTool ..> PathsConfig : uses
    SchemaSyncTool ..> VnextTemplateModule : reads_config_indirectly
Loading

File-Level Changes

Change Details Files
Make component paths and domain discovery driven by vnext.config.json instead of hard-coded directory names.
  • Added config loading and getPathsConfig helpers to centralize path defaults and overrides.
  • Changed findDomainDirectory to use componentsRoot from configuration rather than scanning the filesystem.
  • Updated all component getter functions (schemas, workflows, tasks, views, functions, extensions) to resolve paths via the paths config.
  • Adjusted getAvailableTypes and tests to reflect case-sensitive directory names from configuration.
  • Added getComponentPath API to expose resolved component paths for a given type.
index.js
test.js
vnext.config.json
Add rich JSON schema validation for domain components using @burgan-tech/vnext-schema and enhance validation reporting.
  • Integrated Ajv and ajv-formats to perform schema validation over JSON component files.
  • Introduced helpers to map schema errors to file line numbers and format messages with colors, including handling of additionalProperty and missingProperty cases.
  • Added a new validation phase that loads vnext-schema, determines schema types per directory from pathsConfig, and validates each JSON file while skipping .meta folders.
  • Tracked per-file schema validation statistics and surfaced them in a summarized results section.
  • Improved final validation output formatting with colored counts and a detailed failed-files summary.
validate.js
package.json
Introduce a build system that produces reference and runtime packages based on configuration exports and domain structure.
  • Implemented build.js CLI with argument parsing for output directory, build type (reference/runtime), and optional validation skipping.
  • For reference builds, created domain structure under the configured domain name and copied only exported JSON components as declared in vnext.config.json.
  • For runtime builds, copied the full componentsRoot tree, processing JSON files and preserving non-JSON support files while skipping .meta directories.
  • Generated a trimmed package.json in the build output with build-type metadata and without dev-only fields.
  • Ensured build pipelines use the new build CLI instead of external vNext CLI, passing --skip-validation when validation already ran.
build.js
package.json
.github/workflows/build-and-publish.yml
vnext.config.json
Add project setup and schema-version synchronization utilities and expose CLI entry points.
  • Created setup.js to initialize a new domain by replacing a {domainName} placeholder across files and renaming the core directory, driven by pathsConfig.
  • Added sync-schema-version.js to read schemaVersion from vnext.config.json and keep @burgan-tech/vnext-schema dependency versions in sync.
  • Wired npm scripts for build, setup, validation, schema sync, and postinstall hooks to auto-run setup and schema version sync.
  • Exposed init/setup command-line binaries via the bin field for template initialization workflows.
setup.js
sync-schema-version.js
package.json
Adjust CI workflow to rely solely on local npm scripts for validation and builds and remove external vNext CLI dependency.
  • Removed global installation and usage of @burgan-tech/vnext-cli from the GitHub Actions workflow.
  • Replaced vnext validate with npm run validate and vnext build calls with npm run build invocations for both reference and runtime artifacts.
  • Ensured builds are invoked with --skip-validation in CI since validation is run explicitly beforehand.
.github/workflows/build-and-publish.yml
Refine documentation and metadata to describe the example domain, configuration, and build/validation workflows.
  • Overhauled README to focus on architecture principles, configuration (paths/exports), validation pipeline, build types, and available scripts, removing low-level API examples.
  • Updated README links to point to vnext-example package/repository instead of vnext-template.
  • Adjusted package.json scripts, files list, bin entries, and dependencies to match the new tooling and runtime usage.
README.md
package.json
Improve workflow rule scripts and add auxiliary tooling assets.
  • Fixed failure detection logic in AccountCreationFailedRule.csx and PoliciesFailedRule.csx to perform case-insensitive comparisons using Convert.ToString and StringComparer.OrdinalIgnoreCase.
  • Minorly cleaned InitialTransMapping.csx formatting.
  • Added Mockoon upload script and environment JSON for local API mocking, along with cursor configuration and ignore files.
  • Removed obsolete cursor rules and diagram JSONs that are no longer needed or are now treated as .meta and ignored during processing.
core/Workflows/account-opening/src/AccountCreationFailedRule.csx
core/Workflows/account-opening/src/PoliciesFailedRule.csx
core/Workflows/account-opening/src/InitialTransMapping.csx
mockoon/upload-to-mockoon.sh
mockoon/migration-api.json
.cursor/rules/cursorrules.mdc
.cursorignore
core/Workflows/oauth/.meta/password-subflow.diagram.json
core/Workflows/account-opening/.meta/account-opening-workflow.diagram.json
core/Workflows/oauth/.meta/oauth-authentication-workflow.diagram.json
mockoon/banking-api-mocks.json

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@yilmaztayfun yilmaztayfun merged commit 483da54 into master Dec 3, 2025
0 of 4 checks passed
@coderabbitai
Copy link

coderabbitai bot commented Dec 3, 2025

Caution

Review failed

The pull request is closed.

Walkthrough

This PR migrates the development and build infrastructure from a mock-server-based setup to a localhost configuration, introduces new orchestration scripts for building and validation, restructures documentation and configuration to be config-driven via vnext.config.json, adds state subtype metadata to workflows, enhances JSON schema validation, and replaces Mockoon's banking API mocks with a comprehensive migration configuration.

Changes

Cohort / File(s) Summary
Documentation & Cursor Configuration
.cursor/rules/cursorrules.mdc, .cursorignore, .cursorrules
Added comprehensive Cursor AI rules guidance document; added ignore patterns for build artifacts and IDE files; removed original .cursorrules file
Build & Validation Scripts
build.js, validate.js, setup.js, sync-schema-version.js
Introduced new orchestration scripts: build.js handles multi-stage packaging, validate.js adds schema validation with AJV, setup.js bootstraps project template with domain naming, sync-schema-version.js syncs schema version from config
CI/CD Workflow
.github/workflows/build-and-publish.yml
Replaced direct CLI invocations with npm script-based workflow; removed global vNext CLI installation; added --skip-validation flag to build steps
Documentation
README.md
Major restructuring from code-oriented usage guide to configuration-driven architecture documentation; added sections on validation, build types, configuration paths, and build output structure
Core Module
index.js
Migrated from dynamic domain discovery to config-driven path resolution using vnext.config.json; added getPathsConfig(), getComponentPath() methods; updated all component getters to use configured directories
Domain Schemas
core/Schemas/account-opening/*
Converted three schema files (account-confirmation.json, account-details-input.json, account-type-selection.json) from type: "object" to type: "workflow" with nested schema structure
Task Endpoint Updates
core/Tasks/account-opening/*, core/Tasks/oauth/*, core/Tasks/payments/*
Updated all task endpoint URLs from http://mockoon:3001 to http://localhost:3001 across 20+ task files; one task (get-data-from-workflow.json) also gained tags array
Workflow State Enhancements
core/Workflows/account-opening/account-opening-workflow.json, core/Workflows/oauth/oauth-authentication-workflow.json, core/Workflows/oauth/*-subflow.json, core/Workflows/payments/*
Added subType fields to state definitions across multiple workflows; added cancelation extension and initial transition mapping to account-opening workflow
Workflow Mapping Scripts
core/Workflows/account-opening/src/InitialTransMapping.csx, core/Workflows/account-opening/src/AccountCreationFailedRule.csx, core/Workflows/account-opening/src/PoliciesFailedRule.csx
Enhanced error handling with case-insensitive string comparison using StringComparer.OrdinalIgnoreCase; minor formatting adjustments
Workflow Diagram Metadata
core/Workflows/account-opening/.meta/account-opening-workflow.diagram.json, core/Workflows/oauth/.meta/oauth-authentication-workflow.diagram.json, core/Workflows/oauth/.meta/password-subflow.diagram.json
Removed two diagram metadata files; added one new password-subflow diagram metadata file with node positioning
Mockoon Configuration
mockoon/banking-api-mocks.json, mockoon/migration-api.json, mockoon/upload-to-mockoon.sh
Removed banking-api-mocks.json; added comprehensive migration-api.json with OAuth2, payment, and account-opening mock routes; added upload-to-mockoon.sh Bash script for deploying environments
Package Configuration
package.json, vnext.config.json
Updated vnext.config.json versions (runtimeVersion 0.0.20→0.0.22, schemaVersion 0.0.25→0.0.27); added bin entries (vnext-template, vnext-setup); expanded scripts (build, build:reference, build:runtime, setup, sync-schema, postinstall); updated files array; added @burgan-tech/vnext-schema dependency
Testing & Postman
test.js, postman/vNext Example Runtime.postman_collection.json
Updated test.js expectations for capitalized type strings; updated Postman baseUrl from mockoon to localhost

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Areas requiring extra attention:

  • build.js, validate.js, setup.js — New orchestration scripts with significant logic density; build.js handles multi-stage packaging with file copying and JSON rewriting; validate.js introduces schema validation with dynamic validator mapping; setup.js handles interactive domain configuration and file replacement
  • index.js — Core refactoring from hard-coded discovery to config-driven path resolution; impacts all component getter methods and could affect downstream consumers
  • validate.js enhancements — Complex validation pipeline with multiple stages (syntax, schema, module functionality); colorized output formatting and error attribution logic; requires verification of schema validation error handling
  • Workflow state changes — Widespread addition of subType metadata across 20+ state definitions in multiple workflow files; verify consistency of subType values and their intended semantics
  • Task endpoint updates — While repetitive, verify all 20+ endpoint URL changes are accurate and complete; ensure no task files were missed
  • Mockoon migration-api.json — Large, complex mock configuration file with nested routes, responses, and conditional rules; verify completeness and correctness of all mock endpoints and their payloads

Possibly related PRs

  • vnext-example#1 — Modifies core workflows and tasks (account-opening-workflow.json, get-data-from-workflow task) with similar workflow enhancement patterns and subprocess trigger mappings

Poem

🐰 The build pipeline hops through localhost now,
No mockoon delays—just swift config vow!
Schemas transform to workflows so bright,
Subtypes tag states with purposeful light,
Setup scripts scaffold domains with care,
Validation flows smooth through the air! 🎯

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release-v0.0

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 37ab750 and 136d210.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (57)
  • .cursor/rules/cursorrules.mdc (1 hunks)
  • .cursorignore (1 hunks)
  • .cursorrules (0 hunks)
  • .github/workflows/build-and-publish.yml (4 hunks)
  • README.md (2 hunks)
  • build.js (1 hunks)
  • core/Schemas/account-opening/account-confirmation.json (1 hunks)
  • core/Schemas/account-opening/account-details-input.json (1 hunks)
  • core/Schemas/account-opening/account-type-selection.json (1 hunks)
  • core/Tasks/account-opening/create-bank-account.json (1 hunks)
  • core/Tasks/account-opening/get-data-from-workflow.json (1 hunks)
  • core/Tasks/account-opening/validate-account-policies.json (1 hunks)
  • core/Tasks/oauth/check-device-registration.json (1 hunks)
  • core/Tasks/oauth/check-push-response.json (1 hunks)
  • core/Tasks/oauth/generate-tokens.json (1 hunks)
  • core/Tasks/oauth/register-device.json (1 hunks)
  • core/Tasks/oauth/send-otp-notification.json (1 hunks)
  • core/Tasks/oauth/send-push-notification.json (1 hunks)
  • core/Tasks/oauth/validate-authorization-code.json (1 hunks)
  • core/Tasks/oauth/validate-client.json (1 hunks)
  • core/Tasks/oauth/validate-user-credentials.json (1 hunks)
  • core/Tasks/oauth/verify-otp-code.json (1 hunks)
  • core/Tasks/payments/activate-payment-schedule.json (1 hunks)
  • core/Tasks/payments/archive-payment-record.json (1 hunks)
  • core/Tasks/payments/deactivate-payment-schedule.json (1 hunks)
  • core/Tasks/payments/get-user-info.json (1 hunks)
  • core/Tasks/payments/increment-retry-counter.json (1 hunks)
  • core/Tasks/payments/process-payment.json (1 hunks)
  • core/Tasks/payments/save-payment-configuration.json (2 hunks)
  • core/Tasks/payments/send-payment-notification-sms.json (1 hunks)
  • core/Tasks/payments/send-payment-push-notification.json (1 hunks)
  • core/Workflows/account-opening/.meta/account-opening-workflow.diagram.json (0 hunks)
  • core/Workflows/account-opening/account-opening-workflow.json (10 hunks)
  • core/Workflows/account-opening/src/AccountCreationFailedRule.csx (2 hunks)
  • core/Workflows/account-opening/src/InitialTransMapping.csx (1 hunks)
  • core/Workflows/account-opening/src/PoliciesFailedRule.csx (2 hunks)
  • core/Workflows/oauth/.meta/oauth-authentication-workflow.diagram.json (0 hunks)
  • core/Workflows/oauth/.meta/password-subflow.diagram.json (1 hunks)
  • core/Workflows/oauth/authorization-code-subflow.json (3 hunks)
  • core/Workflows/oauth/oauth-authentication-workflow.json (11 hunks)
  • core/Workflows/oauth/otp-mfa-subflow.json (6 hunks)
  • core/Workflows/oauth/password-subflow.json (3 hunks)
  • core/Workflows/oauth/push-notification-mfa-subflow.json (5 hunks)
  • core/Workflows/payments/payment-notification-subflow.json (3 hunks)
  • core/Workflows/payments/payment-process.json (6 hunks)
  • core/Workflows/payments/scheduled-payments-workflow.json (6 hunks)
  • index.js (3 hunks)
  • mockoon/banking-api-mocks.json (0 hunks)
  • mockoon/migration-api.json (1 hunks)
  • mockoon/upload-to-mockoon.sh (1 hunks)
  • package.json (2 hunks)
  • postman/vNext Example Runtime.postman_collection.json (1 hunks)
  • setup.js (1 hunks)
  • sync-schema-version.js (1 hunks)
  • test.js (1 hunks)
  • validate.js (7 hunks)
  • vnext.config.json (1 hunks)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey there - I've reviewed your changes and found some issues that need to be addressed.

  • In AccountCreationFailedRule.csx, the second block that checks failureCategory mistakenly converts errorCode instead of failureCategory to a string before comparing, which will cause critical category detection to behave incorrectly; this should use failureCategory in the Convert.ToString(...) call.
  • getDomainConfig in index.js now returns only the paths configuration instead of the full vnext.config.json (domain, exports, etc.), which is a behavioral change from the previous API and may break callers expecting the full domain config; consider either restoring the original behavior or adding a separate method for paths while keeping getDomainConfig as a thin wrapper around loadConfig.
  • In setup.js, several user-facing messages still include the literal $core (e.g. invalid DOMAIN_NAME error and setup completion text), which will confuse users of custom domain names; these should interpolate the actual domainName instead.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `AccountCreationFailedRule.csx`, the second block that checks `failureCategory` mistakenly converts `errorCode` instead of `failureCategory` to a string before comparing, which will cause critical category detection to behave incorrectly; this should use `failureCategory` in the `Convert.ToString(...)` call.
- `getDomainConfig` in `index.js` now returns only the paths configuration instead of the full `vnext.config.json` (domain, exports, etc.), which is a behavioral change from the previous API and may break callers expecting the full domain config; consider either restoring the original behavior or adding a separate method for paths while keeping `getDomainConfig` as a thin wrapper around `loadConfig`.
- In `setup.js`, several user-facing messages still include the literal `$core` (e.g. invalid DOMAIN_NAME error and setup completion text), which will confuse users of custom domain names; these should interpolate the actual `domainName` instead.

## Individual Comments

### Comment 1
<location> `core/Workflows/account-opening/src/AccountCreationFailedRule.csx:76-80` </location>
<code_context>
                     };
-                    
-                    failed = failed || failureCodes.Contains(errorCode.ToString());
+                    string code = Convert.ToString(errorCode);
+                    failed = failed || failureCodes.Contains(code, StringComparer.OrdinalIgnoreCase); 
                 }
</code_context>

<issue_to_address>
**issue (bug_risk):** The failure-category check now uses errorCode instead of failureCategory, which changes the logic and likely breaks the intended condition.

The updated check now compares `criticalCategories` against the error *code* instead of the failure *category*, which alters the rule’s behavior and is likely a bug.

This should still be based on `failureCategory` while using the case-insensitive comparison, for example:

```csharp
string category = Convert.ToString(failureCategory);
failed = failed || criticalCategories.Contains(category, StringComparer.OrdinalIgnoreCase);
```
</issue_to_address>

### Comment 2
<location> `setup.js:103-108` </location>
<code_context>
+  }
+  
+  // Check for environment variable (for npm install usage)
+  if (process.env.DOMAIN_NAME) {
+    const domainName = process.env.DOMAIN_NAME.trim();
+    if (validateDomainName(domainName)) {
+      return domainName;
+    } else {
+      console.error(`❌ Invalid domain name in DOMAIN_NAME environment variable: $core`);
+      process.exit(1);
+    }
</code_context>

<issue_to_address>
**issue (bug_risk):** Error message for invalid DOMAIN_NAME is hardcoded to `$core` instead of showing the actual invalid value.

This makes the log misleading and hides the actual value that failed validation. Please interpolate the `domainName` variable instead:

```js
console.error(`❌ Invalid domain name in DOMAIN_NAME environment variable: ${domainName}`);
```
</issue_to_address>

### Comment 3
<location> `setup.js:220` </location>
<code_context>
+  console.log('=======================\n');
+
+  // Get domain name from command line or prompt
+  const domainName = await getDomainName();
+  console.log(`\n📝 Setting up domain: $core\n`);
+
</code_context>

<issue_to_address>
**suggestion (bug_risk):** Several user-facing messages still hardcode `$core` instead of using the resolved domain name.

These console messages still print `$core` literally even though `domainName` is resolved dynamically. They should interpolate `domainName` instead, for example:

```js
console.log(`\n📝 Setting up domain: ${domainName}\n`);
...
console.log(`\nYour domain "${domainName}" is now configured.`);
```

Suggested implementation:

```javascript
  // Get domain name from command line or prompt

```

```javascript
console.log(`\n📝 Setting up domain: ${domainName}\n`);

```

There may be other messages in `setup.js` (for example ones that say something like `Your domain "$core" is now configured.`) that still hardcode `$core`. Those should be updated in the same way to interpolate `domainName`, e.g.:

- `console.log('... $core ...')```console.log(`... ${domainName} ...`)``
- `console.log("Your domain \"$core\" is now configured.")```console.log(`Your domain "${domainName}" is now configured.`)``

Search the file for the literal `$core` and replace those occurrences accordingly.
</issue_to_address>

### Comment 4
<location> `package.json:57-61` </location>
<code_context>
+        "vnext-setup": "setup.js",
+        "vnext-template": "init.js"
+      },
       "devDependencies": {
+        "@burgan-tech/vnext-schema": "^0.0.27",
         "ajv": "^8.12.0",
         "ajv-formats": "^2.1.1"
       },
</code_context>

<issue_to_address>
**suggestion:** @burgan-tech/vnext-schema is declared in both dependencies and devDependencies, which is redundant and may cause confusion.

Because this package is used at runtime (e.g., in validate.js, build.js), it only needs to be listed in `dependencies`. Please remove it from `devDependencies` to reflect its intended usage.

```suggestion
      "devDependencies": {
        "ajv": "^8.12.0",
        "ajv-formats": "^2.1.1"
      },
```
</issue_to_address>

### Comment 5
<location> `build.js:23-32` </location>
<code_context>
+  return `${colors[color]}${text}${colors.reset}`;
+}
+
+// Load vnext.config.json
+function loadConfig() {
+  try {
+    return JSON.parse(fs.readFileSync('vnext.config.json', 'utf8'));
+  } catch (error) {
+    return null;
+  }
+}
+
+// Get paths configuration with defaults
+function getPathsConfig() {
+  const config = loadConfig();
+  const defaults = {
</code_context>

<issue_to_address>
**suggestion:** Config-loading and paths logic duplicates what index.js already provides; centralizing this would reduce drift and maintenance overhead.

Both `build.js` and `index.js` now define `loadConfig` and `getPathsConfig` with essentially the same behavior, which increases maintenance cost and risk of divergence as config defaults or shape change.

Please import and reuse the existing helpers from `index.js` (or extract them into a shared module) so configuration and path resolution are defined in a single place.

Suggested implementation:

```javascript
  dim: '\x1b[2m'
};

const { loadConfig, getPathsConfig } = require('./index');

```

```javascript
function colorize(text, color) {
  return `${colors[color]}${text}${colors.reset}`;
}

```

1. Ensure `index.js` actually exports `loadConfig` and `getPathsConfig`, e.g.:
   - CommonJS: `module.exports = { loadConfig, getPathsConfig, ... };`
2. If `build.js` no longer uses `fs` directly after this refactor, you can safely remove its `fs` import to keep dependencies minimal.
</issue_to_address>

### Comment 6
<location> `test.js:63` </location>
<code_context>
 test('getAvailableTypes returns expected array', () => {
</code_context>

<issue_to_address>
**suggestion (testing):** Add a test case that verifies `getAvailableTypes` respects custom paths from `vnext.config.json`

The test currently only covers the default, hard-coded paths. Since `getAvailableTypes` now uses `getPathsConfig` (which can be overridden via `vnext.config.json`), please add a second test that:

1. Creates a temporary `vnext.config.json` with non-default paths (e.g. `{"paths": {"schemas": "DomainSchemas"}}`).
2. Reloads the module (clearing `require.cache` for `./index.js` and the config).
3. Asserts that `getAvailableTypes()` reflects the custom paths rather than the defaults.

This ensures the new config-driven behavior is exercised and guards against regressions in config loading.
</issue_to_address>

### Comment 7
<location> `README.md:110-118` </location>
<code_context>

-**Returns:** `Object` - Key-value pairs of task names and definitions
+This will check:
+- Package.json structure and content
+- Main entry point functionality
+- vnext.config.json validation
</code_context>

<issue_to_address>
**nitpick (typo):** Use the correct casing for the `package.json` filename.

Change `Package.json` to `package.json` to match the actual filename and the casing used elsewhere (e.g. `vnext.config.json`).

```suggestion
This will check:
- package.json structure and content
- Main entry point functionality
- vnext.config.json validation
- Domain directory structure
- JSON file syntax validation
- Schema validation using @burgan-tech/vnext-schema
- Module functionality
- Semantic versioning compliance
```
</issue_to_address>

### Comment 8
<location> `setup.js:38` </location>
<code_context>
  const componentsRoot = pathsConfig.componentsRoot;

</code_context>

<issue_to_address>
**suggestion (code-quality):** Prefer object destructuring when accessing and using properties. ([`use-object-destructuring`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/use-object-destructuring))

```suggestion
  const {componentsRoot} = pathsConfig;
```

<br/><details><summary>Explanation</summary>Object destructuring can often remove an unnecessary temporary reference, as well as making your code more succinct.

From the [Airbnb Javascript Style Guide](https://airbnb.io/javascript/#destructuring--object)
</details>
</issue_to_address>

### Comment 9
<location> `setup.js:161-169` </location>
<code_context>
      if (['.json', '.js', '.md', '.sh', '.txt', '.yml', '.yaml'].includes(ext) ||
          entry.name === '.gitignore' ||
          entry.name === '.gitattributes') {
        if (!processedFiles.has(relativePath)) {
          if (replaceInFile(fullPath, domainName)) {
            processedFiles.add(relativePath);
          }
        }
      }

</code_context>

<issue_to_address>
**suggestion (code-quality):** Merge nested if conditions ([`merge-nested-ifs`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/merge-nested-ifs))

```suggestion
      if ((['.json', '.js', '.md', '.sh', '.txt', '.yml', '.yaml'].includes(ext) ||
                entry.name === '.gitignore' ||
                entry.name === '.gitattributes') && !processedFiles.has(relativePath)) {
            if (replaceInFile(fullPath, domainName)) {
              processedFiles.add(relativePath);
            }
      }

```

<br/><details><summary>Explanation</summary>Reading deeply nested conditional code is confusing, since you have to keep track of which
conditions relate to which levels. We therefore strive to reduce nesting where
possible, and the situation where two `if` conditions can be combined using
`and` is an easy win.
</details>
</issue_to_address>

### Comment 10
<location> `setup.js:164-168` </location>
<code_context>
        if (!processedFiles.has(relativePath)) {
          if (replaceInFile(fullPath, domainName)) {
            processedFiles.add(relativePath);
          }
        }

</code_context>

<issue_to_address>
**suggestion (code-quality):** Merge nested if conditions ([`merge-nested-ifs`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/merge-nested-ifs))

```suggestion
        if (!processedFiles.has(relativePath) && replaceInFile(fullPath, domainName)) {
              processedFiles.add(relativePath);
        }

```

<br/><details><summary>Explanation</summary>Reading deeply nested conditional code is confusing, since you have to keep track of which
conditions relate to which levels. We therefore strive to reduce nesting where
possible, and the situation where two `if` conditions can be combined using
`and` is an easy win.
</details>
</issue_to_address>

### Comment 11
<location> `sync-schema-version.js:11` </location>
<code_context>
  const schemaVersion = vnextConfig.schemaVersion;

</code_context>

<issue_to_address>
**suggestion (code-quality):** Prefer object destructuring when accessing and using properties. ([`use-object-destructuring`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/use-object-destructuring))

```suggestion
  const {schemaVersion} = vnextConfig;
```

<br/><details><summary>Explanation</summary>Object destructuring can often remove an unnecessary temporary reference, as well as making your code more succinct.

From the [Airbnb Javascript Style Guide](https://airbnb.io/javascript/#destructuring--object)
</details>
</issue_to_address>

### Comment 12
<location> `validate.js:320-359` </location>
<code_context>
        if (!inString) {
          if (char === '{') {
            braceDepth++;
          } else if (char === '}') {
            braceDepth--;
            if (braceDepth < currentDepth) {
              // Reset path tracking when exiting a level
              if (pathIndex > 0 && braceDepth < pathIndex) {
                pathIndex = Math.max(0, pathIndex - 1);
              }
            }
          } else if (char === '[') {
            bracketDepth++;
            // Check if we're at an array index in the path
            if (pathIndex < pathParts.length && /^\d+$/.test(pathParts[pathIndex])) {
              const targetIndex = parseInt(pathParts[pathIndex], 10);
              if (arrayIndex === targetIndex && bracketDepth === 1) {
                pathIndex++;
                if (pathIndex === pathParts.length) {
                  return lineNum + 1;
                }
              }
            }
          } else if (char === ']') {
            bracketDepth--;
            if (bracketDepth === 0) {
              arrayIndex++;
            }
          } else if (char === ':' && currentKey) {
            currentKey = '';
          } else if (char.match(/[a-zA-Z0-9_]/) && !inString) {
            if (i === 0 || line[i-1] === '"' || (i > 0 && line[i-1].match(/[^a-zA-Z0-9_]/))) {
              currentKey += char;
            }
          }
        } else {
          if (char.match(/[a-zA-Z0-9_]/)) {
            currentKey += char;
          }
        }

</code_context>

<issue_to_address>
**suggestion (code-quality):** Merge else clause's nested if statement into `else if` ([`merge-else-if`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/merge-else-if))

```suggestion
        if (!inString) {
                  if (char === '{') {
                    braceDepth++;
                  } else if (char === '}') {
                    braceDepth--;
                    if (braceDepth < currentDepth) {
                      // Reset path tracking when exiting a level
                      if (pathIndex > 0 && braceDepth < pathIndex) {
                        pathIndex = Math.max(0, pathIndex - 1);
                      }
                    }
                  } else if (char === '[') {
                    bracketDepth++;
                    // Check if we're at an array index in the path
                    if (pathIndex < pathParts.length && /^\d+$/.test(pathParts[pathIndex])) {
                      const targetIndex = parseInt(pathParts[pathIndex], 10);
                      if (arrayIndex === targetIndex && bracketDepth === 1) {
                        pathIndex++;
                        if (pathIndex === pathParts.length) {
                          return lineNum + 1;
                        }
                      }
                    }
                  } else if (char === ']') {
                    bracketDepth--;
                    if (bracketDepth === 0) {
                      arrayIndex++;
                    }
                  } else if (char === ':' && currentKey) {
                    currentKey = '';
                  } else if (char.match(/[a-zA-Z0-9_]/) && !inString) {
                    if (i === 0 || line[i-1] === '"' || (i > 0 && line[i-1].match(/[^a-zA-Z0-9_]/))) {
                      currentKey += char;
                    }
                  }
                }
        else if (char.match(/[a-zA-Z0-9_]/)) {
                    currentKey += char;
                  }

```

<br/><details><summary>Explanation</summary>Flattening if statements nested within else clauses generates code that is
easier to read and expand upon.
</details>
</issue_to_address>

### Comment 13
<location> `validate.js:325-330` </location>
<code_context>
            if (braceDepth < currentDepth) {
              // Reset path tracking when exiting a level
              if (pathIndex > 0 && braceDepth < pathIndex) {
                pathIndex = Math.max(0, pathIndex - 1);
              }
            }

</code_context>

<issue_to_address>
**suggestion (code-quality):** Merge nested if conditions ([`merge-nested-ifs`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/merge-nested-ifs))

```suggestion
            if (braceDepth < currentDepth && (pathIndex > 0 && braceDepth < pathIndex)) {
                  pathIndex = Math.max(0, pathIndex - 1);
            }

```

<br/><details><summary>Explanation</summary>Reading deeply nested conditional code is confusing, since you have to keep track of which
conditions relate to which levels. We therefore strive to reduce nesting where
possible, and the situation where two `if` conditions can be combined using
`and` is an easy win.
</details>
</issue_to_address>

### Comment 14
<location> `validate.js:350-354` </location>
<code_context>
          } else if (char.match(/[a-zA-Z0-9_]/) && !inString) {
            if (i === 0 || line[i-1] === '"' || (i > 0 && line[i-1].match(/[^a-zA-Z0-9_]/))) {
              currentKey += char;
            }
          }

</code_context>

<issue_to_address>
**suggestion (code-quality):** Merge nested if conditions ([`merge-nested-ifs`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/merge-nested-ifs))

```suggestion
          } else if (char.match(/[a-zA-Z0-9_]/) && !inString && (i === 0 || line[i-1] === '"' || (i > 0 && line[i-1].match(/[^a-zA-Z0-9_]/)))) {
                       currentKey += char;
                 }

```

<br/><details><summary>Explanation</summary>Reading deeply nested conditional code is confusing, since you have to keep track of which
conditions relate to which levels. We therefore strive to reduce nesting where
possible, and the situation where two `if` conditions can be combined using
`and` is an easy win.
</details>
</issue_to_address>

### Comment 15
<location> `validate.js:381` </location>
<code_context>
  let message = err.message;

</code_context>

<issue_to_address>
**suggestion (code-quality):** Prefer object destructuring when accessing and using properties. ([`use-object-destructuring`](https://docs.sourcery.ai/Reference/Rules-and-In-Line-Suggestions/JavaScript/Default-Rules/use-object-destructuring))

```suggestion
  let {message} = err;
```

<br/><details><summary>Explanation</summary>Object destructuring can often remove an unnecessary temporary reference, as well as making your code more succinct.

From the [Airbnb Javascript Style Guide](https://airbnb.io/javascript/#destructuring--object)
</details>
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment on lines +76 to 80
string code = Convert.ToString(errorCode);
failed = failed || failureCodes.Contains(code, StringComparer.OrdinalIgnoreCase);
}

// Check failure category
Copy link

Choose a reason for hiding this comment

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

issue (bug_risk): The failure-category check now uses errorCode instead of failureCategory, which changes the logic and likely breaks the intended condition.

The updated check now compares criticalCategories against the error code instead of the failure category, which alters the rule’s behavior and is likely a bug.

This should still be based on failureCategory while using the case-insensitive comparison, for example:

string category = Convert.ToString(failureCategory);
failed = failed || criticalCategories.Contains(category, StringComparer.OrdinalIgnoreCase);

@gemini-code-assist
Copy link

Summary of Changes

Hello @yilmaztayfun, 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 significantly refines the vNext workflow development environment by introducing comprehensive documentation, new build and setup tooling, and improved validation mechanisms. It standardizes development practices, updates API mocking configurations, and cleans up project metadata, all aimed at streamlining workflow creation, ensuring consistency, and enhancing the overall developer experience.

Highlights

  • Comprehensive Development Guide: A new detailed guide for vNext workflow development (.cursor/rules/cursorrules.mdc) has been added, covering component structure, API mocking, HTTP request files, core concepts, creation rules, code standards, validation, and common pitfalls. This replaces the previous, less detailed .cursorrules file.
  • New Build and Setup Tooling: New Node.js scripts (build.js, setup.js, sync-schema-version.js) have been introduced to streamline the development workflow. These scripts handle package building (runtime and reference types), initial project setup with domain naming, and synchronization of schema versions.
  • Enhanced Validation and Error Reporting: The validate.js script has been significantly enhanced to include detailed schema validation using AJV, improved error reporting with line numbers, and colorized output for better readability and debugging. This ensures stricter adherence to defined schemas across all components.
  • API Mocking and Configuration Updates: The Mockoon API configurations have been updated and reorganized. The mockoon/banking-api-mocks.json file was removed and replaced by mockoon/migration-api.json, which includes a new domain-organized structure. All task files (core/Tasks/**/*.json) were updated to point to http://localhost:3001 for Mockoon endpoints.
  • Workflow Structure and Logic Refinements: Workflow definitions (core/Workflows/**/*.json) received updates including the addition of a cancel transition in the account opening workflow and subType properties to states. C# mapping files (.csx) were also updated to use case-insensitive string comparisons for improved robustness.
  • Project Metadata and Dependency Management: The package.json and package-lock.json files were updated to reflect changes in the package name, version, and dependencies. The project now explicitly lists @burgan-tech/vnext-schema as a dependency, and the vnext.config.json file has updated runtime and schema versions.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/build-and-publish.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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

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

@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 introduces a significant set of changes for the v0.0 release, including new build and setup tooling, configurable component paths, and enhanced validation. The refactoring of the core logic and documentation greatly improves the project's architecture and developer experience. My review has identified one critical bug in a C# workflow rule and a few medium-severity issues in the new documentation and setup script. Overall, these are excellent improvements.

Comment on lines +91 to +92
string code = Convert.ToString(errorCode);
failed = failed || criticalCategories.Contains(code, StringComparer.OrdinalIgnoreCase);

Choose a reason for hiding this comment

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

critical

There appears to be a copy-paste error in this logic. You are checking the failureCategory, but you are converting and using the errorCode variable from the previous check. This will lead to incorrect logic for evaluating the failure category. You should be converting and using the failureCategory variable.

                    string categoryCode = Convert.ToString(failureCategory);
                    failed = failed || criticalCategories.Contains(categoryCode, StringComparer.OrdinalIgnoreCase); 

- Use semantic versioning

3. **Create Mockoon mocks** (for external APIs):
- Add all external API endpoints to `mockoon/banking-api-mocks.json`

Choose a reason for hiding this comment

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

medium

The documentation refers to an outdated mock file mockoon/banking-api-mocks.json. This file has been replaced by mockoon/migration-api.json. Please update the reference to maintain consistency. Similar outdated references exist on lines 556 and 608.

   - Add all external API endpoints to `mockoon/migration-api.json`

- Determine flow vs subflow vs subprocess usage

4. **Create Mockoon mocks** (for external APIs):
- Add API endpoints to `mockoon/banking-api-mocks.json`

Choose a reason for hiding this comment

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

medium

The documentation refers to an outdated mock file mockoon/banking-api-mocks.json. This file has been replaced by mockoon/migration-api.json. Please update the reference to maintain consistency.

   - Add API endpoints to `mockoon/migration-api.json`

- **Validation Tool**: Run `npm run validate` after any changes

### Testing & Mocking
- **Mock APIs**: `mockoon/banking-api-mocks.json` - External API mocks (port 3001)

Choose a reason for hiding this comment

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

medium

The documentation refers to an outdated mock file mockoon/banking-api-mocks.json. This file has been replaced by mockoon/migration-api.json. Please update the reference to maintain consistency.

- **Mock APIs**: `mockoon/migration-api.json` - External API mocks (port 3001)

if (validateDomainName(domainName)) {
return domainName;
} else {
console.error(`❌ Invalid domain name in DOMAIN_NAME environment variable: $core`);

Choose a reason for hiding this comment

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

medium

The log message uses a static string $core instead of the actual domain name from the environment variable. This will result in a confusing log message for the user. Please use the process.env.DOMAIN_NAME variable in the template literal.

Suggested change
console.error(`❌ Invalid domain name in DOMAIN_NAME environment variable: $core`);
console.error(`❌ Invalid domain name in DOMAIN_NAME environment variable: ${process.env.DOMAIN_NAME}`);


// Get domain name from command line or prompt
const domainName = await getDomainName();
console.log(`\n📝 Setting up domain: $core\n`);

Choose a reason for hiding this comment

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

medium

The log message uses a static string $core instead of the domainName variable. This will result in a confusing log message for the user. Please use the actual domain name variable in the template literal.

Suggested change
console.log(`\n📝 Setting up domain: $core\n`);
console.log(`\n📝 Setting up domain: ${domainName}\n`);

renameDomainDirectory(domainName);

console.log('\n✅ Setup complete!');
console.log(`\nYour domain "$core" is now configured.`);

Choose a reason for hiding this comment

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

medium

The log message uses a static string $core instead of the domainName variable. This will result in a confusing log message for the user. Please use the actual domain name variable in the template literal.

Suggested change
console.log(`\nYour domain "$core" is now configured.`);
console.log(`\nYour domain "${domainName}" is now configured.`);

@coderabbitai coderabbitai bot mentioned this pull request Dec 16, 2025
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.

3 participants