Skip to content

Update dependency boundwize/structarmed to ^0.20.0 - #579

Merged
alexmerlin merged 1 commit into
7.0from
renovate/boundwize-structarmed-0.x
Oct 30, 2026
Merged

alexmerlin merged 1 commit into
7.0from
renovate/boundwize-structarmed-0.x

Conversation

@renovate

@renovate renovate Bot commented Oct 29, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
boundwize/structarmed ^0.19.0 → ^0.20.0 age confidence

Release Notes

boundwize/structarmed

v0.20.0: Released: StructArmed 0.20.0

Compare Source

ci build PHPStan

StructArmed 0.20.0 introduces a new Stability preset, modular architecture configuration, and an option to run analysis without persistent caching.

This release introduces:

  • the new Preset::STABILITY() for protecting public APIs from internal implementation details;
  • isApi and isInternal properties on ClassNode for custom rule development;
  • Architecture::import() for splitting architecture configuration across multiple files;
  • --no-cache for running analysis without persistent caching;
  • improved PSR-4 validation and cache cleanup safety.

New Stability Preset

StructArmed introduces a new preset for enforcing API stability:

Preset::STABILITY()

The preset includes two new rules:

  • ApiMayNotBeInternalRule — prevents declarations from being marked with both @api and @internal.
  • ApiMayNotExtendInternalRule — prevents @api classes and interfaces from extending @internal declarations, directly or through inheritance.

For example:

/** @internal */
class InternalService
{
}

/** @api */
class PublicService extends InternalService
{
}

The Stability preset reports an architecture violation because a public API extends an internal implementation.

Enable the preset with:

use Boundwize\StructArmed\Preset\Preset;

->withPreset(Preset::STABILITY())

Or initialize a new configuration:

vendor/bin/structarmed init --preset=stability
API and Internal Detection on ClassNode

ClassNode now exposes two new boolean properties:

  • $classNode->isApi — indicates whether the declaration has an @api PHPDoc tag.
  • $classNode->isInternal — indicates whether the declaration has an @internal PHPDoc tag.

These properties are available to custom architecture rules, making it easier to enforce project-specific API stability and visibility conventions.

For example:

public function appliesTo(ClassNode $classNode): bool
{
    return $classNode->isApi && ! $classNode->isInternal;
}

The properties are populated automatically during analysis for scanned class-like declarations, including classes, interfaces, traits, and enums.

Import Architecture Configuration

StructArmed now supports organizing architecture configuration across multiple files using Architecture::import().

For example:

use Boundwize\StructArmed\Architecture;

return Architecture::define()
    ->import(__DIR__ . '/module/Foo/structarmed.php')
    ->import(__DIR__ . '/module/Bar/structarmed.php');

Each imported file returns a callable that receives the root Architecture instance:

use Boundwize\StructArmed\Architecture;

return static function (Architecture $architecture): void {
    $architecture->layer('Foo', 'module/Foo/src/');
};

This allows architecture rules and layers to be organized by module while sharing the same configuration.

Imported configurations support:

  • nested imports with circular import protection;
  • paths resolved relative to the project root;
  • automatic analysis cache invalidation when imported files change.

This makes StructArmed easier to configure and maintain in modular applications and larger projects.

New --no-cache Option

StructArmed introduces a new CLI option:

vendor/bin/structarmed analyse --no-cache

This option runs analysis without reading from or writing to the persistent analysis cache.

It is useful for debugging, validating uncached analysis, and environments where persistent caching is not desired.

The option supports both sequential and parallel analysis.

--no-cache cannot be combined with --clear-cache.

Bug Fixes and Internal Improvements

  • Fix PSR-4 validation for .class.php files.
  • Report files that map to invalid PSR-4 class names.
  • Improve temporary cache directory cleanup after parallel --no-cache analysis.
  • Prevent cache directory removal races between concurrent runs.
  • Update documentation and test coverage.

