Native Observability 1.0.9

Twelve commits on top of 1.0.8. The headline themes: install presets,
extraction of the scrape-side responsibilities into a dedicated
sub-module, honest dependency declarations, and removal of the
install-time sanity gate.

Added
- drush no:preset:raw, drush no:preset:dashboard, drush no:preset:integrations
  — single-command installers for the three documented consumer tiers.
  Idempotent (re-running prints "Already enabled") and end each
  invocation with a short Next-steps block.
- native_observability_export — new sub-module that owns the
  pull-based scrape endpoints (/native-observability/prometheus,
  /native-observability/elastic) split out from native_observability_otel.
  Hard-deps on native_observability + spans + cache_observer (the
  three tables it reads). Ships its own settings form at
  /admin/config/development/native-observability/settings/export,
  config schema, permissions and Drupal State storage for the
  bearer token. Can be enabled without native_observability_otel.
- CHANGELOG.md at the module root.
- "Pick your tier" table in the README plus a seven-group
  copy-friendly install layout (one drush command per fenced bash
  block, modules on separate lines via backslash continuation).

Changed
- native_observability_dashboard.info.yml now declares hard
  dependencies on cache_observer and database_observer (the
  dashboard pages /dashboard/cache and /dashboard/database query
  those tables — without the modules they 500).
- native_observability_eca_bridge.info.yml drops eca_ui, eca_log
  and eca_base — the bridge only uses Drupal\\eca\\* core symbols.
- native_observability_eca_bridge_demo.info.yml gains eca_base and
  eca_log (the demo's rule pack uses eca_write_log_message and
  eca_scalar from those modules).
- native_observability_otel reduced to OTLP push only — admin form,
  config schema and permissions all shrink accordingly.
- phpstan.neon.dist now covers modules/native_observability_otel/tests/src
  and modules/native_observability_export/tests/src (closes a
  pre-existing gap).
- README rewritten: tier table at the top, per-module
  Tier / Depends on / Required by headers, and the seven-group
  install layout.

Removed
- Drupal\\native_observability\\SanityCheck\\InstallGuard class and
  every InstallGuard::checkFor() call in hook_requirements('install').
  Service-integrity conflicts no longer block module installation;
  they are still reported on the Status Report and via
  drush no:sanity-check.
- Two scaffold-only .install files in dashboard and execution
  (their only content was the removed guard).
- Route name aliases renamed (public URLs unchanged):
    native_observability_otel.prometheus_metrics → native_observability_export.prometheus_metrics
    native_observability_otel.prometheus_scrape  → native_observability_export.prometheus_scrape
    native_observability_otel.elastic_export     → native_observability_export.elastic_export
  Custom code calling Url::fromRoute() against the old names needs
  updating; /native-observability/prometheus and /native-observability/elastic
  paths are unchanged.

Migrated
- native_observability_export_update_10001 (auto-run by drush updb)
  moves:
    * Bearer-token State key
      native_observability_otel.secret.prometheus_bearer_token →
      native_observability_export.secret.prometheus_bearer_token
    * Prometheus config keys (prometheus_window_seconds,
      prometheus_label_strategy, prometheus_max_series) from
      native_observability_otel.settings to
      native_observability_export.settings.
  Idempotent and logged on the dblog channel
  native_observability_export.

Fixed
- TechnicalInsightsController dataset CSV exports
  (/admin/reports/native-observability/export/{dataset}) no longer
  500 with AutowiringFailedException — TraceMetricsReader is now
  public so the on-the-fly controller autowire can resolve it.
- The base module's hook_requirements('install') no longer fatals
  on Drupal 11 with "Class InstallGuard not found"; the autoloader
  issue is gone with the removal of the install-time guard.

Verification done before tagging
- Clean wipe + install of each tier via the new drush presets.
- drush no:sanity-check OK on all three tiers.
- drush no:validate-pipeline reports 7 PASS / 1 WARN / 0 FAIL on
  the local DDEV stack (Tempo WARN is the dev-environment
  block-flush window, not a module issue).
- Cache backend rotation exercised on null, database, memcache,
  apcu and redis — the cache_observer logs every backend with
  consistent HIT/MISS/INVALIDATED distributions.
- Upgrade scenario simulated: bearer token + Prometheus config
  keys migrate correctly on drush updb.
- Static QA: phpcs 309 files clean, phpstan 0 errors, yaml-lint
  80 files valid. drupal.org CI pipeline green across composer,
  composer-lint, phpcs, eslint, stylelint, yamllint, phpunit.