Skip to content

feat(cli): roll up domain status into single diagnostic state - #206

Merged
Brooooooklyn merged 4 commits into
mainfrom
feat/custom-domain-ux-improvements
May 18, 2026
Merged

Brooooooklyn merged 4 commits into
mainfrom
feat/custom-domain-ux-improvements

Conversation

@Brooooooklyn

@Brooooooklyn Brooooooklyn commented May 18, 2026 •

Copy link
Copy Markdown
Member

Summary

  • void domain status now reports one of 8 computed states with a one-line diagnostic (error, awaiting_deployment, awaiting_dns, verifying_dns, issuing_cert, deploying_cert, active, pending), replacing the separate Status: / SSL Status: / Ownership: / Errors: lines that often read as contradictory whenever Cloudflare's state diverged from our DB row.
  • void domain status --verbose preserves the legacy multi-line breakdown for debugging, separated by a Details: header.
  • void domain add uses explicit named locals for section ordering (CNAME → ownership TXT → SSL TXT), appends a one-line summary directing the user to void domain status <host>, and on the SSL deadline-miss path replaces the SSL section with a "records will appear shortly" hint instead of silently omitting it.
  • DomainStatusResponse gains optional cf_status and awaiting_deployment fields consumed from the platform API (both optional for backward compat with pre-rollout API responses).
  • computeRollup and RolledUpStatus are exported so the state-machine priority is verified by a table-driven unit test in addition to the integration tests.

Paired with platform-side changes in voidzero-dev/void-platform (short-poll for SSL records, additive API fields). Implements design doc 0072.

Test plan

  • vp test run packages/void/test/unit/domain-command.test.ts — 43/43 pass locally
  • vp run --filter ./packages/void typecheck — clean
  • Manual: void domain add <hostname> on a project with TXT-DCV — verify CNAME, ownership TXT, SSL TXT all appear in one screen
  • Manual: void domain status <hostname> — verify rolled-up state line shows
  • Manual: void domain status <hostname> --verbose — verify legacy multi-line breakdown still appears under Details:
  • Manual: void domain status on a hostname without a deployment — verify awaiting_deployment diagnostic appears

🤖 Generated with Claude Code


Note

Medium Risk
Changes the void domain status output and logic to compute a new roll-up state machine based on additional API fields, which could misclassify domain states or confuse users if edge cases are missed. Backward-compat handling is included but depends on optional platform response fields.

Overview
Custom domain status output is revamped. void domain status now computes and prints a single rolled-up state plus a one-line diagnostic (via exported computeRollup), with an optional --verbose flag to also show the prior multi-line breakdown under a Details: section.

Platform response + CLI UX updates. DomainStatusResponse adds optional cf_status and awaiting_deployment fields (with fallback behavior when absent), void domain add now enforces deterministic DNS section ordering and includes a summary line, and the docs/help text are updated accordingly. Unit tests are expanded to cover the rollup priority/state matrix, --verbose rendering, and the updated domain add messaging.

Reviewed by Cursor Bugbot for commit ab94e66. Bugbot is set up for automated code reviews on this repo. Configure here.

@netlify

netlify Bot commented May 18, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for staging-void-cloud ready!

Name Link
🔨 Latest commit ab94e66
🔍 Latest deploy log https://app.netlify.com/projects/staging-void-cloud/deploys/6a0b0577218e35000868b039
😎 Deploy Preview https://deploy-preview-206--staging-void-cloud.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9d3d9ba697

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/void/src/cli/domain.ts Outdated
Comment thread packages/void/src/cli/domain.ts Outdated
Brooooooklyn added a commit that referenced this pull request May 18, 2026
Sections are conditionally rendered (ownership and SSL can be absent
on a deadline-miss or unusual CF response), so "Add all three records"
contradicted what users actually saw. Use neutral wording that
references the printed records instead of a fixed count.

Resolves bot review comments on #206.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Comment thread packages/void/src/cli/domain.ts
Brooooooklyn and others added 2 commits May 18, 2026 20:12
`void domain status` now reports one of 8 computed states with a
one-line diagnostic (error, awaiting_deployment, awaiting_dns,
verifying_dns, issuing_cert, deploying_cert, active, pending),
replacing the Status / SSL Status / Ownership / Errors block that
read as contradictory whenever Cloudflare's state diverged from
our DB row.

The legacy multi-line breakdown is preserved behind --verbose for
debugging, separated by a Details: header.

`void domain add` uses explicit named locals for section ordering
(CNAME -> ownership TXT -> SSL TXT), appends a one-line summary
directing the user to `void domain status <host>`, and on the
SSL deadline-miss path replaces the SSL section with a
"records will appear shortly" hint instead of silently omitting
it.

computeRollup and RolledUpStatus are exported so the state-machine
priority is verified by a table-driven unit test in addition to
the integration tests that exercise the rendered output.

DomainStatusResponse gains optional cf_status and awaiting_deployment
fields consumed from the platform API. Both are optional so the CLI
tolerates pre-rollout API responses cleanly.

Refs: meta/design-docs/0072-custom-domain-verification-ux-improvements.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sections are conditionally rendered (ownership and SSL can be absent
on a deadline-miss or unusual CF response), so "Add all three records"
contradicted what users actually saw. Use neutral wording that
references the printed records instead of a fixed count.

Resolves bot review comments on #206.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Brooooooklyn
Brooooooklyn force-pushed the feat/custom-domain-ux-improvements branch from 55ecc6e to 58b7cab Compare May 18, 2026 12:13
…below

The DNS record details render in a separate note block below the
status, not above it. Switched the directional reference.

Resolves bot review comment on #206.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c11e4e566e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/void/src/cli/domain.ts Outdated

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit c11e4e5. Configure here.

Comment thread packages/void/src/cli/domain.ts
Previously, status.status === 'active' alone produced "Live." even
when ssl_status indicated the cert was re-validating. Against
pre-rollout platforms (which don't return cf_status) the cert-renewal
window would slip past the issuing_cert clause and land at active,
falsely reporting the domain as live while SSL was still pending.

The issuing_cert clause already keys off per-field SSL signals when
cf_status === 'active'; this change applies the same principle to
the active branch, so a non-active ssl_status keeps the rollup honest
regardless of whether cf_status is present.

Resolves bot review comment on #206.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@Brooooooklyn
Brooooooklyn merged commit 8e76767 into main May 18, 2026
10 checks passed
@Brooooooklyn
Brooooooklyn deleted the feat/custom-domain-ux-improvements branch May 18, 2026 13:00
@cpojer

cpojer commented May 18, 2026

Copy link
Copy Markdown
Member

Nice.

cpojer pushed a commit that referenced this pull request Sep 11, 2026
Platform PR #162 merged before framework PR #206. Both PRs were
squash-merged, so the platform's submodule pointer on main now
references an orphan feature-branch SHA (ab94e66) that is not
reachable from framework's main.

This commit bumps the pointer to 8e76767 — the framework PR's
squash-merge commit on framework main — so `git submodule update`
on a fresh clone of platform main resolves cleanly.

No platform code changes; submodule pointer only.

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
cpojer pushed a commit that referenced this pull request Sep 11, 2026
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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.

2 participants