What's Changed

  • Add --no-cache option in #​507.
  • Add the new Stability preset, API rules, and ClassNode API/internal detection in #​510.
  • Clean up temporary cache directories after parallel --no-cache analysis in #​513.
  • Fix PSR-4 validation for .class.php files in #​516.
  • Report invalid PSR-4 class names in #​517.
  • Add modular architecture configuration imports in #​522.
  • Fix concurrent cache directory cleanup in #​523.

Full Changelog: boundwize/structarmed@0.19.10...0.20.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@codecov

codecov Bot commented Oct 29, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 64.64%. Comparing base (6b28579) to head (655109e).

Additional details and impacted files
@@            Coverage Diff            @@
##                7.0     #579   +/-   ##
=========================================
  Coverage     64.64%   64.64%           
  Complexity     1003     1003           
=========================================
  Files           181      181           
  Lines          3437     3437           
=========================================
  Hits           2222     2222           
  Misses         1215     1215           

☔ View full report in Codecov by Harness.
📢 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.

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Qodana for PHP

It seems all right 👌

No new problems were found according to the checks applied

💡 Qodana analysis was run in the pull request mode: only the changed files were checked
☁️ View the detailed Qodana report

Detected 109 dependencies

Third-party software list

This page lists the third-party software dependencies used in project

