Skip to content

v1.0.3

Choose a tag to compare

@github-actions github-actions released this 05 Jun 21:10
f096bdc

Fixed

  • Site Type presets now actually take effect (#82). The published config/scolta.php hard-coded a concrete value for every scoring/display field, and ScoltaAiService forwards the full config to ScoltaConfig::fromArray() unfiltered, so every key was always present and always overrode the selected preset. The result: the entire Site Type preset was inert — not just expansion_combine_mode, but ~13 fields (ranking weights, recency, sub-word recall, AI-summary candidate breadth, results-per-page, excerpt length). Picking content_catalog vs none produced near-identical behavior. The config's own comment "Leave a value at its default to use the preset's recommendation" was false. Now the preset-overridable fields default to null (env-driven, no fallback), and scolta-php's fromArray() treats null as "not set" so it falls through to the preset (or the base default when the preset is none); an explicit value — set via the matching SCOLTA_* env var — still overrides. Requires the scolta-php null-as-unset fix (scolta-php#181, merged). Drupal and WordPress were never affected (they omit keys to fall through). ⚠️ Behavior change on upgrade: existing Laravel sites that selected a Site Type preset will now actually receive that preset's tuning, which was previously ignored — result ranking, results-per-page, AI-summary candidate breadth, recency, and query expansion may shift. Sites on the default none preset move to expand_subword_max_frequency 0.10 (previously the hard-coded 0.05), slightly broadening recall. This is the intended fix, but it is visible on upgrade; sites that want the old numbers can set the corresponding SCOLTA_* env vars to pin them.

Added

  • expansion_combine_mode scoring config. Expose the browser-side query-expansion candidate-selection knob added in scolta-php (tag1consulting/scolta-php#170) in the published config/scolta.php. expansion_combine_mode (SCOLTA_EXPANSION_COMBINE_MODE, default relevance_union) controls how a multi-term expansion's per-sub-query result sets are combined into the AI-summary candidate set — relevance_union keeps the historical behavior, round_robin deals the top few from each sub-query so the summarizer sees breadth across expansion terms. It is surfaced exactly like the other preset-overridable scoring values (an explicit value in the scoring section overrides the preset default — see Changed below). Requires scolta-php#179 (merged) to take effect at runtime.
  • Added SearchComponentRenderTest — renders the search Blade component in a booted app and asserts the emitted window.scolta pagefindPath/wasmPath/endpoint URLs (parsed out of the script block) against both the nested and flat Pagefind layouts, plus the not-built warning path. The prior BladeComponentTest only string-matched the template source and was blind to wrong emitted URL values; this is the first true render test (uses the already-present orchestra/testbench dev dependency).

Changed

  • expansion_combine_mode is now preset-defaulted, and the expansion_per_term_top_k (K) config key is removed. Following the scolta-php #170 evaluation, round_robin is the better summary-candidate strategy on faceted corpora and a safe no-op elsewhere, so it is now a per-Site-Type preset default in scolta-php: the content_catalog, blog, and ecommerce presets default the combine mode to round_robin; reference, none, and the base default stay relevance_union. expansion_combine_mode stays in the scoring section as the per-site override, surfaced exactly like the other preset-overridable scoring values (an explicit value wins over the preset default). The per-sub-query top-K is no longer tunable — evaluation found no benefit above 3 and over-reach below it — so scolta-php locks it at 3 internally and the scoring.expansion_per_term_top_k config key and its SCOLTA_EXPANSION_PER_TERM_TOP_K env var are removed; ConfigTest now asserts the key is absent. The preset-default behavior flows through the existing config plumbing, so no scolta-php release bump is required for it. (tag1consulting/scolta-php#180)
  • Stopped restating scoring/display defaults in the README; point to scolta-php's CONFIG_REFERENCE.md instead. The Default column of the README's Search Scoring and Display tables duplicated scolta-php's canonical defaults and had drifted (scoring.title_match_boost showed 1.0 vs the current 2.0; scoring.recency_boost_max showed 0.5 vs 0.25). Those columns are removed and each table now links to scolta-php docs/CONFIG_REFERENCE.md, the single source of truth for defaults (verified against ScoltaConfig in scolta-php CI). The .env keys, config/scolta.php paths, preset guidance, and worked override examples are unchanged. Docs-only — no config or default values change.
  • Reworked the README "Preset" section to lead with the site type and a symptom→fix prompt. Opens with "Getting fewer search results than you expect on a recipe, product, or catalog site? Set SCOLTA_PRESET=content_catalog…", frames presets as the recommended path over hand-set numbers, and links to scolta-php's docs/TUNING.md for the evidence. Docs-only — no config or default values change.
  • Dropped the redundant message()/conversation()/messageForOperation() overrides in ScoltaAiService; the base AiServiceAdapter now owns the budget-exception try/catch. Each override existed only to wrap the parent:: call in try/catch (\RuntimeException)handlePossibleBudgetException(). scolta-php's base class now does that wrapping and calls a protected handlePossibleBudgetException() hook, so the adapter keeps only its hook override (visibility changed privateprotected). Behavior is identical — an Amazee budget error still converts to AmazeeBudgetExceededException. Requires scolta-php ≥ 1.0.3 (the release that adds the hook). (scolta-php#173)
  • Opened 1.0.3-dev development cycle.

Internal

  • Release workflow is now notes-only; dropped the redundant vendor-bundled release zip and its validate-zip job. Composer resolves tag1/scolta-laravel from Packagist's GitHub source zipball, so the manually-built scolta-laravel-${VERSION}.zip release asset had no consumer. The tag-triggered release now publishes the CHANGELOG entry with GitHub's auto-attached source archives only. The lock-guard job (verifies tag1/scolta-php is pinned to a Packagist stable dist) is retained. Removed the StructuralIntegrityTest methods that asserted the deleted zip/validate-zip behavior and replaced them with test_release_workflow_uploads_no_build_artifact, which fails if a build artifact upload or validate-zip job is re-added.
  • Block-scoped ignores for the security advisories that broke CI dependency resolution on the EOL Laravel 11 matrix row. Newly-published advisories against laravel/framework 11.x made composer update refuse to install on the Laravel 11/12 CI rows. Migrated config.audit.ignore to the detailed object form with apply: "block" (resolver stops blocking; composer audit still reports), one documented + tagged entry per advisory ID. The five laravel/framework IDs are tagged [PERMANENT:laravel-11-eol] (Laravel 11 reached EOL 2026-03-12; the genuine blocker CVE-2026-48019 covers all 11.x with no 11.x fix coming, and the other four are already patched in 11.x but enumerated across the candidate range) — remove them when Laravel 11 is dropped from the matrix. The two pre-existing PHPUnit IDs are re-tagged [DEV-ONLY:phpunit]. No runtime/dependency change; supported Laravel 12/13 are unaffected (already patched).