DtoEntityUpdaterExtension::load()
now registers an autowired Definition for DtoEntityUpdater and a
public Alias for DtoEntityUpdaterInterface via
ContainerBuilder::register() / setAlias(). The hand-rolled YAML
alias in src/Resources/config/services.yaml is replaced.RepositoryHelperTrait::updateField
now throws LogicException on InvalidArgumentException from the
resolver (was: silent skip on ReflectionException, masking data
corruption as success).DefaultResolver now throws
InvalidArgumentException for unknown / untyped setter parameters
(was: silent fallback to '').DtoEntityUpdater::updateField is
now public and accepts ?callable $transform and
?mixed $default = Placeholder::NONE_DEFAULT parameters
(matching the trait).composer validate --strict reports
valid..gitignore hardened (CR-002-IMPL-08): adds .phpunit.cache/,
.phpunit.xml, /itests/reports/, /itests/runner/metrics.php.
Operator override of the AGENT_DEVELOPER_POLICY.md protected-file
rule, applied at close-out.proprietary to MIT (SPDX MIT) per ADR 0010 transition
Proposed -> Accepted (operator decision 2026-07-23). LICENSE
file replaced with standard MIT Expat text; composer.json#license
field updated from proprietary to MIT. The LICENSE /
composer.json#license / ADR-0010 acceptance / tag alignment ships
together at commit tagged v1.1.0. Re-licensing is irreversible;
see ADR 0010 §"Consequences" for follow-up policy.phpunit.xml.dist with unit
and integration suites, composer test / test-unit /
test-integration / phpstan / bench scripts,
doctrine/orm, doctrine/dbal, phpstan/phpstan,
phpbench/phpbench, symfony/phpunit-bridge as require-dev.NONE_ARRAY identity guard.LogicException when host
class does not implement RepositoryInterface (and on
unknown setter type), EntityNotFoundException when find()
returns null, InvalidArgumentException on missing accessor,
sentinel-match skip, transform callable, explicit $default.scripts/check_domain_purity.sh enforces src/Domain/ has no
Symfony/Doctrine/Reflection/Psr imports.Configuration class; DtoEntityUpdaterExtension now calls
processConfiguration() so unknown keys surface as
ConfigurationException at compile time. Reserves
dto_entity_updater.default_resolver.cache.enabled and
.pool_service keys.DtoEntityUpdater now
accepts an optional Psr\Log\LoggerInterface (defaults to
NullLogger); emits info records on every silent-skip path
(missing setter / getter / unknown setter type).composer.json#license = "proprietary".DtoEntityUpdaterRepositoryInterface, TariffRepository)
removed.DefaultResolver and DefaultResolverInterface in
src/Infrastructure/Reflection/. Both implementers
(DtoEntityUpdater, RepositoryHelperTrait) now delegate to
the resolver; DtoEntityUpdater accepts an optional
constructor-injected DefaultResolverInterface.DefaultResolver; defaults to ArrayAdapter in-memory cache.phpbench.json,
composer bench script, 4 bench subjects (cold / warm /
bulk-cold / bulk-cached).dto_entity_updater.default_resolver.cache.enabled (default
false) and .pool_service (optional) config keys wire
CachedDefaultResolver automatically when enabled.docs/perf.md
with hot-path call graph, bench numbers, and honest "when to
enable vs disable" guidance.placeholder-sentinels.md,
domain-interfaces.md mirroring the structure of the existing
dto-entity-updater.md and repository-helper-trait.md.phpstan.neon with level 6
over src/, tests/, bench/; empty phpstan-baseline.neon..github/workflows/ci.yml with
quality-gates job; PHP 8.3 / 8.4 / 8.5 matrix; domain-purity +
unit + integration + phpstan + cs:check gates.composer test-integration is wired
but the sqlite-in-memory factory and the docker-compose scenario
scripts are not authored.docs/perf.md.DE-002-10 captures the work
for the architect role. Update 2026-07-23: all 4 of those ADRs
(0002-0008) are now authored in docs/adr/, plus 0009 (bundle
rename) and 0010 (license and publication strategy, Proposed
awaiting operator choice). See docs/adr/README.md-style index
by listing the directory.How can I help you explore Laravel packages today?