# DNS TTL migration planner

- Human page: https://happytails.ai/en/developer-tools/dns-ttl-migration-planner/
- Markdown: https://happytails.ai/en/developer-tools/dns-ttl-migration-planner.md
- Structured JSON: https://happytails.ai/agents/en/developer-tools/dns-ttl-migration-planner/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `dns-ttl-migration-planner` |
| Category | developer-tools |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.

### Inputs and settings

No free-text input is required. Use the file inputs and/or settings below.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `lowerTtlAt` | Publish the new TTL at (UTC) | text | "2026-10-15T00:00:00Z" |  |
| `oldTtlSeconds` | Old positive TTL (s) | text | "86400" |  |
| `newTtlSeconds` | New positive TTL (s) | text | "300" |  |
| `oldSoaTtlSeconds` | Old SOA TTL (s) | text | "3600" |  |
| `oldSoaMinimumSeconds` | Old SOA MINIMUM (s) | text | "900" |  |
| `newSoaTtlSeconds` | New SOA TTL (s) | text | "300" |  |
| `newSoaMinimumSeconds` | New SOA MINIMUM (s) | text | "60" |  |
| `authorityLagSeconds` | Authority publication lag (s) | text | "120" |  |
| `resolverFloorSeconds` | Assumed resolver minimum retention (s) | text | "0" |  |
| `serveStaleSeconds` | Assumed extra stale-answer retention (s) | text | "0" |  |
| `safetySeconds` | Additional safety margin (s) | text | "60" |  |
| `changeAt` | Publish the changed record at (UTC), optional | text | "" |  |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "dns-ttl-migration-planner",
  "category": "developer-tools",
  "built": true,
  "requirements": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
  "implementation": {
    "fields": [
      {
        "key": "lowerTtlAt",
        "label": "Publish the new TTL at (UTC)",
        "value": "2026-10-15T00:00:00Z",
        "type": "text",
        "maxLength": 24,
        "help": "Enter an exact UTC timestamp with seconds, such as 2026-10-15T00:00:00Z. No local-time conversion is inferred."
      },
      {
        "key": "oldTtlSeconds",
        "label": "Old positive TTL (s)",
        "value": "86400",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 2147483647."
      },
      {
        "key": "newTtlSeconds",
        "label": "New positive TTL (s)",
        "value": "300",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 2147483647."
      },
      {
        "key": "oldSoaTtlSeconds",
        "label": "Old SOA TTL (s)",
        "value": "3600",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 2147483647."
      },
      {
        "key": "oldSoaMinimumSeconds",
        "label": "Old SOA MINIMUM (s)",
        "value": "900",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
      },
      {
        "key": "newSoaTtlSeconds",
        "label": "New SOA TTL (s)",
        "value": "300",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 2147483647."
      },
      {
        "key": "newSoaMinimumSeconds",
        "label": "New SOA MINIMUM (s)",
        "value": "60",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number from 0 to 4294967295. Negative-cache TTL is the lesser of SOA TTL and SOA MINIMUM."
      },
      {
        "key": "authorityLagSeconds",
        "label": "Authority publication lag (s)",
        "value": "120",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
      },
      {
        "key": "resolverFloorSeconds",
        "label": "Assumed resolver minimum retention (s)",
        "value": "0",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
      },
      {
        "key": "serveStaleSeconds",
        "label": "Assumed extra stale-answer retention (s)",
        "value": "0",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
      },
      {
        "key": "safetySeconds",
        "label": "Additional safety margin (s)",
        "value": "60",
        "type": "text",
        "inputMode": "decimal",
        "maxLength": 24,
        "help": "Use a whole number of seconds from 0 to 315360000. This is a supplied assumption, not a measured value."
      },
      {
        "key": "changeAt",
        "label": "Publish the changed record at (UTC), optional",
        "value": "",
        "type": "text",
        "maxLength": 24,
        "help": "Optional. Leave empty to use the earliest modeled time; otherwise enter an exact UTC timestamp such as 2026-10-16T00:00:00Z."
      }
    ],
    "registrationFamily": "network-planning",
    "input": false,
    "presentation": "metrics",
    "note": "Wait for the old positive and negative cache retention after the last authority publishes the new TTL. Negative TTL is the lesser of SOA TTL and SOA MINIMUM. The supplied resolver floor, stale-answer allowance and safety margin are explicit assumptions. Authority lag applies to each publication. A manually selected earlier change retains the old high-TTL expiry in the retirement calculation. Outages, application caches, delegation changes and unbounded stale answers can exceed the model. This timeline does not guarantee global DNS propagation. Runs locally without uploads. Limit: 500000 combined input characters, 1000 services and 5000 conflicting pairs. Complete JSON and JSON Pointer CSV exports are each capped at 2000000 characters; CSV contains at most 200000 typed values. Preview shows at most 200 rows. Calculations stop after 10 seconds. Downloads retain your source inputs, units, assumptions and complete results.",
    "inputMaxLength": 500000,
    "inputErrorCode": "NETWORK_PLANNING_INPUT",
    "example": {
      "input": "",
      "options": {
        "lowerTtlAt": "2026-10-15T00:00:00Z",
        "oldTtlSeconds": "86400",
        "newTtlSeconds": "300",
        "oldSoaTtlSeconds": "3600",
        "oldSoaMinimumSeconds": "900",
        "newSoaTtlSeconds": "300",
        "newSoaMinimumSeconds": "60",
        "authorityLagSeconds": "120",
        "resolverFloorSeconds": "0",
        "serveStaleSeconds": "0",
        "safetySeconds": "60",
        "changeAt": ""
      }
    },
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 500000,
      "inputMode": "text",
      "label": "Your text",
      "placeholder": "Type or paste your input…",
      "help": "Up to 500,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Build a DNS change timeline from positive and negative TTLs, authority lag and your cache assumptions.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use DNS TTL migration planner

1. Set the UTC time for publishing the new TTL and enter old and new positive TTLs and SOA values.
2. Enter authority lag, any resolver minimum retention, extra stale-answer retention and a safety margin.
3. Review the suggested change and retirement times, or supply an earlier change time to inspect remaining cache exposure.

## Useful next steps

- [DNS zone diff](https://happytails.ai/en/developer-tools/dns-zone-diff/) ([Markdown](https://happytails.ai/en/developer-tools/dns-zone-diff.md))

- [DNS name length checker](https://happytails.ai/en/developer-tools/dns-name-length-checker/) ([Markdown](https://happytails.ai/en/developer-tools/dns-name-length-checker.md))

- [HTTP cache policy analyzer](https://happytails.ai/en/developer-tools/http-cache-policy-analyzer/) ([Markdown](https://happytails.ai/en/developer-tools/http-cache-policy-analyzer.md))

## Wait out records cached under the old TTL

The waiting period begins after the last authority is assumed to publish the new TTL. Old records could have been fetched just before that point. Negative-cache TTL uses the lesser of the SOA TTL and SOA MINIMUM. If you choose an earlier record change, the report retains the old high-TTL expiry in its retirement calculation.

### Treat the schedule as a bounded scenario

Authority lag, resolver retention and extra stale-answer time are assumptions you provide. Outages, application caches, delegation changes, DNSSEC and unbounded stale-answer behavior may exceed them. The output is a UTC timeline, not a measurement of global propagation or a guarantee that every client has updated.
