{
  "name": "Warconomy production health",
  "asOf": "2026-06-05",
  "note": "How Warconomy classifies production 404/error traffic, the deployment-automation reconciliation, and crawler hygiene. Static and public-safe — no logs, IPs, or secrets; no numeric data asserted.",
  "page": "https://warconomy.com/operator/production-health",
  "versioning": {
    "knownVersions": 157,
    "htmlMaterializedVersions": 10,
    "olderVersionsPolicy": "Older versions are JSON-only; their /changes/{version} HTML returns a clean 404 and no internal link points to it (the timeline gates its link; the change index links older versions to their frozen JSON)."
  },
  "errorClasses": [
    {
      "pattern": "/wp-admin/*, *.php probes, /xmlrpc.php, common CMS/admin paths",
      "errorClass": "bot-noise",
      "likelyCause": "Automated scanners probing for WordPress/PHP installs. Warconomy is not WordPress and has no admin surface.",
      "userImpact": "None — no real visitor requests these.",
      "action": "Leave as 404 (the cheapest correct response). Do not build admin-like pages or redirects that make a probe look successful.",
      "resolved": true
    },
    {
      "pattern": "/changes/{version} for older, non-materialized versions (e.g. /changes/1.96.0)",
      "errorClass": "stale-version",
      "likelyCause": "Per-version HTML detail is capped to the latest few versions (build-cost cap); older versions are JSON-only. A page once linked every version's HTML page unconditionally, and crawlers cached those URLs.",
      "userImpact": "A crawler or stale link hitting an older version page 404s; no real visitor path reaches it.",
      "action": "Fixed at the source: the version timeline now only links HTML detail where it exists, and the change index links older versions to their frozen JSON — so no internal link points to a non-materialized version page. Older /changes/{version} return a clean 404, which is acceptable stale-crawler noise (a redirect was tried but App Hosting coalesced the Location header for dynamic segments).",
      "resolved": true
    },
    {
      "pattern": "Internal hrefs / sitemap / llms.txt / route-catalog entries that don't resolve",
      "errorClass": "broken-internal-link",
      "likelyCause": "A page, export, or crawler file pointing at a route that isn't generated.",
      "userImpact": "Crawlers waste budget; users hit dead ends.",
      "action": "Audited by tests: the sitemap contains only materialized /changes/{version} entries, and the broken-link audit checks discovery pages and crawler files. None outstanding.",
      "resolved": true
    },
    {
      "pattern": "Random one-off 404s (typos, truncated URLs, link-rot from other sites)",
      "errorClass": "acceptable",
      "likelyCause": "Normal background noise for any public site.",
      "userImpact": "Minimal.",
      "action": "Acceptable. Focus effort on internal links and sitemap correctness, not on chasing every external 404.",
      "resolved": true
    }
  ],
  "crawlerHygiene": [
    {
      "surface": "robots.txt",
      "posture": "Allows crawling of public pages and references the sitemap."
    },
    {
      "surface": "sitemap.xml",
      "posture": "Lists only valid public URLs; per-version change pages are limited to the materialized set."
    },
    {
      "surface": "llms.txt",
      "posture": "Points AI tools at valid public and machine-readable URLs only."
    },
    {
      "surface": "route catalog (/routes)",
      "posture": "Enumerates real routes; new routes are added with their data exports."
    },
    {
      "surface": "legacy /monitors/* redirects",
      "posture": "Still 308-redirect to their canonical topic pages."
    }
  ],
  "deployment": {
    "mechanism": "Firebase App Hosting builds each commit on main via Cloud Build, then promotes a serving rollout.",
    "abiuObserved": "The Firebase Console shows 'Automatic rollouts: Enabled' while `apphosting:backends:list` reports the ABIU column as 'Disabled' — the two track different things and the CLI value lags. A behavioral test confirmed the Console is correct: a push auto-promoted a brand-new route to production (~9 minutes) with no manual rollout.",
    "arbiter": "Auto-rollout is confirmed working: push to main and the new revision promotes itself. The manual `apphosting:rollouts:create --git-branch main --force` is the documented fallback if a future push ever stays stale, but is no longer needed for normal deploys.",
    "noSettingsChanged": "No Firebase settings are changed from the repo."
  },
  "mobile": {
    "status": "Document-level horizontal scroll is prevented (html overflow-x:clip); the top nav and wide tables scroll inside their own containers.",
    "regression": "Guarded by the mobile-overflow CSS test."
  },
  "whatClaudeCanCheckLater": [
    "Re-run the broken-link / sitemap-validity audits after any route change.",
    "Confirm only materialized /changes/{version} appear in the sitemap.",
    "Confirm robots.txt references the sitemap and llms.txt URLs resolve.",
    "Re-confirm ABIU truth by observing whether a push auto-promotes."
  ],
  "nextManualAction": "Confirm whether automatic rollouts are truly enabled (watch whether the next push auto-promotes). If not, re-enable ABIU in the Firebase console — a deliberate setting change. Search Console / Bing setup remains a manual step.",
  "related": {
    "backlog": "https://warconomy.com/operator/backlog",
    "automation": "https://warconomy.com/operator/automation",
    "indexing": "https://warconomy.com/methodology/indexing"
  }
}