{
  "release": "0.20.1",
  "hosting_profile": "spaceship",
  "created_at": "2026-09-12T17:21:57.401279+00:00",
  "node_test_runtime": "v24.19.0",
  "user_supplied_host_database": "11.4.13-MariaDB-cll-lve",
  "node_shown_in_user_screenshot": "24.20.0",
  "host_remotely_verified": false,
  "local_quality_gate": "passed",
  "tests": {
    "passed": 491,
    "failed": 0,
    "skipped": 0,
    "added_since_phase20": 54
  },
  "checks": [
    "lint",
    "format",
    "unit/integration/security tests with fixtures",
    "environment templates",
    "original MySQL schema static verification",
    "MariaDB lineage static verification",
    "CSS build",
    "project structure",
    "MariaDB migration/seed dry runs",
    "YAML parse"
  ],
  "production_dependency_audit": {
    "info": 0,
    "low": 0,
    "moderate": 0,
    "high": 0,
    "critical": 0,
    "total": 0
  },
  "mysql_migrations": 23,
  "mariadb_migrations": 24,
  "seeds": 6,
  "original_mysql_migrations_and_seeds_byte_unchanged": true,
  "phase20_files_retained": 583,
  "changed_prior_files": [
    ".env.example",
    ".github/workflows/quality.yml",
    "README.md",
    "acceptance/config.js",
    "acceptance/live-services.js",
    "bin/backup.js",
    "bin/release-check.js",
    "docs/backup-restore.md",
    "docs/deployment.md",
    "infrastructure/cpanel/cron-examples.md",
    "infrastructure/cpanel/deployment-checklist.md",
    "package-lock.json",
    "package.json",
    "scripts/project-layout.js",
    "scripts/run-quality-checks.js",
    "src/bootstrap/bootstrap-scheduler.js",
    "src/bootstrap/bootstrap-web.js",
    "src/bootstrap/bootstrap-worker.js",
    "src/config/app.config.js",
    "src/config/constants.js",
    "src/config/database.config.js",
    "src/config/environment.js",
    "src/core/cache/rate-limit-store.js",
    "src/core/database/mysql.js",
    "src/core/database/schema-cli.js",
    "src/core/database/schema-readiness.js",
    "src/http/middleware/rate-limit.middleware.js",
    "src/modules/admin-console/operations.repository.js",
    "src/modules/analytics/analytics-rollup.repository.js",
    "src/modules/announcements/announcement.repository.js",
    "src/modules/notifications/broadcast.repository.js",
    "src/modules/referrals/referral.repository.js",
    "src/modules/reminders/reminder.repository.js",
    "src/modules/settings/feature-flag.repository.js",
    "src/modules/users/user.repository.js",
    "tests/integration/app.integration.test.js",
    "tests/integration/bootstrap-web.integration.test.js",
    "tests/smoke/project-structure.test.js",
    "tests/unit/phase20-release.test.js"
  ],
  "limits": {
    "cron_minimum_interval_seconds": 300,
    "cron_work_budget_seconds": 30,
    "cron_hard_timeout_seconds": 45,
    "telegram_attempts_per_run": 10,
    "recipients_per_source_per_run": 25,
    "default_db_connections_per_process": 3,
    "default_db_queue_limit": 30,
    "mariadb_statement_timeout_seconds": 5
  },
  "live_acceptance": "pending",
  "pending": [
    "actual MariaDB 11.4.13 SQL/migration/constraint/locking execution",
    "real Passenger startup/restart and proxy/header behavior",
    "native module install on host",
    "browser/Telegram workflows and outbound API connectivity",
    "resource/throughput acceptance on the actual account",
    "real MariaDB dump, encrypted restore and media restore"
  ],
  "external_actions": {
    "deployed": false,
    "webhook_changed": false,
    "telegram_messages_sent": false,
    "payments_sent": false
  },
  "updated_at": "2026-09-14T07:55:13.597990+00:00",
  "hotfix": {
    "id": "mariadb-broadcast-010",
    "cause": "CHECK references an ON DELETE SET NULL foreign-key column",
    "change": "Only fk_broadcasts_approver in MariaDB migration 010 changes to ON DELETE RESTRICT",
    "partial_migration_recovery": "Pinned source checksums; five unchanged statements; schema lock and transaction; no domain data deletion",
    "new_regression_tests": 15,
    "quality_command": "npm run check",
    "quality_output": "docs/MARIADB-BROADCAST-HOTFIX-CHECK.txt",
    "live_mariadb_acceptance": "added but not executed; server unavailable in this environment"
  },
  "miniapp_startup_hotfix": {
    "id": "miniapp-json-decoding",
    "cause": "mysql2 auto-decodes MariaDB extended and MySQL native JSON; existing repositories then parse scalar string settings a second time",
    "change": "Set jsonStrings: true in createMySqlPool so repositories decode exactly once",
    "new_regression_tests": 16,
    "reproduction": "Actual installed mysql2 3.24.3 text, binary, static text, and static binary packet parsers; MariaDB extended JSON and MySQL native JSON; no live server required",
    "quality_command": "npm run check",
    "quality_output": "docs/MINIAPP-STARTUP-QUALITY-CHECK.txt",
    "quality_stages": [
      "lint",
      "format:check",
      "test",
      "verify:environment:example",
      "verify:database-schema",
      "verify:spaceship",
      "build:css",
      "verify:project"
    ],
    "diagnostic": "node bin/diagnose-miniapp.js; bounded read-only database probes and sanitized local error tails",
    "database_files_unchanged_since_broadcast_hotfix": true,
    "live_hosting_test": "pending; screenshot request ID has not been matched to a hosting exception",
    "prior_audit_and_extra_checks": "Existing audit, migration dry-run and YAML evidence is retained; these were not repeated for this dependency-free patch"
  }
}
