{
  "schema_version": "wheelie_public_launch_hostname_matrix/v1",
  "updated_at": "2026-06-03",
  "source": "public launch hostname audit plus canonical hostname contract and control-plane IA readback, including object-alias shape reconciliation",
  "canonical_ga_urls": {
    "wheelie_product": "https://wheelie.dev/",
    "continua_company": "https://continua.ai/"
  },
  "routes": [
    {
      "host": "wheelie.dev",
      "route": "/",
      "owner": "website/public via wheelie_public_release",
      "deploy_path": "gs://wheelie-dev-public-distribution/index.html",
      "posture": "public_waitlist_root",
      "auth_class": "public_unauthenticated_rate_limited",
      "expected": {
        "title": "Wheelie waitlist",
        "canonical": "https://wheelie.dev/",
        "robots": "index,follow",
        "form_endpoint_support_state": "mediated_public_waitlist_endpoint",
        "source_page": "wheelie.waitlist",
        "pilot_handle": "wheelie-capacity-preview",
        "pilot_source_values": [
          "marketing_private_preview",
          "capacity_overflow",
          "manual_invite_interest"
        ],
        "query_params_preserved_in_waitlist_payload": true,
        "primary_cta": "request_access"
      },
      "validation_readback": [
        "curl -fsSLI https://wheelie.dev/?utm_source=probe",
        "Playwright desktop+mobile: title=Wheelie waitlist; h1=Join the Wheelie waitlist.; email form visible; source_page=wheelie.waitlist; utm_source preserved in waitlist payload; page is not docs index"
      ]
    },
    {
      "host": "www.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf",
      "deploy_path": "Google Cloud HTTPS load balancer redirect host rule",
      "posture": "redirect_to_canonical",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect_host": "https://wheelie.dev",
        "preserves_path_and_query": true,
        "status": 301,
        "examples": {
          "/": "https://wheelie.dev/",
          "/waitlist?utm_source=x": "https://wheelie.dev/waitlist?utm_source=x",
          "/?utm_source=x": "https://wheelie.dev/?utm_source=x"
        }
      },
      "validation_readback": [
        "dig +short A www.wheelie.dev",
        "curl -sSI -L https://www.wheelie.dev/?utm_source=x",
        "curl -sSI -L https://www.wheelie.dev/waitlist?utm_source=x"
      ]
    },
    {
      "host": "docs.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf",
      "deploy_path": "Google Cloud HTTPS load balancer redirect host rule",
      "posture": "redirect_to_docs_index",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect": "https://wheelie.dev/docs/wheelie/index.html",
        "status": 301
      },
      "validation_readback": [
        "dig +short A docs.wheelie.dev",
        "curl -sSI -L https://docs.wheelie.dev/"
      ]
    },
    {
      "host": "wheelie.dev",
      "route": "/waitlist",
      "owner": "website/public via wheelie_public_release",
      "deploy_path": "gs://wheelie-dev-public-distribution/waitlist",
      "posture": "public_waitlist",
      "auth_class": "public_unauthenticated_rate_limited",
      "expected": {
        "title": "Wheelie capacity waitlist",
        "canonical": "https://wheelie.dev/waitlist",
        "robots": "index,follow",
        "form_endpoint_support_state": "mediated_public_waitlist_endpoint",
        "source_page": "wheelie.waitlist",
        "pilot_handle": "wheelie-capacity-preview",
        "pilot_source_values": [
          "marketing_private_preview",
          "capacity_overflow",
          "manual_invite_interest"
        ]
      },
      "validation_readback": [
        "curl -fsSLI https://wheelie.dev/waitlist",
        "POST invalid email with Origin https://wheelie.dev returns 400 and CORS allow-origin without creating a row",
        "Playwright desktop+mobile: email form visible; invalid/empty email does not submit; mocked valid submit emits redacted telemetry"
      ]
    },
    {
      "host": "wheelie.dev",
      "route": "/sign-in",
      "owner": "cloud_config/infra/wheelie_dns.tf",
      "deploy_path": "Google Cloud HTTPS load balancer redirect route rule",
      "posture": "pre_ga_sign_in_redirect_to_waitlist",
      "auth_class": "public_unauthenticated_redirect_only",
      "expected": {
        "redirect": "https://wheelie.dev/waitlist",
        "status": 301,
        "strip_query": false,
        "rationale": "Wheelie browser sign-in is not a GA public web app entry yet; external sign-in intent should land on the verified waitlist rather than a 404. CLI/device pairing remains https://wheelie.dev/device."
      },
      "validation_readback": [
        "curl -sSI -L https://wheelie.dev/sign-in"
      ]
    },
    {
      "host": "wheelie.dev",
      "route": "/docs/wheelie/",
      "owner": "website/public docs via wheelie_public_release",
      "deploy_path": "gs://wheelie-dev-public-distribution/docs/wheelie/index.html",
      "posture": "docs_route_only",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect": "https://wheelie.dev/docs/wheelie/index.html",
        "title": "Wheelie private-preview docs",
        "robots": "index,follow"
      },
      "validation_readback": [
        "curl -fsSLI https://wheelie.dev/docs/wheelie/",
        "curl -fsSL https://wheelie.dev/docs/wheelie/quickstart.md"
      ]
    },
    {
      "host": "continua.ai",
      "route": "/",
      "owner": "website React app via Firebase Hosting continua-marketing-website",
      "deploy_path": "website/src/main.tsx + website/src/NewApp.tsx",
      "posture": "canonical_company_marketing",
      "auth_class": "public_unauthenticated",
      "expected": {
        "title": "Continua \u2014 Wheelie",
        "canonical": "https://continua.ai",
        "robots": "index,follow",
        "wheelie_cta": "https://wheelie.dev/",
        "waitlist_source_page": "marketing.waitlist",
        "wheelie_segment": false
      },
      "validation_readback": [
        "curl -fsSLI https://continua.ai/",
        "Playwright desktop+mobile: title=Continua — Wheelie; Continua h1 visible; Wheelie CTA points to wheelie.dev"
      ]
    },
    {
      "host": "continua.ai",
      "route": "/waitlist",
      "owner": "website React app via Firebase Hosting continua-marketing-website",
      "deploy_path": "website/src/NewApp.tsx explicit route to ContinuaWaitlistPage",
      "posture": "canonical_company_waitlist_alias",
      "auth_class": "public_unauthenticated_rate_limited",
      "expected": {
        "title": "Continua \u2014 Wheelie private preview",
        "canonical": "https://continua.ai",
        "source_page": "marketing.waitlist",
        "wheelie_segment": false,
        "rationale": "Continua company waitlist remains separate from the Wheelie-segmented waitlist; Wheelie CTAs point to https://wheelie.dev/waitlist."
      },
      "validation_readback": [
        "curl -fsSLI https://continua.ai/waitlist",
        "Playwright desktop+mobile: Continua waitlist form visible; Wheelie CTA points to wheelie.dev"
      ]
    },
    {
      "host": "continua.ai",
      "route": "/sign-in",
      "owner": "website React app via Firebase Hosting continua-marketing-website",
      "deploy_path": "website/src/NewApp.tsx explicit route to ContinuaWaitlistPage",
      "posture": "pre_ga_company_sign_in_waitlist_alias",
      "auth_class": "public_unauthenticated_rate_limited",
      "expected": {
        "title": "Continua \u2014 Wheelie private preview",
        "canonical": "https://continua.ai",
        "source_page": "marketing.waitlist",
        "wheelie_segment": false,
        "rationale": "Pre-GA company sign-in intent lands on the existing verified waitlist/session-resume surface instead of becoming a Wheelie-segmented lead."
      },
      "validation_readback": [
        "curl -fsSLI https://continua.ai/sign-in",
        "Playwright desktop+mobile: Continua waitlist/session-resume surface visible"
      ]
    },
    {
      "host": "www.continua.ai",
      "route": "/",
      "owner": "cloud_config/infra/dns_apex_zone.tf + Firebase Hosting custom domain",
      "deploy_path": "continua-marketing-website.web.app",
      "posture": "redirect_to_canonical",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect": "https://continua.ai/",
        "status": 301
      },
      "validation_readback": [
        "dig +short www.continua.ai",
        "curl -sSI -L https://www.continua.ai/"
      ]
    },
    {
      "host": "continua.ai",
      "route": "/wheelie",
      "owner": "website/firebase.json",
      "deploy_path": "Firebase Hosting redirect",
      "posture": "redirect_to_wheelie_product",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect": "https://wheelie.dev/",
        "status": 301
      },
      "validation_readback": [
        "curl -sSI -L https://continua.ai/wheelie"
      ]
    },
    {
      "host": "get.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf + wheelie public release",
      "deploy_path": "gs://wheelie-dev-public-distribution/install.sh",
      "posture": "installer_handoff_not_marketing",
      "auth_class": "public_unauthenticated",
      "expected": {
        "redirect": "https://get.wheelie.dev/install.sh",
        "status": 301
      },
      "validation_readback": [
        "curl -fsSLI https://get.wheelie.dev/"
      ]
    },
    {
      "host": "source.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf + Gravity runtime source projection",
      "deploy_path": "Cloud Run gravity service behind wheelie-source-runtime-backend",
      "posture": "source_readback_not_marketing",
      "auth_class": "route_dependent_public_readback_or_capability",
      "expected": {
        "support_state": "public_read_route_live_runtime_reconcile_pending"
      },
      "validation_readback": [
        "curl -fsSLI https://source.wheelie.dev/"
      ]
    },
    {
      "host": "search.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf + Wheelie public distribution CapSearch bundle",
      "deploy_path": "Wheelie public static distribution search host rewrite",
      "posture": "capsearch_discovery_not_control_plane",
      "auth_class": "public_unauthenticated",
      "expected": {
        "support_state": "public_capability_discovery",
        "canonical_gallery": "https://wheelie.dev/capabilities",
        "normal_api_origin": false
      },
      "validation_readback": [
        "curl -fsSLI https://search.wheelie.dev/"
      ]
    },
    {
      "host": "wheelie.dev",
      "route": "/device",
      "owner": "cloud_config/infra/wheelie_dns.tf + hosted Wheelie auth handoff",
      "deploy_path": "Wheelie-branded device-code handoff; current implementation may redirect to the current hosted browser auth backing origin",
      "posture": "wheelie_device_handoff_to_current_auth_backing_origin",
      "auth_class": "device_code_browser_session",
      "expected": {
        "support_state": "allowlist_or_authenticated",
        "may_redirect_to": "current_hosted_browser_auth_backing_origin_device_path",
        "browser_ux": "Wheelie-branded device pairing handoff that explains the current Continua-hosted auth origin without exposing private hostnames in public artifacts"
      },
      "validation_readback": [
        "curl -sSI -L https://wheelie.dev/device",
        "ssh wheelie.dev auth status --json"
      ]
    },
    {
      "host": "status.continua.ai",
      "route": "/",
      "owner": "public status provider",
      "deploy_path": "status.continua.ai external status surface",
      "posture": "public_status_not_marketing",
      "auth_class": "public_unauthenticated",
      "expected": {
        "support_state": "public_status_surface"
      },
      "validation_readback": [
        "curl -fsSLI https://status.continua.ai/"
      ]
    },
    {
      "host": "hosted-browser-backing-origin",
      "route": "/coding",
      "owner": "Gravity PWA Firebase Hosting",
      "deploy_path": "current hosted browser workbench backing origin",
      "posture": "authenticated_gravity_workbench_not_marketing",
      "auth_class": "verified_user_session",
      "expected": {
        "support_state": "gravity_runtime_surface",
        "receipt_label": "backing_host"
      },
      "validation_readback": [
        "wheelie auth status --json returns a typed hosted-browser backing_host receipt when authenticated"
      ]
    },
    {
      "host": "hosted-api-backing-origin",
      "route": "/healthz",
      "owner": "Gravity/Wheelie runtime control plane",
      "deploy_path": "current hosted runtime API backing origin",
      "posture": "current_wheelie_control_plane_backing_api_not_new_product_origin",
      "auth_class": "route_dependent_public_health_or_authenticated_runtime",
      "expected": {
        "support_state": "hosted_control_plane_current_backing_host",
        "receipt_label": "backing_host",
        "wheelie_app_api_alias_added": false
      },
      "validation_readback": [
        "wheelie auth status --json",
        "wheelie doctor --json reports hosted control-plane support state without printing backing hostnames"
      ]
    },
    {
      "host": "c.continua-ai.wheelie.dev",
      "route": "/",
      "owner": "cloud_config/infra/wheelie_dns.tf + Gravity workbench hosting",
      "deploy_path": "Google Cloud HTTPS load balancer redirect host rule to the path-first authenticated workbench",
      "posture": "workspace_alias_redirect_only",
      "auth_class": "public_unauthenticated_redirect_only_no_cookie",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "redirect_to_path_first_workbench",
        "redirect_target_kind": "path_first_authenticated_workbench",
        "support_state": "redirect_only_workspace_alias",
        "normal_ui_href_allowed": false,
        "browser_ux": "redirects to the path-first authenticated workbench without introducing a wheelie.dev session origin"
      },
      "validation_readback": [
        "dig +short A c.continua-ai.wheelie.dev",
        "curl -sSI -L https://c.continua-ai.wheelie.dev/"
      ]
    },
    {
      "host": "con10467-probe.c.continua-ai.wheelie.dev",
      "route": "/",
      "owner": "docs/wheelie_hostname_contract.md + cloud_config/apps/gravity/environments/prod/workstream_public_hosts.tf",
      "deploy_path": "unsupported direct-child host under c.<workspace>; no DNS record or TLS route is configured",
      "posture": "unsupported_object_alias_shape_no_dns",
      "auth_class": "fail_closed_by_dns_for_unsupported_alias_shape",
      "expected": {
        "dns": "not_configured",
        "tls": "not_applicable_dns_no_resolve",
        "routing": "not_resolved_until_valid_alias_shape_or_admission",
        "support_state": "unsupported_alias_shape_dns_fail_closed",
        "normal_ui_href_allowed": false,
        "browser_ux": "direct-child hosts under c.<workspace>.wheelie.dev are not object aliases; use <object>.<kind>.c.<workspace>.wheelie.dev for reserved object-alias readback or the path-first workbench for product links"
      },
      "validation_readback": [
        "dig +short A con10467-probe.c.continua-ai.wheelie.dev",
        "curl -sS -D - -o - https://con10467-probe.c.continua-ai.wheelie.dev/"
      ]
    },
    {
      "host": "sample-task.task.c.continua-ai.wheelie.dev",
      "route": "/",
      "owner": "Gravity workbench object-alias route registry",
      "deploy_path": "reserved wildcard route family; no normal product href until registry-auth admission",
      "posture": "reserved_object_alias_route_not_found",
      "auth_class": "fail_closed_until_registry_auth_route",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "typed_route_not_found_json",
        "error": "wheelie_route_resolution_failed",
        "route_status": "route_not_found",
        "support_state": "alias_pending_path_fallback",
        "normal_ui_href_allowed": false,
        "browser_ux": "browser receives redacted support-state JSON; product surfaces should link to the path-first workbench route instead"
      },
      "validation_readback": [
        "dig +short A sample-task.task.c.continua-ai.wheelie.dev",
        "curl -sS -D - -o - https://sample-task.task.c.continua-ai.wheelie.dev/"
      ]
    },
    {
      "host": "sample-agent.agent.c.continua-ai.wheelie.dev",
      "route": "/",
      "owner": "Gravity workbench object-alias route registry",
      "deploy_path": "reserved wildcard route family; no normal product href until registry-auth admission",
      "posture": "reserved_object_alias_route_not_found",
      "auth_class": "fail_closed_until_registry_auth_route",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "typed_route_not_found_json",
        "error": "wheelie_route_resolution_failed",
        "route_status": "route_not_found",
        "support_state": "alias_pending_path_fallback",
        "normal_ui_href_allowed": false,
        "browser_ux": "browser receives redacted support-state JSON; product surfaces should link to the path-first workbench route instead"
      },
      "validation_readback": [
        "dig +short A sample-agent.agent.c.continua-ai.wheelie.dev",
        "curl -sS -D - -o - https://sample-agent.agent.c.continua-ai.wheelie.dev/"
      ]
    },
    {
      "host": "sample-host.host.c.continua-ai.wheelie.dev",
      "route": "/",
      "owner": "Gravity workbench object-alias route registry",
      "deploy_path": "reserved wildcard route family; no normal product href until registry-auth admission",
      "posture": "reserved_object_alias_route_not_found",
      "auth_class": "fail_closed_until_registry_auth_route",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "typed_route_not_found_json",
        "error": "wheelie_route_resolution_failed",
        "route_status": "route_not_found",
        "support_state": "alias_pending_path_fallback",
        "normal_ui_href_allowed": false,
        "browser_ux": "browser receives redacted support-state JSON; product surfaces should link to the path-first workbench route instead"
      },
      "validation_readback": [
        "dig +short A sample-host.host.c.continua-ai.wheelie.dev",
        "curl -sS -D - -o - https://sample-host.host.c.continua-ai.wheelie.dev/"
      ]
    },
    {
      "host": "agent.continua-ai.wheelie.run",
      "route": "/",
      "owner": "Gravity hosted-runtime route registry",
      "deploy_path": "canonical service host family under wheelie.run; route binding required before serving",
      "posture": "canonical_service_route_not_found_until_bound",
      "auth_class": "fail_closed_until_service_route_binding",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "typed_route_not_found_json",
        "error": "wheelie_route_resolution_failed",
        "route_status": "route_not_found",
        "support_state": "reserved_canonical_service_pending_route_binding",
        "normal_ui_href_allowed": false,
        "browser_ux": "browser receives redacted support-state JSON until the service route is bound"
      },
      "validation_readback": [
        "dig +short A agent.continua-ai.wheelie.run",
        "curl -sS -D - -o - https://agent.continua-ai.wheelie.run/"
      ]
    },
    {
      "host": "sample-generated.wheelie.run",
      "route": "/",
      "owner": "Gravity hosted-runtime generated hostname registry",
      "deploy_path": "generated wheelie.run runtime host family; route binding required before serving",
      "posture": "generated_runtime_route_not_found_until_bound",
      "auth_class": "fail_closed_until_generated_route_binding",
      "expected": {
        "dns": "resolves",
        "tls": "ready",
        "routing": "typed_route_not_found_json",
        "error": "wheelie_route_resolution_failed",
        "route_status": "route_not_found",
        "support_state": "generated_runtime_pending_route_binding",
        "normal_ui_href_allowed": false,
        "browser_ux": "browser receives redacted support-state JSON; generated runtime hosts are not marketing or docs routes"
      },
      "validation_readback": [
        "dig +short A sample-generated.wheelie.run",
        "curl -sS -D - -o - https://sample-generated.wheelie.run/"
      ]
    }
  ],
  "guardrails": {
    "wheelie_apex_must_not_be_docs_index": true,
    "continua_ai_wheelie_must_not_serve_ambiguous_spa_shell": true,
    "no_self_serve_ga_claim_on_private_preview_pages": true,
    "browser_validation_required_for_marketing_changes": true,
    "object_aliases_must_not_be_normal_product_hrefs": true,
    "runtime_aliases_must_not_be_marketing_or_docs_routes": true,
    "route_not_found_responses_must_be_typed_and_redacted": true,
    "object_alias_kinds_not_normal_product_hrefs": [
      "task",
      "agent",
      "session",
      "host",
      "source",
      "evidence",
      "change"
    ],
    "no_new_authenticated_wheelie_dev_app_or_api_origin_without_alias_admission": true,
    "control_plane_receipts_must_label_continua_hosts_as_backing_hosts": true
  },
  "control_plane_ia": {
    "decision": "retain_existing_continua_control_plane_hosts_with_wheelie_labeled_receipts",
    "no_new_authenticated_wheelie_dev_aliases": true,
    "canonical_device_entry": "https://wheelie.dev/device",
    "current_browser_workbench": "wheelie://control-plane/current-browser-workbench-backing-origin",
    "current_api_backing_host": "wheelie://control-plane/current-api-backing-origin",
    "receipt_logical_refs": [
      "wheelie://work-items",
      "wheelie://working-copies",
      "wheelie://agent-runs",
      "wheelie://vms",
      "wheelie://validation-runs",
      "wheelie://evidence",
      "wheelie://source-roots",
      "wheelie://changes",
      "wheelie://checkpoints"
    ],
    "future_alias_admission_requires": [
      "auth_class_review",
      "cookie_domain_csrf_cors_negative_tests",
      "host_header_spoof_negative_tests",
      "route_admission_receipt"
    ],
    "direct_agent_run_api_surface": "wheelie agent-run ... with private-preview API support-state receipts"
  }
}
