Lab note #57: Tools page with a working DNS Lookup

The ask

Paul had ChatGPT brief this session over SSH: build a Tools section on the private staging site, starting with a real DNS lookup tool, and keep it in my voice and in the theme’s existing design. Staging only, no deploy.

What changed

  • New Tools hub at /tools/. A short intro, one featured DNS Lookup card with what it helps with, a “who this is for” section, the same button and card styling used elsewhere on the site, and a link through to the AI & Automation page. Only the working tool is listed: ideas for later tools stay in my private notes.
  • New DNS Lookup tool at /tools/dns-lookup/. Set as a child of Tools, so the page carries a Home / Tools / DNS Lookup breadcrumb trail.
  • Real lookups, browser side. Queries go from the visitor’s browser straight to Google Public DNS or Cloudflare over DNS-over-HTTPS. No server proxy, no API key, no shell command, no host changes and nothing stored.
  • Record types: A, AAAA, CNAME, MX, TXT, NS, SOA and CAA, each with a plain-language explanation, plus an explanation of the TTL.
  • The answer shows the records the resolver returned with each record’s actual type, its TTL in seconds, the resolver used, the query time and the DNS response status, and it can be copied as a readable text report.
  • Errors and limits are named apart: NXDOMAIN, NOERROR with no records, SERVFAIL, a timeout, an HTTP failure and a blocked request all read differently. The wording never claims worldwide propagation, a security audit or a complete email diagnosis.
  • Tools added to the existing block navigation after Lab Notes. Every other entry is untouched, and the hub and tool pages use the theme’s presets for colours, font sizes and spacing, with the tool’s CSS scoped to the tool itself.

How

SSH into openclaw01, a git pull, and every change made through the ops/wp.sh wrapper around WP-CLI: no raw SQL, nothing edited by hand in the site export. One snapshot before each change, then export, verify and a typed commit after each one: the hub, the tool, then the navigation, as three separate commits.

Attribution: ChatGPT orchestrated this session over SSH and Hermes executed it, running deepseek-v4.1-flash through opencode-go at high reasoning effort. Every commit and this Lab Note carry the chatgpt harness name as Paul’s orchestration rules require.

What worked, what didn’t

  • Testing before publishing worked. I pulled the tool’s script out of the page source and ran it in a local JavaScript harness against the real resolvers: 47 checks covering input validation, the exact request each resolver receives, parsing, rendering and the copy fallback. All 47 passed, with eight real lookups.
  • One real bug was caught that way. The first version rejected single-label names such as com, which is wrong for anyone querying the top of a zone. It accepts them now. A stale expectation in my own test also had to be corrected.
  • The published pages were re-checked from the served HTML: the tool script runs, the form fields, record list, status and error regions are all present, and the navigation renders Tools between Lab Notes and Scoreboard.
  • What I could not do here: render the page in a real browser. There is no working browser renderer on openclaw01, so layout, focus order and clipboard behaviour were verified by reading the served HTML and running the published script, not by looking at the page. ChatGPT will browser-test independently.
  • CORS is unproven from here. Both providers document browser access to these endpoints and the request is built to their published API, but a browser’s own cross-origin behaviour can only be confirmed in a browser.
  • Not exercised: the ten second request timeout path and the clipboard-success path, since neither can be triggered reliably from this host.
  • Pre-existing change: three audit records from Claude’s earlier production deploy were already uncommitted in logs/actions.jsonl when this session started. They were preserved in their own commit and are not part of this work.
  • Staging only, production unchanged. Nothing was deployed and no production write was made.

Change record

Harnesschatgpt
Date2026-10-11 11:49
Latest snapshot20261011-114840
Undo this sessionops/rollback.sh --git 24857aa

Commits

  • c8ffd2c content: pre-labnote capture
  • f8a92f3 content: add Tools to the navigation
  • 1054a0c content: add the DNS Lookup tool under Tools
  • bac9712 content: add the Tools hub page
  • 879bc2f ops: preserve pre-session deployment audit