Skip to content

fix(dns plugin): shorten machine-written names in the default table - #109

Merged
scotwells merged 1 commit into
feat/exclude-managed-recordsfrom
feat/truncate-long-names
Aug 26, 2026
Merged

fix(dns plugin): shorten machine-written names in the default table#109
scotwells merged 1 commit into
feat/exclude-managed-recordsfrom
feat/truncate-long-names

Conversation

@scotwells

@scotwells scotwells commented Aug 26, 2026

Copy link
Copy Markdown
Contributor

Excluding the records Datum manages fixed one zone's width but not the general case: any system that writes into DNS puts an encoded identifier in the owner name, and Datum does not label a third party's records as managed. In prism, 1093 of the long names come from external-dns and count as your own.

Names split cleanly into two populations:

written by shape length
people @, www, _dmarc, _acme-challenge, selector1._domainkey 1–20
machines hex digest / UUID / base32 public key 32 / 36 / 52

40 sits in the gap, so a hand-written name is shown whole and an encoded one is cut. Measured against real zones, every hand-authored name in datum-staging.net fits — median 11, longest exactly 40.

Names cost more to cut than values

A name is an argument — record describe and record delete both take one — so shortening it can leave a row you cannot act on. Three things keep that honest:

  • the footer counts names separately from values, so a shortened name is never silent
  • -o wide and -o json carry names in full
  • -o name is never shortened, since it exists precisely to turn a row back into something you can pass to describe or delete

Effect

Both zones now render at 151 columns, down from 180 and 166, and the width no longer depends on what a connector happened to name a record.

Worth noting for later: the widest remaining contributor is now STATUS, where a provenance marker like Programmed (managed by AI Edge) is 32 characters.

Related

Three readability fixes for datumctl dns record list, reviewed and merged bottom-up:

  1. fix(dns plugin): shorten long record values in the default table #107 — shorten long values (base: main)
  2. feat(dns plugin): add --no-managed to list only your own records #108--no-managed to hide records another system writes
  3. fix(dns plugin): shorten machine-written names in the default table #109 — shorten machine-written names

All three follow #102, which added the plugin, and are UX fixes found while using it against real staging zones. The plugin ships from #106's release plumbing and is installed via datum-cloud/datumctl-plugins#22.

Written after #108 proved insufficient for prism, where 1093 long names come from external-dns and count as your own.

Excluding the records Datum manages fixed one zone's width but not the general case: any system that writes into DNS puts an encoded identifier in the owner name, and Datum does not label a third party's records as managed.

Names split cleanly into two populations. The ones people write are conventions with fixed shapes — @, www, _dmarc, _acme-challenge, a DKIM selector — and run to about twenty characters. The ones machines write carry an identifier and start around thirty-two: a hex digest at 32, a UUID at 36, or the 52 characters a base32-encoded 256-bit key costs. 40 sits in the gap, so a hand-written name is shown whole and an encoded one is cut.

Cutting a name costs more than cutting a value, because a name is an argument: `record describe` and `record delete` take one. The footer now counts names separately from values and points at the output that carries them in full, and `-o name` — which exists to turn a row back into something you can pass to those commands — is never shortened.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@scotwells
scotwells merged commit 60a49fd into feat/exclude-managed-records Aug 26, 2026
9 checks passed
@scotwells
scotwells deleted the feat/truncate-long-names branch August 26, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants