{
  "schema_version": "1.2.0",
  "canonical": "https://approximated.app/guides/examples/django--v6.1.json",
  "example": {
    "id": "django--v6.1",
    "framework": "Django",
    "edition": "v6.1",
    "edition_status": "current",
    "guide": "https://approximated.app/guides/django-custom-domains-guide/",
    "version_url": "https://approximated.app/guides/django-custom-domains-guide/v6.1/",
    "source_file": "src/guides/django-custom-domains-guide/index.html",
    "edition_source": "src/_partials/guide-editions/django/v6.1.html",
    "upstream_repository": "https://github.com/Approximated-Inc/django-custom-domains-example",
    "upstream_exists": true,
    "published": null,
    "prepared_at": "2026-09-09",
    "publication_status": "local_draft",
    "last_reviewed": "2026-09-09",
    "review_scope": "33 tests passed on Python 3.14.7/Django 6.1.1 with a clean system check and no migration drift. Coverage includes opposing apx_hit/is_resolving values, absent and invalid monitoring fields, confirmed ID and hostname checks, apx_hit/TLS routing gates, explicit local fixtures, tenant isolation, both CSRF negatives with no side effects, disabled retryable same-ID removal, delayed GET after completed deletion, stored-ID deletion, and replacement-safe delayed removal confirmation. Pinned-container smoke returned 200 for each seeded tenant and 404 for an unknown host. September 9 provider-mode follow-up: 38 tests passed in python:3.14.7-slim, including provider selection. Django checks and migration drift checks passed; forced-mock loopback smoke served both tenants and rejected an unknown hostname.",
    "runtime_test_status": "passed_local",
    "upstream_revision": "e0f8793bee78dff540e2b336e0d34c41510bfeb2",
    "tested_versions": {
      "python": "3.14.7",
      "python_local_smoke": "3.14.3",
      "python_container": "python:3.14.7-slim@sha256:cad9a2c871761c413caa6fdd6441c783451e740a48aaeba60ae62a8b53525ef6",
      "django": "6.1.1",
      "asgiref": "3.12.1",
      "sqlparse": "0.6.0",
      "sqlite_local_smoke": "3.51.3"
    },
    "test_commands": [
      "docker run --rm -v \"$PWD:/app\" -w /app python:3.14.7-slim sh -c 'python -m pip install --disable-pip-version-check -r requirements.txt && python manage.py check && python manage.py makemigrations --check --dry-run && python manage.py test'",
      "docker run --rm --name django-guide-smoke -p 127.0.0.1:8083:8083 -v \"$PWD:/app\" -w /app python:3.14.7-slim sh -c 'python -m pip install --disable-pip-version-check -r requirements.txt && python manage.py migrate && python manage.py seed_demo && python manage.py runserver 0.0.0.0:8083 --noreload'",
      "curl -H 'Host: northwind.localhost' http://127.0.0.1:8083/",
      "curl -H 'Host: contoso.localhost' http://127.0.0.1:8083/",
      "curl -i -H 'Host: unknown.localhost' http://127.0.0.1:8083/"
    ],
    "api_contract_revision": "99f0de6b74f4a88a7c5674d86c852036f22dcd13",
    "api_paths": [
      "/api/vhosts",
      "/api/vhosts/{id}"
    ],
    "not_tested": [
      "No live Approximated API credentials or service requests were used.",
      "No public DNS records, certificate issuance, HTTPS endpoint, or asynchronous live deletion convergence was exercised.",
      "No production WSGI/ASGI server, production database, or external reverse proxy was exercised.",
      "Python 3.12 and Python 3.13 compatibility were not run locally.",
      "The provider-independent walkthrough snippets are illustrative; companion runtime results do not verify every guide snippet."
    ],
    "direct_resource": "https://approximated.app/guides/examples/django--v6.1.json",
    "snippet_count": 8,
    "snippets": [
      {
        "id": "django--v6.1--snippet-1-python",
        "language": "python",
        "sha256": "a3ce3a3e1b534960316f146dbf447b3cd434f0113bd78b21648b937f5d99fa4b"
      },
      {
        "id": "django--v6.1--snippet-2-bash",
        "language": "bash",
        "sha256": "28f7ed14b2ba13c300f6448b507dcd536835db8271c26d4731057ed14d3cef1d"
      },
      {
        "id": "django--v6.1--snippet-3-python",
        "language": "python",
        "sha256": "331c4a79226d23adcf7ff58480288a16ea2d258d674ca8d7aa64266dae3333d4"
      },
      {
        "id": "django--v6.1--snippet-4-python",
        "language": "python",
        "sha256": "d3cc2bfd5681b5c6209a160d5446a5ddaa9cfc313a25226daac91cd1c3b06e2c"
      },
      {
        "id": "django--v6.1--snippet-5-python",
        "language": "python",
        "sha256": "a5a840de8b1224c0d22c6673c24b18b8be451bd7a52d1e429f1967d12876eca3"
      },
      {
        "id": "django--v6.1--snippet-6-python",
        "language": "python",
        "sha256": "f8ba8df729b5f53d5ac36f1e4740368d86d082e6ee933b05c03ee76ecd244532"
      },
      {
        "id": "django--v6.1--snippet-7-python",
        "language": "python",
        "sha256": "618c6e4f027a3f15cca3d7aacd5b31aebd950210e535a33e6b0745c22997765f"
      },
      {
        "id": "django--v6.1--snippet-8-bash",
        "language": "bash",
        "sha256": "45fbcdc6fa380d4ba29f77669b585c119edfcf54ad6f76f8b0c6ad9c70436540"
      }
    ],
    "sources": [
      {
        "url": "https://www.djangoproject.com/download/",
        "title": "Download Django"
      },
      {
        "url": "https://docs.djangoproject.com/en/6.1/releases/6.1/",
        "title": "Django 6.1 release notes"
      },
      {
        "url": "https://docs.djangoproject.com/en/6.1/faq/install/",
        "title": "Django installation FAQ and Python compatibility"
      },
      {
        "url": "https://pypi.org/project/Django/",
        "title": "Django on PyPI"
      },
      {
        "url": "https://www.python.org/downloads/release/python-3147/",
        "title": "Python 3.14.7 release"
      },
      {
        "url": "https://approximated.app/openapi.yaml",
        "title": "Approximated public OpenAPI contract"
      },
      {
        "url": "https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/ResourceRecordTypes.html",
        "title": "A, AAAA, and CNAME records and apex restrictions"
      },
      {
        "url": "https://developers.cloudflare.com/dns/cname-flattening/",
        "title": "Provider-specific CNAME flattening at the apex"
      },
      {
        "url": "https://approximated.app/docs/#how-approximated-works",
        "title": "Approximated routing, certificates, and dedicated IPv4"
      },
      {
        "url": "https://approximated.app/docs/#edge-verify",
        "title": "Form bot protection with Edge Verify"
      },
      {
        "url": "https://approximated.app/docs/#edge-sequences",
        "title": "Request rules and rate limiting with Edge Sequences"
      },
      {
        "url": "https://approximated.app/docs/#dns-widget",
        "title": "DNS onboarding widget and provider-specific support"
      },
      {
        "url": "https://approximated.app/docs/#webhook-events-virtual-host-monitor-updated",
        "title": "Domain monitoring status webhooks"
      }
    ],
    "walkthrough": {
      "provider_independent": true,
      "optional_integration_anchor": "bonus-approximated",
      "code_scope": "Main walkthrough snippets illustrate adding custom domains to an existing app. They are not a complete standalone application or a copy of the companion implementation.",
      "runtime_verification_scope": "Recorded runtime versions, commands, and results apply to the companion repository implementation. They do not imply that every illustrative guide snippet was executed.",
      "domain_connection_policy": {
        "txt_challenge_required": false,
        "dns_check_in_main": "A brief recommendation to check that DNS points directly or indirectly to the app or its receiving service.",
        "automated_dns_checks": "Explained in the optional Approximated bonus, alongside HTTPS readiness."
      }
    },
    "companion_provider_mode": {
      "default": "auto",
      "api_key_environment_variable": "APX_API_KEY",
      "without_key": "local mock",
      "with_key": "real Approximated API at https://cloud.approximated.app",
      "explicit_mock_override": "APX_PROVIDER_MODE=mock",
      "verification": {
        "date": "2026-09-09",
        "summary": "38 tests passed in python:3.14.7-slim, including provider selection. Django checks and migration drift checks passed; forced-mock loopback smoke served both tenants and rejected an unknown hostname.",
        "live_api_used": false
      }
    },
    "publication_evidence": {
      "type": "public_companion_git_tag",
      "published_at": "2026-09-09",
      "repository": "https://github.com/Approximated-Inc/django-custom-domains-example",
      "revision": "e0f8793bee78dff540e2b336e0d34c41510bfeb2",
      "tag": "guide-django6.1-r1",
      "tag_url": "https://github.com/Approximated-Inc/django-custom-domains-example/tree/guide-django6.1-r1",
      "anonymous_clone_verified_at": "2026-09-09",
      "scope": "Companion source publication and anonymous HTTPS clone verified. This does not establish guide deployment or live API, DNS, or HTTPS acceptance."
    }
  }
}
