You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Console\SubmitterFactory and Console\SubmitterFactoryInterface are Adapter\SubmitterFactory and Adapter\SubmitterFactoryInterface; Console\ResultSummary is Submission\ResultSummary (spec 17 §4.2: they are
called from Adapter\Services and the adapters, not only from the commands, so they stay in the core when the
commands move to indexnowkit/console). Migration: change the use lines — use IndexNowKit\Adapter\SubmitterFactory;, use IndexNowKit\Adapter\SubmitterFactoryInterface;, use IndexNowKit\Submission\ResultSummary;. Adapter\Services::submitterFactory() returns Adapter\SubmitterFactoryInterface. Nothing else changes: same constructors, same methods.
Testing\Conformance\* and the assertion helpers are the indexnowkit/testing package (spec 17 §4.1: they
extend and call PHPUnit, which the core only suggested). Testing\Conformance\CoreConformanceTestCase and OrmConformanceTestCase keep their FQCN; Testing\KeyFileAssertions, Testing\CheckOutputAssertions and Testing\ReadmeAssertions are now Testing\Conformance\KeyFileAssertions, CheckOutputAssertions, ReadmeAssertions — a withdrawal from the stable API before 1.0. Migration: composer require --dev indexnowkit/testing and change the three use lines. The mock server is vendor/indexnowkit/testing/resources/mock-server/router.php. The four test doubles (FakeTransport, ArrayLogger, FrozenClock, RecordingDispatcher) stay in the core; phpunit/phpunit leaves suggest.
Console\* is the indexnowkit/console package (spec 17 §4.2: the runners render through symfony/console,
which the core only suggested; a plain-PHP or Doctrine user never needed them). The 16 classes keep their FQCN
(Console\*Runner, ResultRenderer, ResultFormatterInterface, SubjectLoaderInterface, SubmitSubjectsOptions, Definitions, CommandDefinition, ArgumentDefinition, OptionDefinition, Vocabulary, ExitCode, ClassNameResolver): composer require indexnowkit/console and nothing else changes — the framework adapters
require it for you. symfony/console leaves suggest and require-dev of the core; nothing under src/ imports Symfony\Component\Console\ or PHPUnit\ any more.
Added
Adapter\OptionalPackage: one predicate for an optional package of the family (installed() = class_exists()
of a marker class unless overridden, no statics) with the three texts an adapter printed from its own copy: notInstalledMessage(), checkLine() / checkLevel() / check() (ok without a block or with the shipped
defaults, warning when a configured block is ignored). Replaces the SitemapSupport copies of Laravel and Yii2 and
the predicate of the bundle (spec 17 §4.3).
Testing\ReadmeAssertions: what the "Notes for AI assistants" README section must keep (present in EN and RU, a
complete snippet, only existing commands and configuration keys), for the ReadmeAiNotesTest of every package
(moved to indexnowkit/testing as Testing\Conformance\ReadmeAssertions in the same release, see Changed).
.phpstorm.meta.php: completion of locales (current, all) and events on #[IndexNow] / #[IndexNowDefaults].
Documentation
README: "Notes for AI assistants" (package, minimal complete snippet, verification, pitfalls across the adapters).
docs/configuration.md "One concept, three keys": the core keys with their defaults, the sitemap keys, the synonyms
(dispatch modes, messenger.transport / queue.connection / queue.component, framework.enabled_locales / router.locales / router.languages, doctrine.enabled / eloquent.enabled / active_record.enabled, key
file route, log destination, debounce store, HTTP client) and the adapter-only keys — generated by bin/config-table from Config::OPTIONS, SitemapConfig::OPTIONS, the bundle tree, LARAVEL_OPTIONS and YII_OPTIONS, checked in CI.
docs/operations.md: the production checklist first; "What IndexNow is, and is not" (where to see the result);
"Deleted pages: what your site must return" (410/404/301, soft-404); "What not to submit" (noindex, robots.txt, non-canonical URLs, drafts — what the library checks and what it cannot); the four monitoring rules
and a Sentry before_send filter; the 403 counter is per process; the key never travels in a query string.
docs/attribute-reference.md "Anti-patterns": five declarations that submit the wrong thing (url: with a literal,
a status string in when:, a rule on a noindex page, non-canonical URLs, no when on a model with drafts).
README and configuration.md: batch.max_urls is a ceiling, not a target.
Russian translations: docs/attribute-reference.ru.md, docs/configuration.ru.md (linked from README.ru.md).