Dependency Version Licenses
brick/math 1.0.0 MIT
brick/varexporter 0.7.0 MIT
defuse/php-encryption v2.4.0 MIT
doctrine/collections 3.1.0 MIT
doctrine/common 3.5.0 MIT
doctrine/data-fixtures 2.2.1 MIT
doctrine/dbal 4.5.0 MIT
doctrine/deprecations 1.1.6 MIT
doctrine/event-manager 2.1.1 MIT
doctrine/inflector 2.1.1 MIT
doctrine/instantiator 2.1.0 MIT
doctrine/lexer 3.0.3 MIT
doctrine/migrations 3.9.8 MIT
doctrine/orm 3.7.5 MIT
doctrine/persistence 4.2.1 MIT
dotkernel/dot-cache 4.4.0 MIT
dotkernel/dot-cli 3.11.1 MIT
dotkernel/dot-data-fixtures 1.5.0 MIT
dotkernel/dot-dependency-injection 1.4.1 MIT
dotkernel/dot-errorhandler 4.0.2 MIT
dotkernel/dot-event 4.4.0 MIT
dotkernel/dot-log 4.0.6 MIT
dotkernel/dot-mail 5.4.3 MIT
dotkernel/dot-response-header 3.6.0 MIT
dotkernel/dot-router 1.1.0 MIT
egulias/email-validator 4.0.4 MIT
fig/http-message-util 1.1.5 MIT
laminas/laminas-authentication 2.19.0 BSD-3-Clause
laminas/laminas-cli 1.15.0 BSD-3-Clause
laminas/laminas-component-installer 3.8.0 BSD-3-Clause
laminas/laminas-config-aggregator 1.20.0 BSD-3-Clause
laminas/laminas-diactoros 3.9.0 BSD-3-Clause
laminas/laminas-escaper 2.18.0 BSD-3-Clause
laminas/laminas-eventmanager 3.15.0 BSD-3-Clause
laminas/laminas-filter 2.42.0 BSD-3-Clause
laminas/laminas-httphandlerrunner 2.14.0 BSD-3-Clause
laminas/laminas-hydrator 4.19.0 BSD-3-Clause
laminas/laminas-inputfilter 2.35.0 BSD-3-Clause
laminas/laminas-permissions-acl 2.18.0 BSD-3-Clause
laminas/laminas-permissions-rbac 3.8.0 BSD-3-Clause
laminas/laminas-servicemanager 3.24.0 BSD-3-Clause
laminas/laminas-stdlib 3.21.0 BSD-3-Clause
laminas/laminas-stratigility 4.3.1 BSD-3-Clause
laminas/laminas-validator 2.65.0 BSD-3-Clause
lcobucci/jwt 5.6.1 BSD-3-Clause
league/event 3.0.3 MIT
league/oauth2-server 9.4.1 MIT
league/uri-interfaces 7.9.1 MIT
league/uri 7.9.1 MIT
mezzio/mezzio-authentication-oauth2 3.1.0 BSD-3-Clause
mezzio/mezzio-authentication 1.13.0 BSD-3-Clause
mezzio/mezzio-authorization-acl 1.13.0 BSD-3-Clause
mezzio/mezzio-authorization-rbac 1.10.0 BSD-3-Clause
mezzio/mezzio-authorization 1.11.0 BSD-3-Clause
mezzio/mezzio-cors 1.16.0 BSD-3-Clause
mezzio/mezzio-fastroute 3.14.0 BSD-3-Clause
mezzio/mezzio-hal 2.14.0 BSD-3-Clause
mezzio/mezzio-helpers 5.20.0 BSD-3-Clause
mezzio/mezzio-problem-details 1.19.0 BSD-3-Clause
mezzio/mezzio-router 3.20.0 BSD-3-Clause
mezzio/mezzio-template 3.0.0 BSD-3-Clause
mezzio/mezzio 3.28.1 BSD-3-Clause
nikic/fast-route 1.3.1 BSD-3-Clause
nikic/php-parser v5.9.0 BSD-3-Clause
paragonie/random_compat v9.99.100 MIT
phpstan/phpdoc-parser 2.4.0 MIT
psr/cache 3.0.0 MIT
psr/clock 1.0.0 MIT
psr/container 1.1.2 MIT
psr/event-dispatcher 1.0.0 MIT
psr/http-client 1.0.3 MIT
psr/http-factory 1.1.0 MIT
psr/http-message 2.0 MIT
psr/http-server-handler 1.0.2 MIT
psr/http-server-middleware 1.0.2 MIT
psr/link 1.1.1 MIT
psr/log 3.0.2 MIT
radebatz/type-info-extras 1.0.11 MIT
ramsey/collection 2.1.1 MIT
ramsey/uuid-doctrine 2.1.0 MIT
ramsey/uuid 4.9.4 MIT
roave/psr-container-doctrine 6.2.0 BSD-2-Clause
spatie/array-to-xml 3.4.4 MIT
symfony/cache-contracts v3.7.1 MIT
symfony/cache v7.4.22 MIT
symfony/console v7.4.22 MIT
symfony/deprecation-contracts v3.7.1 MIT
symfony/event-dispatcher-contracts v3.7.1 MIT
symfony/event-dispatcher v8.1.5 MIT
symfony/filesystem v7.4.21 MIT
symfony/finder v8.1.10 MIT
symfony/mailer v7.4.22 MIT
symfony/mime v8.1.10 MIT
symfony/polyfill-ctype v1.37.0 MIT
symfony/polyfill-intl-grapheme v1.43.3 MIT
symfony/polyfill-intl-idn v1.43.0 MIT
symfony/polyfill-intl-normalizer v1.43.0 MIT
symfony/polyfill-mbstring v1.43.3 MIT
symfony/polyfill-php86 v1.43.0 MIT
symfony/service-contracts v3.7.3 MIT
symfony/stopwatch v8.1.0 MIT
symfony/string v8.1.10 MIT
symfony/type-info v8.1.10 MIT
symfony/var-exporter v7.4.22 MIT
symfony/yaml v8.1.10 MIT
webimpress/safe-writer 2.2.0 BSD-2-Clause
webmozart/assert 2.5.0 MIT
willdurand/negotiation 3.1.0 MIT
zircote/swagger-php 6.20.0 Apache-2.0
Contact Qodana team

Contact us at qodana-support@jetbrains.com

@alexmerlin
alexmerlin merged commit 2fb00a8 into 7.0 Oct 30, 2026
40 checks passed
@alexmerlin
alexmerlin deleted the renovate/boundwize-structarmed-0.x branch October 30, 2026 04:56
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.

1 participant