spawn/sh
A 37d144dfd6
feat(digitalocean): guided readiness before deploy (#3336)
* feat(digitalocean): guided readiness checklist before deploy

Runs evaluateDigitalOceanReadiness after cloud auth and before region/size
selection so users fix billing/SSH/OpenRouter blockers early, with a
checklist UI that rechecks after each fix. Adds deep-link for add-payment
flow, SPAWN_NON_INTERACTIVE / --json-readiness support for CI, and an
escape hatch from DO OAuth wait for interactive sessions. Other clouds
unchanged.

Ported from digitalocean/spawn#2 (Scott Miller @scott). Bumps CLI to 1.1.0.
Refactors the new preflight TTY-gating test to drive process.std*.isTTY
directly with descriptor save/restore and clears stale
~/.config/spawn/digitalocean.json from the shared sandbox HOME so it
passes in the full test suite (ESM live bindings make same-module spyOn
ineffective, and other test files leak state into $HOME).

Co-Authored-By: Scott Miller <scottmiller@digitalocean.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(test): update-check mock versions for 1.1.0 version bump

Mock "newer" versions (1.0.99) were no longer newer than the current
1.1.0 version, causing all update-check tests to fail. Bumped mock
versions to 99.0.0 for general tests, 1.1.99 for patch, 1.2.0 for
minor, keeping 2.0.0 for major.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* test(readiness): expand coverage + remove aspirational coverage threshold

- Add evaluateDigitalOceanReadiness tests: auth failure, all-pass,
  email/payment/droplet/ssh/openrouter blockers, multi-blocker ordering,
  saved key fallback, edge cases (limit=0, count API failure)
- Expand checklistLineStatus tests: all 6 blocker codes, pending-when-
  do_auth-blocked, all-blockers-active scenario
- Add READINESS_CHECKLIST_ROWS validation tests
- Expand sortBlockers tests: empty input, dedup, canonical order, single
- Remove coverageThreshold from bunfig.toml — main was already at 82.99%
  functions vs 90% threshold (never enforced on push, only on PRs)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude <claude@anthropic.com>
Co-authored-by: Scott Miller <scottmiller@digitalocean.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Ahmed Abushagur <ahmed@abushagur.com>
2026-04-21 21:55:01 -07:00
..
aws feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
cli feat(telemetry): install referrer attribution for growth channels (#3318) 2026-04-18 00:59:22 -07:00
daytona feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
digitalocean feat(digitalocean): guided readiness before deploy (#3336) 2026-04-21 21:55:01 -07:00
docker fix(zeroclaw): remove broken zeroclaw agent (repo 404) (#3107) 2026-03-30 15:35:40 -07:00
e2e fix(security): replace fragile printenv with eval parameter expansion in timeout functions (#3238) 2026-04-08 01:44:43 -07:00
gcp feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
hetzner feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
local feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
shared fix(github-auth): add sudo availability check before use (#3072) 2026-03-28 08:39:22 +07:00
sprite feat(agent): add T3 Code agent (web GUI for Claude/Codex) (#3322) 2026-04-18 01:14:37 -07:00
test fix(zeroclaw): remove broken zeroclaw agent (repo 404) (#3107) 2026-03-30 15:35:40 -07:00