Repository navigation
Added
indexnowkit.clock(Clock\SystemClock, aliased toPsr\Clock\ClockInterface): the one service every piece
that reads the time takes it from —indexnowkit.throttle, thememoryindexnowkit.debounce_store,
indexnowkit.submitter,indexnowkit.command_submitter_factoryand, withverify.enabled, the pre-flight
decorators. Replace it withIndexNowKit\Testing\FrozenClockin a compiler pass and the debounce window, the
throttle window and the time a submission record gets all move together (audit 0.13 A5; docs/extending.md,
docs/testing.md).indexnowkit.check.locales(the core'sCheck\LocalesCheckoverCheck\MappedClasses, coderouter.locales):
oneindexnow:checkwarning when a#[IndexNow(locales: 'all')]rule meets an emptyframework.enabled_locales,
which until now silently produced one URL without a locale instead of one per locale (audit 0.13 W14; the class
moved to the core in wave M, spec 19 §4.4, one text for the three adapters that print it).- The router bridge warns once per process when
locales: 'all'meets an emptyframework.enabled_locales
(indexnowkit.route_url_resolvertakes the logger now, on theindexnowchannel): the rule silently collapsing
to one URL was, until now, a line ofcheckonly. The expansion, the pinned origin and the exception text are the
core'sUrl\RouteOrigin(wave M, spec 19 §4.6).
Changed
-
Wave M (spec 19): the bundle's copies of what the family shares are the core's or the packages' classes.
Check\LocalesCheckandCheck\EntitySamplerare removed — the service ids stay (indexnowkit.check.localesis the
core'sCheck\LocalesCheckover the newCheck\MappedClasses,indexnowkit.check.entity_sampler.callableis
Console\SubjectSamplerofindexnowkit/console).Command\EntityLoaderextendsConsole\AbstractSubjectLoader
(its constructor andmanager()are unchanged).Messenger\MessengerDispatcheris the Messenger push around the
core'sDispatch\BatchingDispatcher: its constructor takes theConfig(indexnowkit.config) where it took
$logUrlsand$batchMaxUrls— an internal service (indexnowkit.dispatcher), not indocs/bc.md— and its log
lines are the core's ({count} URL(s) queued as message {id},cannot queue {count} URL(s) (message {id}), they are lost: {error}; docs/messenger.md).SubmitUrlsMessage::newId()delegates toBatchingDispatcher::newJobId().
EventListener\FlushListenertakes(CollectorInterface, Closure(): IndexNowKit)instead of a PSR-11 service
locator (PSR-11 says a container should not be passed in for an object to fetch its own dependencies; a
service_closure('indexnowkit')is as lazy). Migration: aFlushListenerbuilt by hand passes
static fn () => $container->get('indexnowkit').Check\CacheProbewrites the core'sDebounceStoreCheck::PROBE_KEY
(it only read a key). The nine literal'memory'/'none'comparisons of the loader are
DebounceStoreFactory::isShared(); thestatusline of the debounce store isHistoryServices::describeStore()
ofindexnowkit/history(cache.app (missing)when the pool is not a service, where the bundle printed the bare id). -
The command classes are the packages',
Command\*of the bundle is gone (wave L, spec 18).indexnow:check,
indexnow:config,indexnow:submit,indexnow:submit-entity,indexnow:explain,indexnow:key:generateand the
three "not installed" stubs areIndexNowKit\Console\Command\*ofindexnowkit/console0.5 (submit-entityis
SubmitSubjectsCommand, named by the vocabulary),indexnow:sitemapisIndexNowKit\Sitemap\Console\SitemapCommand
(sitemap 0.8),indexnow:historyandindexnow:statusareIndexNowKit\History\Console\HistoryCommand/
StatusCommand(history 0.4). The bundle registers them under their class names with the same runners
(indexnowkit.console.*), the same names, arguments, options, exit codes and--json; the Yii3 package registers
the very same classes. Whatcheckandconfigread isDependencyInjection\ConsoleConfigSource
(indexnowkit.console.config_source, aConsole\ConfigSourceInterface) instead of three constructor arguments.
Everyconsole.commandstays lazy (#[AsCommand], or thecommand+descriptionattributes of the tag for
SubmitSubjectsCommand), which the bundle's own test now asserts.Command\EntityLoaderstays where it is.
Migration: only a direct reference toIndexNowKit\SymfonyBundle\Command\*Commandbreaks — adecorates:on one of
those ids, aninstanceof, a#[AsCommand]subclass (they werefinal). Decorate the runner instead
(indexnowkit.console.submit_entity, …), or register a command of your own under the same name
(docs/extending.md "Replacing a command"). -
The
--samplegate ofindexnow:checkis the core's:indexnowkit.check.samplesis
IndexNowKit\Check\SampleOptionsandindexnowkit.check.verify_sampleisIndexNowKit\Check\SampleGateCheck
(core 0.13.0) instead of the bundle's own byte-identical copies, which are removed —
IndexNowKit\SymfonyBundle\Check\SampleOptionsandIndexNowKit\SymfonyBundle\Check\VerifySampleCheckare gone.
Same service ids, same lines, sameverify.installedcode; only a direct reference to those two classes breaks
(audit 0.13 A2). -
indexnowkit.verify.submitterandindexnowkit.verify.command_submitter_factorypass their arguments by name
($inner,$transport, …) rather than by position, so a parameter added toVerify\VerifyingSubmitterfails the
compilation instead of shifting values into the wrong slots (audit 0.13 A16). -
DispatcherFactory::SYNCinstead of the'sync'literal inDependencyInjection\VerifyServices(audit 0.13 A19).
Fixed
- The profiler panel no longer prints the submission store's raw exception message: a failing store shows the
exception class plus a message whose DSN credentials are masked the wayindexnow:configmasks them, so a panel
screenshot in a bug report carries no database user or password (audit 0.13 S12). - Fixed: the bundle was a fatal without
indexnowkit/sitemap,indexnowkit/verifyorindexnowkit/history
(Class "IndexNowKit\Sitemap\Adapter\SitemapServices" not foundwhile compiling the container): the configuration
tree and the loader asked the packages'*Services::package()whether the package is installed, and those classes
live in the packages. They now ask the core'sAdapter\OptionalPackage::sitemap()/verify()/history()
(core 0.13.0);DependencyInjection\{Sitemap,Verify,History}Services::package()delegate there too. Same texts, same
service ids. A new CI job removes the three packages and boots the bundle with detection
(OptionalPackagesDetectionTest). - Requires
indexnowkit/core ^0.13,indexnowkit/console ^0.5, andindexnowkit/history ^0.4when installed
(conflictwith older).
Tests
- The kernels of the functional suite put a fingerprint of the bundle's sources in the container cache path: with
debug: falseSymfony never checks the compiled container for freshness, so a local edit of the DI extension was
tested against the previous container (audit 0.13 T10). - The in-memory Messenger transport of the
messenger*variants runs with?serialize=true, so the message and its
stamps are really encoded and decoded instead of being handed back as the same object (audit 0.13 T17). - A
#[IndexNow(resolver: ...)]id the container knows but cannot build, and one it does not know at all, are
asserted to carry the family'sConfigurationExceptiontexts, which now come from the core's
Url\ArrayResolverLocator(audit 0.13 A10).