Skip to content

[#2401] Added drupal_helpers, generated_content, and testmode modules#2414

Merged
AlexSkrypnyk merged 19 commits intomainfrom
feature/demo-modules
Mar 24, 2026
Merged

[#2401] Added drupal_helpers, generated_content, and testmode modules#2414
AlexSkrypnyk merged 19 commits intomainfrom
feature/demo-modules

Conversation

@AlexSkrypnyk
Copy link
Copy Markdown
Member

@AlexSkrypnyk AlexSkrypnyk commented Mar 24, 2026

Summary by CodeRabbit

  • New Features

    • Added an Articles listing page at /articles, demo-generated articles and tags, and an automatic Articles menu link during deploy
    • Demo-generated content plugins to seed article and tag content
  • Documentation

    • New guides: Drupal helpers, Generated content, Demo module, and Testmode usage
  • Tests

    • Added acceptance test for Articles listing; expanded feature tagging and improved demo test cleanup
  • Chores

    • Declared module dependencies and updated package requirements

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 24, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a Drupal demo module (ys_demo) with Generated Content plugins, an Articles view, deploy hooks, Behat tests, docs, and composer dependencies; updates installer to remove demo-tagged Behat features; and inserts a top-priority rule forbidding compound Bash commands in agent instruction files.

Changes

Cohort / File(s) Summary
AI Instructions & Agent Docs
AGENTS.md, .vortex/CLAUDE.md, .vortex/docs/cspell.json
Added a top-priority rule forbidding compound Bash constructs for Bash tool calls and added testmode to docs spellchecker.
Documentation (Drupal)
.vortex/docs/content/drupal/drupal-helpers.mdx, .vortex/docs/content/drupal/generated-content.mdx, .vortex/docs/content/drupal/module-scaffold.mdx, .vortex/docs/content/drupal/test-mode.mdx
New MDX pages documenting drupal_helpers, generated_content, ys_demo scaffold, and testmode usage with examples and deploy hooks.
Composer / Dependencies
composer.json
Added Drupal dependencies: drupal/drupal_helpers (^2.0), drupal/generated_content (^2.0), drupal/testmode (^2.6).
Installer handler
.vortex/installer/src/Prompts/Handlers/CustomModules.php
Replaced hard-coded Behat cleanup with removeDemoBehatFeatures(string $dir) that finds and deletes *.feature files whose first line contains @demo.
Behat features
tests/behat/features/articles.feature, tests/behat/features/counter.feature
Added articles.feature (tags: @articles, @demo, @p1; scenario uses @testmode); added @demo tag to counter.feature.
ys_demo module: config & code
web/modules/custom/ys_demo/ys_demo.info.yml, web/modules/custom/ys_demo/config/install/views.view.ys_demo_articles.yml, web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Node/Article.php, web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php, web/modules/custom/ys_demo/ys_demo.deploy.php
Declared module dependencies; added Articles view at /articles; added GeneratedContent plugins (Tags, Article) creating terms and nodes; added deploy hooks to create a menu link and configure Testmode.

Sequence Diagram(s)

sequenceDiagram
  participant Deploy as "ys_demo.deploy.php"
  participant Helper as "drupal_helpers\Facade"
  participant Testmode as "Testmode Service"
  participant Drupal as "Drupal (Menu/Config/DB)"

  Deploy->>Helper: findItem('main','Articles')
  alt not found
    Deploy->>Helper: createTree('main', ['Articles'=>'/articles'])
    Helper->>Drupal: persist menu link entity
  end
  Deploy->>Testmode: getInstance(), getNodeViews()
  Testmode->>Drupal: read/write testmode config (node views)
  Testmode->>Drupal: persist updated config
  Deploy->>Drupal: return status string
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 I hopped through helpers, seeds in paw,

I planted tags and articles with awe,
Testmode hides the rest and shows the test,
A menu link leads readers to the best,
Hooray — the demo garden's ready to explore!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding three Drupal modules (drupal_helpers, generated_content, testmode) to the project.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/demo-modules

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

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

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

Inline comments:
In @.vortex/CLAUDE.md:
- Line 1: Change the first-line heading "## HIGHEST PRIORITY RULE — Bash
Commands" to an H1 by replacing the leading "##" with a single "#" so the
document starts with "# HIGHEST PRIORITY RULE — Bash Commands" to satisfy
markdownlint MD041; ensure no other leading blank lines precede this heading.

In @.vortex/installer/src/Prompts/Handlers/CustomModules.php:
- Around line 236-237: Replace the loose str_contains check with a
token-boundary regex so tags like "@demo2" don't match; instead of
str_contains($first_line, '@demo') use preg_match('/(^|\\s)@demo\\b/',
$first_line) (or an equivalent word-boundary pattern) and only call
File::remove($file) when that preg_match succeeds, referencing the existing
$first_line and File::remove($file) locations.

In `@AGENTS.md`:
- Line 1: The first line of AGENTS.md uses a level-2 header ("## HIGHEST
PRIORITY RULE — Bash Commands") which triggers markdownlint rule MD041; change
that top-level header to an H1 by replacing the "##" with a single "#" so the
document begins with "# HIGHEST PRIORITY RULE — Bash Commands" (update the
header text only, leaving the rest of the file unchanged).

In `@tests/behat/features/articles.feature`:
- Around line 10-17: Add a non-test article row to the "Given article content"
table so the negative assertion proves filtering: update the data table used by
the Given article content step to include a third row with title "Demo article"
(and matching status value used for visible articles, e.g., 1) alongside the two
"[TEST] ..." rows, then keep the existing checks that assert the two test
articles are visible and that "Demo article" is not visible; this ensures the
step definitions that seed articles (the Given article content table and the
titles "[TEST] First test article", "[TEST] Second test article", "Demo
article") are exercised for filtering behavior.

In `@web/modules/custom/ys_demo/ys_demo.deploy.php`:
- Line 85: The in_array call checking for 'ys_demo_articles' in $views should
use strict comparison to avoid type coercion; update the expression in
ys_demo.deploy.php where in_array('ys_demo_articles', $views) is used to include
the third argument true (i.e., in_array('ys_demo_articles', $views, true)) so
the check uses strict === semantics against $views.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e35674bf-5d56-4c7a-8bb8-5947379701dd

📥 Commits

Reviewing files that changed from the base of the PR and between 2161a4c and 536b76e.

⛔ Files ignored due to path filters (103)
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/tests/behat/features/articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/tests/behat/features/counter.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/config/install/views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/sw_demo.deploy.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/sw_demo.info.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_no_demo/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_no_demo/web/modules/custom/sw_demo/config/install/-views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_no_demo/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/-Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_no_demo/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/-Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_none/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_none/web/modules/custom/sw_demo/config/install/-views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_none/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/-Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_none/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/-Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/custom_modules_search_without_solr/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/config/install/views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/sw_demo.deploy.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/sw_demo.info.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/web/modules/custom/sw_demo/config/install/-views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/-Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/-Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/config/install/views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/sw_demo.deploy.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/sw_demo.info.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/web/modules/custom/sw_demo/config/install/-views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/-Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/-Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_disabled_lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_download_source_acquia/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_download_source_ftp/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_download_source_lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_download_source_s3/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_download_source_url/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_enabled/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_enabled_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/migration_enabled_lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_config_update/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_environment_indicator/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_pathauto/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_redirect/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_robotstxt/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_seckit/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_seckit_shield_stage_file_proxy/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_shield/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_no_stage_file_proxy/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/modules_none/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/sw_demo/config/install/-views.view.sw_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/-Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/-Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/config/install/views.view.the_force_demo_articles.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/the_force_demo.deploy.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/the_force_demo.info.yml is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/non_interactive_config_file/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/provision_database_lagoon/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/services_no_redis/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/services_no_solr/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/services_none/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/starter_drupal_cms_profile/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_lint_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpcs_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpmd_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpstan_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_rector/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_rector_circleci/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_none/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_none/composer.json is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_none/tests/behat/features/-articles.feature is excluded by !.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (16)
  • .vortex/CLAUDE.md
  • .vortex/docs/content/drupal/drupal-helpers.mdx
  • .vortex/docs/content/drupal/generated-content.mdx
  • .vortex/docs/content/drupal/module-scaffold.mdx
  • .vortex/docs/content/drupal/test-mode.mdx
  • .vortex/docs/cspell.json
  • .vortex/installer/src/Prompts/Handlers/CustomModules.php
  • AGENTS.md
  • composer.json
  • tests/behat/features/articles.feature
  • tests/behat/features/counter.feature
  • web/modules/custom/ys_demo/config/install/views.view.ys_demo_articles.yml
  • web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Node/Article.php
  • web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php
  • web/modules/custom/ys_demo/ys_demo.deploy.php
  • web/modules/custom/ys_demo/ys_demo.info.yml

@@ -1,3 +1,24 @@
## HIGHEST PRIORITY RULE — Bash Commands
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Fix first-line heading level (MD041).

First line should be an H1 to satisfy markdownlint.

Suggested fix
-## HIGHEST PRIORITY RULE — Bash Commands
+# HIGHEST PRIORITY RULE — Bash Commands
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 1-1: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

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

In @.vortex/CLAUDE.md at line 1, Change the first-line heading "## HIGHEST
PRIORITY RULE — Bash Commands" to an H1 by replacing the leading "##" with a
single "#" so the document starts with "# HIGHEST PRIORITY RULE — Bash Commands"
to satisfy markdownlint MD041; ensure no other leading blank lines precede this
heading.

Comment on lines +236 to +237
if ($first_line !== FALSE && str_contains($first_line, '@demo')) {
File::remove($file);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Tighten @demo matching to avoid accidental deletions.

str_contains(..., '@demo') also matches tags like @demo2. Use token-boundary matching instead.

Suggested fix
-      if ($first_line !== FALSE && str_contains($first_line, '@demo')) {
+      if ($first_line !== FALSE && preg_match('/(^|\s)@demo(\s|$)/', $first_line) === 1) {
         File::remove($file);
       }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if ($first_line !== FALSE && str_contains($first_line, '@demo')) {
File::remove($file);
if ($first_line !== FALSE && preg_match('/(^|\s)@demo(\s|$)/', $first_line) === 1) {
File::remove($file);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.vortex/installer/src/Prompts/Handlers/CustomModules.php around lines 236 -
237, Replace the loose str_contains check with a token-boundary regex so tags
like "@demo2" don't match; instead of str_contains($first_line, '@demo') use
preg_match('/(^|\\s)@demo\\b/', $first_line) (or an equivalent word-boundary
pattern) and only call File::remove($file) when that preg_match succeeds,
referencing the existing $first_line and File::remove($file) locations.

@@ -1,3 +1,24 @@
## HIGHEST PRIORITY RULE — Bash Commands
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use a top-level heading on the first line to satisfy markdownlint.

## on the first line triggers MD041; make it an H1.

Suggested fix
-## HIGHEST PRIORITY RULE — Bash Commands
+# HIGHEST PRIORITY RULE — Bash Commands
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## HIGHEST PRIORITY RULE — Bash Commands
# HIGHEST PRIORITY RULE — Bash Commands
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 1-1: First line in a file should be a top-level heading

(MD041, first-line-heading, first-line-h1)

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

In `@AGENTS.md` at line 1, The first line of AGENTS.md uses a level-2 header ("##
HIGHEST PRIORITY RULE — Bash Commands") which triggers markdownlint rule MD041;
change that top-level header to an H1 by replacing the "##" with a single "#" so
the document begins with "# HIGHEST PRIORITY RULE — Bash Commands" (update the
header text only, leaving the rest of the file unchanged).

Comment on lines +10 to +17
Given article content:
| title | status |
| [TEST] First test article | 1 |
| [TEST] Second test article | 1 |
When I visit "/articles"
Then I should see "[TEST] First test article"
And I should see "[TEST] Second test article"
And I should not see "Demo article"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Scenario does not prove filtering of non-test content.

This test never seeds a non-test article, so I should not see "Demo article" can pass trivially and miss regressions in testmode filtering.

Suggested fix
     Given article content:
       | title                      | status |
       | [TEST] First test article  | 1      |
       | [TEST] Second test article | 1      |
+      | Demo article               | 1      |
     When I visit "/articles"
     Then I should see "[TEST] First test article"
     And I should see "[TEST] Second test article"
     And I should not see "Demo article"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Given article content:
| title | status |
| [TEST] First test article | 1 |
| [TEST] Second test article | 1 |
When I visit "/articles"
Then I should see "[TEST] First test article"
And I should see "[TEST] Second test article"
And I should not see "Demo article"
Given article content:
| title | status |
| [TEST] First test article | 1 |
| [TEST] Second test article | 1 |
| Demo article | 1 |
When I visit "/articles"
Then I should see "[TEST] First test article"
And I should see "[TEST] Second test article"
And I should not see "Demo article"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/behat/features/articles.feature` around lines 10 - 17, Add a non-test
article row to the "Given article content" table so the negative assertion
proves filtering: update the data table used by the Given article content step
to include a third row with title "Demo article" (and matching status value used
for visible articles, e.g., 1) alongside the two "[TEST] ..." rows, then keep
the existing checks that assert the two test articles are visible and that "Demo
article" is not visible; this ensures the step definitions that seed articles
(the Given article content table and the titles "[TEST] First test article",
"[TEST] Second test article", "Demo article") are exercised for filtering
behavior.

$testmode = Testmode::getInstance();

$views = $testmode->getNodeViews();
if (!in_array('ys_demo_articles', $views)) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Use strict comparison with in_array().

The in_array() call lacks the third $strict parameter. While this works correctly for string arrays, using strict comparison is a best practice to prevent unexpected type coercion issues.

Suggested fix
-  if (!in_array('ys_demo_articles', $views)) {
+  if (!in_array('ys_demo_articles', $views, TRUE)) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (!in_array('ys_demo_articles', $views)) {
if (!in_array('ys_demo_articles', $views, TRUE)) {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@web/modules/custom/ys_demo/ys_demo.deploy.php` at line 85, The in_array call
checking for 'ys_demo_articles' in $views should use strict comparison to avoid
type coercion; update the expression in ys_demo.deploy.php where
in_array('ys_demo_articles', $views) is used to include the third argument true
(i.e., in_array('ys_demo_articles', $views, true)) so the check uses strict ===
semantics against $views.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In @.vortex/installer/src/Prompts/Handlers/CustomModules.php:
- Around line 206-227: The method removeDemoBehatFeatures currently uses
File::findContainingInDir which does loose substring matching; change the
implementation to filter files using a word-boundary regex (e.g.
preg_match('/@demo\b/', $contents)) so tags like `@demo2` won't match, and update
the method docblock to accurately state that files are scanned for the `@demo` tag
anywhere in the file (not just the first line); reference the
removeDemoBehatFeatures method and File::findContainingInDir/ File::remove when
making the change.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 91e8fa07-e5de-449d-bc0f-b7a835ecefd6

📥 Commits

Reviewing files that changed from the base of the PR and between 536b76e and 5b23845.

⛔ Files ignored due to path filters (11)
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_none/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (3)
  • .vortex/CLAUDE.md
  • .vortex/installer/src/Prompts/Handlers/CustomModules.php
  • AGENTS.md

Comment on lines +206 to +227
/**
* Remove Behat feature files tagged with @demo.
*
* Scans the Behat features directory for .feature files whose first line
* contains the @demo tag and removes them.
*
* @param string $dir
* The base directory to search in.
*/
protected static function removeDemoBehatFeatures(string $dir): void {
$features_dir = $dir . '/tests/behat/features';

if (!is_dir($features_dir)) {
return;
}

$files = File::findContainingInDir($features_dir, '@demo');

foreach ($files as $file) {
File::remove($file);
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify File::findContainingInDir implementation for matching behavior

# Find the File utility class
fd -t f "File.php" --exec grep -l "findContainingInDir" {} \;

# Show the implementation
ast-grep --pattern $'function findContainingInDir($$$) {
  $$$
}'

# Alternative: search for the method implementation with context
rg -n -A 30 'function findContainingInDir' --type php

Repository: drevops/vortex

Length of output: 40


🏁 Script executed:

# First, let's look at the CustomModules.php file to understand the context
cat -n ".vortex/installer/src/Prompts/Handlers/CustomModules.php" | head -50

Repository: drevops/vortex

Length of output: 1582


🏁 Script executed:

# Search for File class references in the codebase
rg -n "class File" --type php

Repository: drevops/vortex

Length of output: 40


🏁 Script executed:

# Search for findContainingInDir method anywhere in the repository
rg -n "findContainingInDir" --type php

Repository: drevops/vortex

Length of output: 40


🏁 Script executed:

# Check imports in CustomModules.php
rg -n "use.*File" ".vortex/installer/src/Prompts/Handlers/CustomModules.php"

Repository: drevops/vortex

Length of output: 99


🏁 Script executed:

# Find the File.php in the Utils directory
fd -t f "File.php" -p "*Utils*"

Repository: drevops/vortex

Length of output: 152


🏁 Script executed:

# List all methods in the File class
find ".vortex/installer/src/Utils" -name "File.php" -exec cat {} \;

Repository: drevops/vortex

Length of output: 3574


🏁 Script executed:

# Search for all method definitions in File class
rg -n "public|protected|private" ".vortex/installer/src/Utils/File.php" | grep -E "(function|public|protected|private)"

Repository: drevops/vortex

Length of output: 542


🌐 Web query:

AlexSkrypnyk\File\File findContainingInDir method documentation

💡 Result:

AlexSkrypnyk\File\File::findContainingInDir() (package alexskrypnyk/file) finds all files under a directory whose contents contain a given string/regex (it delegates the per-file check to File::contains()). (raw.githubusercontent.com)

Signature

public static function findContainingInDir(
  string $directory,
  string $needle,
  array $excluded = []
): array

(raw.githubusercontent.com)

Parameters

Return

Citations:


🌐 Web query:

AlexSkrypnyk\File\File::contains() method string matching behavior

💡 Result:

AlexSkrypnyk\File\File::contains($file, $needle) behaves like this:

  • If $file doesn’t exist or isn’t readable, it returns false. Also returns false if the file content is '' or exactly '0'. [1]
  • If $needle is detected as a regex (string starts with a common PCRE delimiter / # ~ @ %, ends with the same delimiter, may have modifiers, and successfully compiles), it does preg_match($needle, $content) and returns whether it matched anywhere in the file. [1][2]
  • Otherwise it does a plain substring check via PHP str_contains($content, $needle) (case-sensitive, no wildcard/pattern semantics). [1]

Sources: [1] [2]


Fix docblock and add word-boundary validation for @demo tag matching.

Two issues confirmed:

  1. Loose substring matching: File::findContainingInDir('@demo') uses str_contains() internally, which will match @demo2, @demo_feature, or any other tag containing @demo as a substring. Use a regex pattern like /@demo\b/ to restrict matching to word boundaries.

  2. Docblock inaccuracy: The docblock states the method checks "whose first line contains the @demo tag," but File::findContainingInDir searches the entire file without first-line restriction. Either correct the docblock or add explicit first-line checking before passing to the utility method.

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

In @.vortex/installer/src/Prompts/Handlers/CustomModules.php around lines 206 -
227, The method removeDemoBehatFeatures currently uses File::findContainingInDir
which does loose substring matching; change the implementation to filter files
using a word-boundary regex (e.g. preg_match('/@demo\b/', $contents)) so tags
like `@demo2` won't match, and update the method docblock to accurately state that
files are scanned for the `@demo` tag anywhere in the file (not just the first
line); reference the removeDemoBehatFeatures method and
File::findContainingInDir/ File::remove when making the change.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

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

Inline comments:
In `@web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Node/Article.php`:
- Line 21: Add a PHP docblock above the protected const TOTAL in the Article
class describing what the constant means and its type (int) for consistency with
other constants like TAGS; locate the TOTAL declaration in the Article.php
Plugin/GeneratedContent/Node class and add a short docblock (e.g., "/** Total
number of items to generate. `@var` int */") immediately above the protected const
TOTAL = 20; so it matches the style used for TAGS.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: dbbc1980-cdc8-4465-8397-f1cb4d233f99

📥 Commits

Reviewing files that changed from the base of the PR and between 7a6a857 and 4d535be.

⛔ Files ignored due to path filters (18)
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/_baseline/web/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/hosting_project_name___acquia/docroot/modules/custom/sw_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/src/Plugin/GeneratedContent/Node/Article.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/names/web/modules/custom/the_force_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_groups_no_be_tests_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_behat_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_no_phpunit_circleci/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
  • .vortex/installer/tests/Fixtures/handler_process/tools_none/AGENTS.md is excluded by !.vortex/installer/tests/Fixtures/**
📒 Files selected for processing (4)
  • .vortex/CLAUDE.md
  • AGENTS.md
  • web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Node/Article.php
  • web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Taxonomy/Tags.php

)]
class Article extends GeneratedContentPluginBase {

protected const TOTAL = 20;
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Add a docblock for the TOTAL constant for consistency.

The TAGS constant in Tags.php has a docblock, but TOTAL here does not. Consider adding one for consistency.

📝 Suggested docblock
+  /**
+   * Total number of articles to generate.
+   */
   protected const TOTAL = 20;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
protected const TOTAL = 20;
/**
* Total number of articles to generate.
*/
protected const TOTAL = 20;
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@web/modules/custom/ys_demo/src/Plugin/GeneratedContent/Node/Article.php` at
line 21, Add a PHP docblock above the protected const TOTAL in the Article class
describing what the constant means and its type (int) for consistency with other
constants like TAGS; locate the TOTAL declaration in the Article.php
Plugin/GeneratedContent/Node class and add a short docblock (e.g., "/** Total
number of items to generate. `@var` int */") immediately above the protected const
TOTAL = 20; so it matches the style used for TAGS.

@github-actions

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk

This comment has been minimized.

1 similar comment
@AlexSkrypnyk

This comment has been minimized.

@github-actions
Copy link
Copy Markdown

Code coverage (threshold: 90%)

  Classes: 100.00% (1/1)
  Methods: 100.00% (2/2)
  Lines:   100.00% (189/189)
Per-class coverage
Drupal\ys_demo\Plugin\Block\CounterBlock
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% ( 10/ 10)

@AlexSkrypnyk

This comment has been minimized.

2 similar comments
@AlexSkrypnyk

This comment has been minimized.

@AlexSkrypnyk
Copy link
Copy Markdown
Member Author

Code coverage (threshold: 90%)

  Classes: 100.00% (1/1)
  Methods: 100.00% (2/2)
  Lines:   100.00% (189/189)
Per-class coverage
Drupal\ys_demo\Plugin\Block\CounterBlock
  Methods: 100.00% ( 2/ 2)   Lines: 100.00% ( 10/ 10)

@codecov
Copy link
Copy Markdown

codecov bot commented Mar 24, 2026

Codecov Report

❌ Patch coverage is 85.71429% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 78.93%. Comparing base (2161a4c) to head (1b1a410).
⚠️ Report is 3 commits behind head on main.

Files with missing lines Patch % Lines
...x/installer/src/Prompts/Handlers/CustomModules.php 85.71% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2414      +/-   ##
==========================================
- Coverage   79.41%   78.93%   -0.48%     
==========================================
  Files         126      119       -7     
  Lines        6724     6571     -153     
  Branches       44        0      -44     
==========================================
- Hits         5340     5187     -153     
  Misses       1384     1384              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@AlexSkrypnyk AlexSkrypnyk merged commit df6a257 into main Mar 24, 2026
30 checks passed
@AlexSkrypnyk AlexSkrypnyk deleted the feature/demo-modules branch March 24, 2026 09:20
@github-project-automation github-project-automation bot moved this from BACKLOG to Release queue in Vortex Mar 24, 2026
@AlexSkrypnyk AlexSkrypnyk added this to the 1.38.0 milestone Mar 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Release queue

Development

Successfully merging this pull request may close these issues.

1 participant