Install

Works with Drupal: ^10 || ^11

Using Composer to manage Drupal site dependencies

Alternative installation files

Download tar.gz 44.89 KB
MD5: ae72c03caa28bfcfdb8c3a8f29db6dae
SHA-1: bf7b4d739b4238a4c302a3226575728fffe2761d
SHA-256: 84aa839e6d6b14078570264861e605b548eb9531706c5040fa2c1670b401fa64
Download zip 80.9 KB
MD5: 9005d9920cdc3e800852cd0b583d6823
SHA-1: ccd4a6f878d77854a79aaa7f6fbaa6b19b2024ec
SHA-256: 628f09112704f47866174824ddbf1f68a2d125f2e0ddaac02655b117e502b26f

Release notes

Phase 5 brings configurable insight thresholds, performance budgeting, dashboard intelligence,
a JSON Insight API, and full PHPUnit 11 compatibility.

✨ Configurable Thresholds

All rule thresholds are now editable at admin/config/system/content-telemetry
via a new ThresholdConfig service:

  • Render time budget (ms) — triggers PerformanceBudgetRule
  • DB ratio warn / critical thresholds (%)
  • Cache-hit ratio warn / critical thresholds (%)
  • Regression warn / critical thresholds (% increase vs. 7-day baseline)

Existing installs receive default values automatically via content_telemetry_update_9004().

✨ Performance Budgeting

New PerformanceBudgetRule flags entities whose average render time exceeds the configured budget:

  • Warn: avg render ≥ budget
  • Critical: avg render ≥ 2× budget

✨ DashboardtIntelligence

  • Site-wide health score widget at the top of the dashboard
  • Per-row Health column — colour-coded 0–100 badge derived from entity insights
  • Per-row Trend column — pill badge (↑ Rising / ↑ Critical / → Stable) derived from regression rule hits

✨ Insight Scoring

Every insight now carries a numeric score (0–100, higher = worse). Entity and site-wide health
scores are derived by deducting penalty points per severity:

  • poor insight: −30 points
  • warn insight: −15 points

Score labels: Good (80–100) · Needs attention (50–79) · Critical (0–49)

✨ JSON Insight API

Two new JSON endpoints (requires view content telemetry permission):

  • GET /api/content-telemetry/insights/{entity_type}/{entity_id}
  • GET /api/content-telemetry/insights/dashboard

Response includes generated_at, health_score, health_label,
insight_count, and insights[]. All responses carry Cache-Control: no-store, private.

🐛 Bug Fixes

  • Fixed BlockSubscriber TypeError caused by stale @plugin.manager.block argument in services.yml
  • Fixed formatMs() TypeError — database string values now explicitly cast to float
  • Fixed trend HTML rendering as escaped text instead of markup
  • Fixed duplicate health score appearing on the dashboard overview

🎨 UI Improvements

  • Trend indicators replaced with styled pill badges using .ctpi-trend-pill CSS classes, each with a tooltip carrying the full insight message
  • New CSS modifier classes: .ctpi-badge--good, .ctpi-badge--warn, .ctpi-badge--poor

🧪 PHPUnit 11 Compatibility─

  • All 12 test classes migrated from docblock annotations to PHP 8 attribute syntax (#[CoversClass], #[Group])
  • All setAccessible(true) calls removed (no-op since PHP 8.1)
  • 94 PHPUnit 11 deprecation warnings eliminated — now 0
  • New test classes: PerformanceBudgetRuleTest, InsightServiceScoringTest, ThresholdConfigTest
Created by: ggh
Created on: 6 Apr 2026 at 03:47 UTC
Last updated: 6 Apr 2026 at 03:47 UTC
Bug fixes
New features

Other releases